как использовать оператор if else в другом цикле while - PullRequest
0 голосов
/ 11 апреля 2019

Я новичок в кодировании.Я хочу попробовать написать простую игру о ножницах.Но я не могу понять, как закончить игру.

В конце этой программы, если пользовательский ввод неправильный, я хочу снова перейти к конечной переменной.Я попытался с закомментированными строками, но он не работает.

player1 = input("What is player 1's name ? ")
player2 = input("What is player 2's name ? ")

player1 = player1.title()
player2 = player2.title()
while True:
    print(player1 + " What do you choose ? rock / paper / scissors : ")
    a = input()

    print(player2 + " What do you choose ? rock / paper / scissors : ")
    b = input()
    if a == "rock" and b == "scissors" :
        print(player1, "won !!!")
    elif a == "scissors" and b == "rock":
        print(player2, "won !!!")

    elif a == "paper" and b == "rock":
        print(player1, "won !!!")
    elif a == "rock" and b == "paper":
        print(player2, "won !!!")

    elif a == "scissors" and b == "paper":
        print(player1, "won !!!")
    elif a == "paper" and b == "scissors":
        print(player2, "won !!!")

    elif a == b:
        print("Its a tie :-(")

    elif a or b != "rock" or "paper" or "scissors":

        print("Wrong input, Try again")
    end = input("Do you want to play again ? yes/no ") == "yes"
    if input == "yes":
        continue
    else:

        print('''

        GAME OVER''')
        break
#    elif input != "yes" or "no":
#        print("Wrong input, Try again. yes or no ?")

Я ожидаю, что он завершит игру, если введено «нет», и перезапустит игру, если введено «да», если ввод неправильный.хочу, чтобы приглашение появилось снова.

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

Ваш код имеет несколько проблем, которые требуют некоторого решения, и несколько мест, где его можно упростить. Я внес несколько изменений в вашу программу, а также добавил несколько комментариев, объясняющих эти изменения.

player1 = input("What is player 1's name ? ").title() #This uses chaining to streamline code 
player2 = input("What is player 2's name ? ").title() #Same as above

while True:
    a = input(player1 + " What do you choose ? rock / paper / scissors : ") #no need to use a separate print statement
    b = input(player2 + " What do you choose ? rock / paper / scissors : ")

    valid_entries = ["rock", "paper", "scissors"] #To check for valid inputs

    if (a not in valid_entries) or (b not in valid_entries):
        print("Wrong input, try again")
        continue

    a_number = valid_entries.index(a) #Converting it to numbers for easier comparison
    b_number = valid_entries.index(b)

    if(a_number == b_number):
         print("Its a tie :-(")
    else:
        a_wins = ((a_number > b_number or (b_number == 2 and a_number == 0)) and not (a_number == 2 and b_number == 0)) #uses some number comparisons to see who wins instead of multiple if/elif checks

        if(a_wins):
            print(player1, "won !!!")
        else:
            print(player2, "won !!!")

    end = input("Do you want to play again ? yes/no ")

    while (end !="yes") and (end != "no"):
        print("invalid input, try again")
        end = input("Do you want to play again ? yes/no ")

    if end == "yes":
        continue
    else:
        print("GAME OVER")
        break

Эти изменения также выполняют проверку, используя другой цикл while, чтобы проверить, был ли ввод для перезапуска игры действительным или нет

* Обратите внимание, что я не проверял эти изменения и, возможно, потребуется внести некоторые изменения.

0 голосов
/ 11 апреля 2019

Ну, вы можете упростить свой код, используя список, а затем упростить свои тесты if. Вы можете проверить порядок опций и на основании этого принять решение. Вы также можете сделать тесты стандартными, чтобы минимизировать количество операторов if. Это мое предложение улучшить ваш код. Надеюсь, это поможет:

# get playe names
player1 = input("What is player 1's name ? ")
player2 = input("What is player 2's name ? ")
player1 = player1.title()
player2 = player2.title()

# init vars
options = ["rock", "paper", "scissors"]
players = [player1, player2]

# start game
while True:
    a = input(player1 + " What do you choose ? rock / paper / scissors : ")
    b = input(player2 + " What do you choose ? rock / paper / scissors : ")

    # check if inputs are correct
    while (a not in options or b not in options):
        print("Wrong input, Try again")
        a = input(player1 + " What do you choose ? rock / paper / scissors : ")
        b = input(player2 + " What do you choose ? rock / paper / scissors : ")

    # check who won
    if abs(options.index(a) - options.index(b)) == 1:
        print(players[1*int(options.index(a) > options.index(b))], "won !!!")

    elif abs(options.index(b) - options.index(a)) > 1:
        print(players[1*int(options.index(a) > options.index(b))], "won !!!")

    elif a == b:
        print("Its a tie :-(")

    # continue or drop game
    end = input("Do you want to play again ? yes/no ")
    if end == "yes":
        continue
    else:

        print('''

        GAME OVER''')
        break
0 голосов
/ 11 апреля 2019

Просто проверьте значение end

if end is True:
    continue
else:
    break

Поскольку вы установили значение end в качестве логического значения, сравнив input () со значением «yes», он скажет, хочет ли пользователь завершить игру? Кроме того, вы не инициализируете входную переменную, и последнее условие elif всегда будет истинным, как указано в комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...