Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么没有';在用户要求重新启动程序后,是否重置代码?_Python_Loops_While Loop - Fatal编程技术网

Python 为什么没有';在用户要求重新启动程序后,是否重置代码?

Python 为什么没有';在用户要求重新启动程序后,是否重置代码?,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)")

这是我的代码。升级。我对While循环有一些问题,但我已经设法克服了。 现在我的问题是这个。 当用户在循环结束时被要求再次播放时,程序不会改变其随机数。任何帮助都将不胜感激。 正如标题所说,python不会识别大写字母Y和N,它只需要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.')