Python 为什么没有';在用户要求重新启动程序后,是否重置代码?
这是我的代码。升级。我对While循环有一些问题,但我已经设法克服了。 现在我的问题是这个。 当用户在循环结束时被要求再次播放时,程序不会改变其随机数。任何帮助都将不胜感激。 正如标题所说,python不会识别大写字母Y和N,它只需要Y和NPython 为什么没有';在用户要求重新启动程序后,是否重置代码?,python,loops,while-loop,Python,Loops,While Loop,这是我的代码。升级。我对While循环有一些问题,但我已经设法克服了。 现在我的问题是这个。 当用户在循环结束时被要求再次播放时,程序不会改变其随机数。任何帮助都将不胜感激。 正如标题所说,python不会识别大写字母Y和N,它只需要Y和N from random import * def play(): return guess() def retry(): while True: replay = input("Try again ?(Y/N)")
from random import *
def play():
return guess()
def retry():
while True:
replay = input("Try again ?(Y/N)")
if replay not in {"y", "n"}:
print("Please enter Yes or No")
elif replay.lower() == "n":
print("Thanks for playing! Bye now!.")
break
elif replay.lower() == "y":
print("As you wish!")
return guess()
def guess():
while True:
user = int(input("Guess the number: \n"))
print(user,a)
if user < a:
print("Higher")
elif user > a:
print("Lower")
if user == a:
return retry()
a = randint(0,20)
play()
来自随机导入的*
def play():
返回猜测()
def retry():
尽管如此:
replay=输入(“重试?(Y/N)”)
如果重播不在{“y”,“n”}中:
打印(“请输入是或否”)
elif replay.lower()=“n”:
打印(“谢谢玩!再见!”)
打破
elif replay.lower()=“y”:
打印(“如您所愿!”)
返回猜测()
def guess():
尽管如此:
user=int(输入(“猜测数字:\n”))
打印(用户,a)
如果用户a:
打印(“下”)
如果用户==a:
返回重试()
a=randint(0,20)
play()
它不会重置a
,因为从未指示它这样做。重新启动游戏时,应生成一个新号码:
...
elif replay.lower() == "y":
print("As you wish!")
# Tell the interpreter that we want to modify a variable from the global scope
global a
# Generate a new random number
a = randint(0,20)
return guess()
...
正如标题所说,python不会识别大写字母Y和N,它只需要Y和N
您应该更改以下行:
replay = input("Try again ?(Y/N)")
致:
否则,以下条件将失败,因为Y
和N
不在{“Y”,“N”}
中。尽管如此,括号在这里并没有真正的意义,最好只是:
if replay not in "yn":
编辑:不要两次验证答案,只需寻找有效答案,如果没有提供,则要求提供有效答案:
replay = input("Try again ?(Y/N)").lower()
if replay == 'y':
# replay...
elif replay = 'n'
print("Thanks for playing! Bye now!.")
break
else:
print("Please enter Yes or No")
编辑:为了确保给定的输入是有效的数字,您可以使用try/except
块捕捉错误:
try:
user = int(input("Guess the number: \n"))
except ValueError:
print('Not a valid number.')
或者,您可以使用str.isdigit
确保给定字符串是一个数字:
user = input("Guess the number: \n")
if user.isdigit():
user = int(user)
else:
print('Not a valid number.')
我个人会使用
try/except
,因为第二部分基本上是两次验证字符串(一次通过isdigit
,然后在int
转换完成后进行另一次验证)。前半部分很好,第二部分毫无意义。您不能分配给函数调用。您不能分配给函数调用。
很好!显然,将.lower()
添加到了错误的一端。修好了,谢谢你发现了。干得好。大括号是用来做一个集合的,当你有两个项目时,这可能没有帮助,但在一般情况下更快。是的。第一部分解决了我的问题,现在我每次都得到随机数。对于第二部分,我已经这样做了:```while True:replay=input(“重试”(Y/N)”),如果replay不是在{“Y”,“N”,“Y”,“N”}中,则为`print(“请输入是或否”)elif replay.lower()==“N”或replay.lower()==“N”:``并且它正在工作。这不是最好的方法,但它很有效。因此,任何反馈都是值得赞赏的,我认为你把它弄得很复杂。没有理由两次验证答案(一次通过中的,然后通过条件验证另一次),并且可以使用if、elif、else
块简化答案。编辑我的答案以提供一个示例。考虑一下如果回放不在{“y”,“n”}:
中,那么会做什么。将其与其他两个条件进行比较。有什么不同吗?如果你有一个新问题,那么发布一个新问题。请不要编辑原始问题并将其更改为其他问题,因为这将使任何评论和任何现有答案无效。我恢复了您的编辑并回滚到原始问题。
user = input("Guess the number: \n")
if user.isdigit():
user = int(user)
else:
print('Not a valid number.')