While, а не зацикливание в Python

Я пытаюсь сделать игру "камень-ножницы-бумага" с раундами. Я использую цикл while, но он не возвращается к началу. Я пробовал объявлять переменные внутри цикла while, снаружи и многое другое, но это просто не работает. Я оставлю код здесь. Спасибо за помощь!

import random

computer_win = 0
user_win = 0
jugadas = 0

def play(computer_win, user_win, jugadas):
    while (jugadas < 3):
        user = input("What's your choice? 'r' for rock, 'p' for paper, 's' for scissors: ")
        computer = random.choice(['r','p','s'])        
        if user == computer:
            jugadas = jugadas + 1
            return( f'It\'s a tie. Round {jugadas}/3')
        if is_win(user, computer):
            user_win +=1
            jugadas = jugadas + 1
            return( f'You won! Round {jugadas}/3')
        else:
            computer_win +=1
            jugadas = jugadas + 1
            return( f'You lost! Round {jugadas}/3')


    if computer_win >2 or user_win>2:        
        if computer_win > user_win:
            "The computer won"
        elif user_win > computer_win:
            return "You won!"
        else:
            return "It's a tie ...."
        
        

def is_win(player, opponent):
    if(player == 'r' and opponent == 's') or (player =='s' and opponent =='p') \
        or (player =='p' and opponent == 'r'):
        return True
    

print(play(computer_win, user_win, jugadas))


Использование return в цикле приведет к его разрушению. Вместо этого следует сохранить результат в переменной и вернуть его после завершения цикла.

Когда вы встретите оператор return внутри функции, вы выйдете из функции, даже если оператор return находится внутри цикла. Вы должны заменить все операторы return на функции print(), функция print() полезна для показа информации пользователю. Оператор return полезен для возврата данных в программу, чтобы другие компоненты могли их использовать.

Другое дело, что вам не нужно передавать функцию play(computer_win, user_win, jugadas) в функцию print().

Добро пожаловать на StackOverflow :D Оператор return завершает выполнение вашей функции. Они не только завершают цикл while, но и возвращают конечное значение, в данном случае строку. Поскольку вы читаете пользовательский ввод в начале каждой итерации, я думаю, что вы хотели использовать print вместо этого. Посмотрите на код ниже

if user == computer:
            jugadas = jugadas + 1
            print( f'It\'s a tie. Round {jugadas}/3')
        if is_win(user, computer):
            user_win +=1
            jugadas = jugadas + 1
            print( f'You won! Round {jugadas}/3')
        else:
            computer_win +=1
            jugadas = jugadas + 1
            print( f'You lost! Round {jugadas}/3')

Что касается второй части вашего кода, имейте в виду, что return не выведет результаты на терминал, поэтому, возможно, вы захотите использовать print и там:

if computer_win >2 or user_win>2:        
        if computer_win > user_win:
            print "The computer won"
        elif user_win > computer_win:
            print "You won!"
        else:
            print "It's a tie ...."

В python нет необходимости использовать явные операторы возврата, без операторов возврата ваша функция завершит выполнение и вернет nil

Вернуться на верх