Play Home Contribute Github Join Us! Discourse Staff Members Github Contribution Guides Team

Вопросы о синтаксисе Python в CodeCombat

Решил я на старости лет поучиться программированию, нашел этот очень удобный ресурс ,но столкнулся с проблемой . Не понимаю очень многих моментов в объяснениях к примеру hero.findItems() возвращает массив всех предметов в зоне видимости выглядит это так
items = hero.findItems() так вот куда он это возвращает можно как то узнать тип type этого итемс что можно сделать с ним и еще куча вопросов. Есть какой то чат в котором разбирают подобные моменты ? Я понимаю что еще в начале пути и чем дальше тем больше будет вопросов. может быть есть какой то ресурс где могут разжевать такие вопросы ? Очень желательно на русском. vk facebook телеграмм да что угодно. Помощь в прохождении не нужна только объяснение синтаксиса и разных моментов не очевидных для полного нуба в программировании.

Привет, Араксус,
Я понимаю, почему на первый взгляд кодирование может показаться немного запутанным.
О массивах: позвольте мне привести пример использования массивов в разных настройках:

enemies = hero.findEnemies() # это найти список всех врагов в поле зрения, как вы сказали

enemy = hero.findNearest(enemies) #это то же самое, что и функция:

enemy = hero.findNearestEnemy() #Эта строка важна, потому что вы не можете найти тип массива. 

#Например, вам нужно получить одного врага: ближайшего, чтобы проверить его тип и, возможно, атаковать его.

if enemy.type == "munchkin": #теперь, когда у нас выделен один враг, мы можем проверить его тип
    hero.attack(enemy) #и мы можем также атаковать его

Я думаю, что самое важное в массивах - это понять, какие функции вы можете использовать для каких элементов массива.
Поэтому, если вы найдете ближайший предмет, вы можете проверить его тип и подобрать его.
Но вы не можете проверить тип массива.
Есть несколько функций, которые вы используете для массивов.
Вот один из самых простых, который часто появляется на более поздних уровнях:

items = hero.findItems()

python:

number = len(items) #возвращает его длину в числе.

javascript:

number = items.length #делает то же самое.

О том, что есть место, чтобы поговорить о коде, я не думаю, что есть.
Но вы всегда можете задать новые вопросы по этой теме, и я, или другой человек в беседе, могу ответить на них.
Если бы вы сделали это, я бы переименовал тему примерно так:
Вопросы о синтаксисе Python в CodeCombat.
И вы всегда сможете размещать свои посты там, чтобы никто не говорил, что вы не по теме (это случается довольно часто).
Надеюсь, это поможет,
:lion: :lion: :lion:

1 Like

прохожу "месиво сакрвена 4"столкнулся с такой проблеммой typeError: cannot read proptrty “health” of null

code
# Выживи две минуты.
# Если выиграешь, то сложность и награда возрастут.
# Если проиграешь, то придется подождать сутки до следующей попытки.
# Помни: каждая игра генерируется случайно.
def dl15(target):#  вампирик рэнж 15
    if target:
        distance = hero.distanceTo( target)
        if distance<15:
            if hero.canCast("drain-life", target):
                hero.cast("drain-life",  target)

def burl():
    if hero.canCast("summon-burl"):
        hero.cast("summon-burl")

def zomb():
    if hero.canCast("summon-undead"):
        hero.cast("summon-undead")

def zomb2():
    if hero.canCast("raise-dead"):
        hero.cast("raise-dead")

def ata(target):
    if target:
        hero.attack( target)

def invi():
    if hero.canCast("invisibility", hero):
        hero.cast("invisibility", hero)

x=0

enemyName = ["shaman","thrower","fangrider","brawler","scout","ogre"]
enemyIndex=0
while True :
    targets1 = hero.findByType("shaman")
    targets2 = hero.findByType("thrower")
    targets3 = hero.findByType("fangrider")
    targets4 = hero.findByType("brawler")
    targets5 = hero.findByType("ogre")
    targets6 = hero.findByType("scout")
    hero.say(" присваиваем имена1")
    burl()
    zomb()
    zomb2()
    if targets1:
        target1 = hero.findNearest(targets1)
        while target1.health>0:
            dl15(target1)
            ata(target1)
            hero.say("выбираем ближайшего шама и бьем ")
    if targets2:
        target2 = hero.findNearest(targets2)
        while target2.health >= 0:
            dl15(target2)
            ata(target2)
            hero.say("выбираем ближайшего лучника и  бьем ")
    if targets3:
        target3 = hero.findNearest(targets3)
        while target3.health > 0:
            dl15(target3)
            ata(target3)
            hero.say("выбираем ближайшего летуна и бьем ")
    if targets4:
        target4 = hero.findNearest(targets4)
        while target4.health > 0:
            dl15(target4)
            ata(target4)
            hero.say("выбираем ближайшего броулера и  бьем ")
    if targets5:
        target5 = hero.findNearest(targets5)
        while target5.health > 0:
            dl15(target5)
            ata(target5)
            hero.say("выбираем ближайшего огра и бьем ")
    if targets6:
        target6 = hero.findNearest(targets6)
        while target6.health > 0:
            dl15(target6)
            ata(target6)
            hero.say("выбираем ближайшего скаута и бьем ")
    
    hero.say(x)
    x+=1

    



я считаю, что проблему вызывает то что код находит 2 переменных и target имеет 2 переменных к примеру 0 и 100 подскажите как оптимизировать код ? возможно ли удалить старый target ?

И снова здравствуйте,
Он не может найти работоспособность ни одной из целей, потому что вы только проверили, существует ли массив. Массив всегда будет существовать, даже если в нем нет целей. Что вам нужно сделать, это проверить, существует ли ваша конкретная цель, или вы проверите здоровье цели, которая не существует.
Надеюсь, это поможет,

Hello again,
It can’t find the health of any of the targets because you’ve only checked whether the array exists. The array will always exist even if there aren’t any targets in it. What you need to do is to check whether your specific target exists, or you’ll check the health of a target who doesn’t exist.
I hope this helps,

:lion: :lion: :lion: