Этот большой цикл while
практически одинаков для игрока 1 и игрока 2, поэтому вы должны сделать его функцией и передать имя (или номер) игрока в качестве параметра.
Но естьБолее того: даже внутри функции много избыточности.Например, вы проверяете, является ли бросок четным как в парном, так и в непарном случае, и вы можете дополнительно уплотнить эту часть, используя троичное выражение ... if ... else ...
.Также обратите внимание, что в вашем коде есть еще несколько проблем, например, вы никогда не инициализируете score1
и score2
, и у вас есть опечатка в score1-score1 -5
.Кроме того, что такое even
, список всех четных чисел?Вместо этого вы можете использовать total % 2 == 0
, чтобы проверить, является ли total
четным.
Кроме того, ваша проверка if score < 0:
находится за пределами цикла.Если это так, то break
не имеет смысла, так как он только вырвется из внешнего цикла for
, который, вероятно, не предназначен.Кроме того, вы можете добавить некоторые выходные данные для случая, когда оценка не равна < 0
.
Собрав все это вместе, функция может выглядеть примерно так:
def roll(player):
score = 0
while True:
input("\nPress enter to roll, %s" % player)
roll1 = random.randint(1,6)
roll2 = random.randint(1,6)
print("Rolling dice!", roll1, roll2)
total = roll1 + roll2
score += total
score += 10 if total % 2 == 0 else -5
print("Your total is:", score)
if roll1 == roll2:
print("You rolled a double. Roll again.")
else:
break
if score < 0:
print("%s, you went under 0. Game over." % player)
else:
print("%s, your final score is %d." % (player, score))
Теперь простовызовите эту функцию дважды:
for _ in range(5):
roll("Player 1")
roll("Player 2")