Возврат и проблема назначения - PullRequest
1 голос
/ 29 января 2020

Я все еще относительно новичок в кодировании. В настоящее время у меня проблема с возвратом значения из функции. Основная идея c заключается в том, что игрок и враг бросают 4 кубика. Я установил массив, который сортирует бросок костей игрока и противника от наивысшего значения к наименьшему. Отсюда я хотел, чтобы кости высшей ценности игрока вычитались из кости высшей ценности врага для каждой пары бросков (т.е. первый бросок игрока - первый бросок врага или первый бросок врага - первый бросок игрока). Я хотел использовать эту формулу, чтобы определить урон, наносимый игроку или врагу. Код, который я придумал:

def dmg_calculator_by_dice_roll(player_highest_roll_one, enemy_highest_roll_one):
        if player_highest_roll_one > enemy_highest_roll_one:
            roll_one_dmg_to_enemy = (enemy_highest_roll_one - player_highest_roll_one) * -1
            roll_one_dmg_to_player = 0
            return roll_one_dmg_to_player
            return roll_one_dmg_to_enemy
        elif player_highest_roll_one < enemy_highest_roll_one:
            roll_one_dmg_to_player = (player_highest_roll_one - enemy_highest_roll_one) * -1
            roll_one_dmg_to_enemy = 0
            return roll_one_dmg_to_player
            return roll_one_dmg_to_enemy 
        else:
            roll_one_dmg_to_player = 0
            roll_one_dmg_to_enemy = 0
            return roll_one_dmg_to_player
            return roll_one_dmg_to_enemy

player_rolls_round_one = [8, 6, 2, 1]
enemy_rolls_round_one = [6, 2, 2, 1]
player_highest_roll_one = player_rolls_round_one[0]
enemy_highest_roll_one =  enemy_rolls_round_one[0] 
roll_one_dmg_to_player = dmg_calculator_by_dice_roll(player_highest_roll_one, enemy_highest_roll_one)
roll_one_dmg_to_enemy = dmg_calculator_by_dice_roll(player_highest_roll_one, enemy_highest_roll_one)   
dmg_calculator_by_dice_roll(player_highest_roll_one, enemy_highest_roll_one)


print(roll_one_dmg_to_enemy)
print(roll_one_dmg_to_player)

Проблема, с которой я сталкиваюсь, заключается в том, что значения roll_one_dmg_to_player и roll_one_dmg_to_enemy постоянно совпадают по значению. Если бы я запустил этот пример, я мог бы ожидать, что результат для кода будет «2» и «0». Но вместо этого он возвращает «2» и «2». Что я делаю неправильно? Спасибо за любую помощь.

1 Ответ

1 голос
/ 29 января 2020

Вы не можете иметь операторы двойного возврата, второй никогда не достигается

Измените это

return roll_one_dmg_to_player
return roll_one_dmg_to_enemy

На это return (roll_one_dmg_to_player, roll_one_dmg_to_enemy)

Затем вызов вашей функции должен выглядеть так

roll_one_dmg_to_player, roll_one_dmg_to_enemy = dmg_calculator_by_dice_roll(player_highest_roll_one, enemy_highest_roll_one)

Это даст вам кортеж

...