Python程序赢得';t重启

Python程序赢得';t重启,python,Python,我试图用python重新启动我的程序,但由于某种原因,代码陷入了whileplayreach循环。当我输入是、否或任何其他可接受的输入时,它会显示“这不是一个有效的答案。请输入‘是’或‘否’”。为什么这样不行 while True: playagain = input("Would you like to play again?") while playagain != "y" or playagain != "Y" or playagain != "Yes" or playag

我试图用python重新启动我的程序,但由于某种原因,代码陷入了whileplayreach循环。当我输入是、否或任何其他可接受的输入时,它会显示“这不是一个有效的答案。请输入‘是’或‘否’”。为什么这样不行

while True:
    playagain = input("Would you like to play again?")
    while playagain != "y" or playagain != "Y" or playagain != "Yes" or playagain != "yes" or playagain != "YES" or playagain != "n" or playagain != "N" or playagain != "No" or playagain != "no" or playagain != "NO":
         print("That was not a valid answer. Please enter 'yes' or 'no'.")
         playagain = input("Would you like to play again?")
    if playagain == "y" or playagain == "Y" or playagain == "Yes" or playagain == "yes" or playagain == "YES":
         break
    else:
         print("Thank you for playing MadLibs!")
你想要:

while playagain != "y" or playagain != "Y" or playagain != "Yes"
将是:

while playagain != "y" and playagain != "Y" and playagain != "Yes"

您可以使用
lower()
函数和
中的
操作符来清除代码

您将更改此代码:

playagain = input("Would you like to play again?").lower()
while playagain not in ['y', 'yes', 'n', 'no']:
     print("That was not a valid answer. Please enter 'yes' or 'no'.")
     playagain = input("Would you like to play again?").lower()
因此,整个代码将是:

while True:
    playagain = input("Would you like to play again?").lower()
    while playagain not in ['y', 'yes', 'n', 'no']:
         print("That was not a valid answer. Please enter 'yes' or 'no'.")
         playagain = input("Would you like to play again?").lower()
    if playagain in ['n', 'no']:
         print("Thank you for playing MadLibs!")
         break

您也可以这样做:

while True:
    valid_response = ["y","Yes","Y","No","n","N"]
    positive_response = ["y","Yes","Y"]
    playagain = input("Would you like to play again?")
    while playagain not in valid_response:
        print("That was not a valid answer. Please enter 'yes' or 'no'.")
        playagain = input("Would you like to play again?")
    if playagain in positive_response:
        printf("You chose to play again"):
        break
    else:
        print("Thank you for playing MadLibs!")
        break;

代码中的问题是while循环中至少有一条语句始终为true。因为
playreach
不能同时等于
“Y”
“Y”
“Yes”
“No”
“n”
“n”
(循环中的条件为假)。

a或b
的否定是
(不是a)和(不是b)
。请不要回答封闭式问题。如果你的问题已经结束,请编辑它,使其值得重新打开。我甚至可能会更懒,说
input(…).lower().startswith('y')
好的,我做了一个版本,这很有帮助,但现在不是当有人说“是”时重新开始,当有人说“否”时结束,“谢谢你玩”的信息被打印出来,然后当你说“是”和“否”时,程序就会重新开始。我认为这与代码的这部分有关:如果再次播放。在['y',yes']中的lower():break else:print(“谢谢你玩MadLibs!”)@xnathanmeyerx,尝试一下答案中的全部代码。好的,成功了,但是为什么我刚才提到的那个不起作用呢?在我看来是一样的,只是你用了“否”而不是“是”,并且你去掉了“其他”