Проблема в вашей программе заключается в
"while number = comp_answer():"
Это должно быть "==" для сравнения. «=» используется для присваивания, и здесь нам нужно приравнивать к оценке. Кроме того,
while number == comp_answer():
на самом деле не соответствует ie. Он просто проверяет, совпадает ли номер сохраненного значения с выводом comp_answer (). Вы можете приравнять "user_input" к "number", чтобы проверить то же самое. PS comp_answer () нужно снова вызвать в t ie function
Попробуйте следующее: я поместил операторы печати в новую функцию, которая делает программу более легкой для чтения и короче.
import random
def main():
global user_answer
print('lets play paper rock scissors')
number = comp_answer()
user_answer = int(input('What do you choose?'))
while number == user_answer:
tie()
paper_rock_scissors(number)
def comp_answer():
number = random.randint(1,4)
return number
def tie():
global number
print("its a tie!")
print ("tie breaker")
number = comp_answer()
user_answer = input('What do you choose?')
def print_ans(computer, user, explanation, win):
print("computer: ", computer)
print("you: ", user)
print(explanation)
if win:
print("you won!")
else:
print("Game over")
def paper_rock_scissors(number):
if number == 3:
if user_answer == 1:
print_ans("scissors", "rock", "rocks smashes scissors", win=True)
else:
print_ans("scissors", "paper", "scissors cut paper", win=False)
elif number == 1:
if user_answer == 3:
print_ans("rock", "scissors", "rocks smashes scissors", win=False)
else:
print_ans("rock", "paper", "paper covers rock", win=True)
else:
if user_answer == 1:
print_ans("paper", "rock", "paper covers rock", win=False)
else:
print_ans("paper", "scissors", "scissors cut paper", win=True)
main()
Если вы хотите, чтобы пользователь вводил строку вместо целых чисел, код будет выглядеть примерно так (заметьте, я буду использовать словари , поскольку это упрощает задачу, и я думаю, что это важно чтобы каждый знал о них, поэтому прочтите их немного):
import random
num_mappings = {"rock":1 , "paper":2 , "scissors":3}
def main():
global user_answer
print('lets play paper rock scissors')
number = comp_answer()
user = input('What do you choose?')
user_answer = num_mappings[user]
while number == user_answer:
tie()
paper_rock_scissors(number)
def comp_answer():
number = random.randint(1,4)
return number
def tie():
global number
print("its a tie!")
print ("tie breaker")
number = comp_answer()
user = input('What do you choose?')
user_answer = num_mappings[user]
def print_ans(computer, user, explanation, win):
print("computer: ", computer)
print("you: ", user)
print(explanation)
if win:
print("you won!")
else:
print("Game over")
def paper_rock_scissors(number):
if number == 3:
if user_answer == 1:
print_ans("scissors", "rock", "rocks smashes scissors", win=True)
else:
print_ans("scissors", "paper", "scissors cut paper", win=False)
elif number == 1:
if user_answer == 3:
print_ans("rock", "scissors", "rocks smashes scissors", win=False)
else:
print_ans("rock", "paper", "paper covers rock", win=True)
else:
if user_answer == 1:
print_ans("paper", "rock", "paper covers rock", win=False)
else:
print_ans("paper", "scissors", "scissors cut paper", win=True)
main()
Однако имейте в виду, что ваш код не сработает, если пользователь введет что-нибудь, кроме «камень», «бумага» или "ножницы". Я предлагаю вам изучить обработку исключений , чтобы получить хороший gr asp и улучшить эти аспекты.