Помогите решить проблему, код неправильно работает.

Дэбил

Новичок
Пользователь
Сен 30, 2020
1
0
1
Я только новичок и мало что понимаю в языке, уж тем более мне проблематично понять где ошибка.


Постоянно p_hp и m_hp остаются со значениями 100 и 40:

Атакуйте монстра!
Введите: 1 - чтобы ударить по голове ; 2 - чтобы ударить в тело ; 3 - чтобы ударить в ноги1
Не очень эффективно...
Здоровье монстра - 40
Монстр нападает!
Почти не больно!
Ваше здоровье - 100
Введите: 1 - чтобы ударить по голове ; 2 - чтобы ударить в тело ; 3 - чтобы ударить в ноги2
Не очень эффективно...
Здоровье монстра - 40
Монстр нападает!
Почти не больно!
Ваше здоровье - 100Снимок экрана (21).png
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
p_hp и m_hp остаются со значениями 100 и 40, они присваиваются у вас в функции в цикле while, при каждой итерации они снова становятся в значение 100 и 40, вынесите их за пределы функции
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
и код не нужно вставлять картинкой
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Код нужно вставлять кодом, как написано в прикрепленной теме "Как задать вопрос и не получить бан". Ты его перепечатывать предлагаешь?

Так происходит потому что в начале функции convert написано 100 и 40. При каждом вызове выполняется весь ее код.
Python:
import random

monster_hp = 40
player_hp =  100
head_attack_range = (1, 20)
body_attack_range = (4, 10)
legs_attack_range = (2, 5)
monster_attack_range = (2, 20)

attacks = {
    '1': head_attack_range,
    '2': body_attack_range,
    '3': legs_attack_range,
}

def assess_monster_health(hp):
    if hp <= 25:
        return 'Критический урон!'
    elif hp  >= 35:
        return 'Не очень эффективно...'

def assess_player_health(hp):
    if hp <= 85:
        return 'Броня пробита!'
    elif hp >= 95:
        return 'Почти не больно!'
    else:
        return 'Ой!'

while True:
    print('Атакуйте монстра!')
    attack = ''
    while attack not in attacks:
        attack = input('Введите\n1: удар по голове;\n2: удар в тело;\n3: удар в ноги;\n> ')
    attack_range = attacks[attack]
    player_damage = random.randint(*attack_range)
    monster_hp -= player_damage
    print(assess_monster_health(monster_hp))
    print(f'Здоровье монстра - {monster_hp}')
    if monster_hp < 1:
        print('Победа!')
        break
    monster_damage = random.randint(*monster_attack_range)
    player_hp -= monster_damage
    print(assess_player_health(player_hp))
    print(f'Здоровье игрока - {player_hp}')
    if player_hp < 1:
        print('Смерть.')
        break
 

Форум IT Специалистов