Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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 While循环与条件_Python - Fatal编程技术网

Python While循环与条件

Python While循环与条件,python,Python,我试图创建一个菜单,用户必须输入1-200之间的整数,否则,程序将循环直到满足条件。下面是我的当前代码,但它不起作用,因为输入2到99之间的任何数字都不起作用。有人能帮忙吗 if option == "1": Width = input("Enter rows (must be an integer between 1-200): ") while Width.isdigit() is False: Width = input("Enter

我试图创建一个菜单,用户必须输入1-200之间的整数,否则,程序将循环直到满足条件。下面是我的当前代码,但它不起作用,因为输入2到99之间的任何数字都不起作用。有人能帮忙吗

if option == "1":
        Width = input("Enter rows (must be an integer between 1-200): ")
        while Width.isdigit() is False:
            Width = input("Enter rows(must be an integer): ")
        while Width < "1" or Width > "200":
            Width = input("Enter rows(must be between 1-200): ")
        Width = int(Width)
如果选项==“1”:
宽度=输入(“输入行(必须是1-200之间的整数):”)
Width.isdigit()为False时:
宽度=输入(“输入行(必须是整数):”)
当宽度小于“1”或宽度大于“200”时:
宽度=输入(“输入行(必须介于1-200之间):”)
宽度=int(宽度)

这里有一些微妙的问题,但最大的问题是字符串比较在数字上不起作用<例如,代码>“3”>“200”,以及
“1000000”<“9”

更微妙的问题是,您只需检查一次
isdigit
,然后可能会再次提示输入。如果我在第一个提示下输入了
9000000
,然后在第二个提示下输入了
\
,那么在尝试调用
int(r'\')时,您的代码将因
类型错误而崩溃。

您应该一次完成所有验证。这方面的典型习语是:

为True时:
值=输入(“某些提示”)
如果不是某些验证规则(值):
打印(“某些错误消息”)
持续
elif非某些其他验证规则(值):
打印(“其他错误消息”)
持续
#等等,直到
打破
这确保了每个验证案例的处理方式都不同,并且每次提示输入时都会运行每个验证案例。一旦没有验证案例失败,您就可以跳出无限循环

也就是说,对于这个特定的实例,您应该更喜欢EAFP而不是LBYL,只需尝试转换为
int
并捕获失败

为True时:
行=输入(“输入行(1-200):”)
尝试:
行=int(行)
除类型错误外:
打印(“行必须是数字”)
持续

如果不是1,这里有一些微妙的问题,但最大的问题是字符串比较在数值上不起作用<例如,代码>“3”>“200”
,以及
“1000000”<“9”

更微妙的问题是,您只需检查一次
isdigit
,然后可能会再次提示输入。如果我在第一个提示下输入了
9000000
,然后在第二个提示下输入了
\
,那么在尝试调用
int(r'\')时,您的代码将因
类型错误而崩溃。

您应该一次完成所有验证。这方面的典型习语是:

为True时:
值=输入(“某些提示”)
如果不是某些验证规则(值):
打印(“某些错误消息”)
持续
elif非某些其他验证规则(值):
打印(“其他错误消息”)
持续
#等等,直到
打破
这确保了每个验证案例的处理方式都不同,并且每次提示输入时都会运行每个验证案例。一旦没有验证案例失败,您就可以跳出无限循环

也就是说,对于这个特定的实例,您应该更喜欢EAFP而不是LBYL,只需尝试转换为
int
并捕获失败

为True时:
行=输入(“输入行(1-200):”)
尝试:
行=int(行)
除类型错误外:
打印(“行必须是数字”)
持续
如果不是1,则使用
int(输入(“输入描述”))
并与字符串进行大于或小于的比较。所以类似的方法可能会奏效:

如果选项==“1”:
尝试:
宽度=int(输入(“输入行(必须是1-200之间的整数):”)
当int(宽度)<1或int(宽度)>200时:
宽度=输入(“输入行(必须介于1-200之间):”)
宽度=int(宽度)
除值错误外:
宽度=int(输入(“输入行(必须是1-200之间的整数):”)
编辑:在我起草这篇文章时,有人给出了可能更好的答案…

使用
int(输入(“输入描述”))
并且不要做大于或小于字符串的比较。所以类似的方法可能会奏效:

如果选项==“1”:
尝试:
宽度=int(输入(“输入行(必须是1-200之间的整数):”)
当int(宽度)<1或int(宽度)>200时:
宽度=输入(“输入行(必须介于1-200之间):”)
宽度=int(宽度)
除值错误外:
宽度=int(输入(“输入行(必须是1-200之间的整数):”)
编辑:在我起草这篇文章时,有人给出了可能更好的答案…

我同意:

while True:
    userInput = input("Enter rows (must be an integer between 1-200): ")
    if userInput.isdigit() and 1 <= int(userInput) <= 200:
        break
width = int(userInput)
为True时:
userInput=input(“输入行(必须是1-200之间的整数):”)
如果userInput.isdigit()和1,我会同意:

while True:
    userInput = input("Enter rows (must be an integer between 1-200): ")
    if userInput.isdigit() and 1 <= int(userInput) <= 200:
        break
width = int(userInput)
为True时:
userInput=input(“输入行(必须是1-200之间的整数):”)

如果userInput.isdigit()和1,您可以尝试将宽度始终设置为整数,以便于比较。 在本例中,我将width设置为-1(int)作为坏值以再次执行循环

if option == "1":
        width = -1
        while  width < 1 or width>200:
            width = input("Enter rows (must be an integer between 1-200): ")
            if width.isdigit():
                width = int(width)
            else:
                width = -1
如果选项==“1”:
宽度=-1
宽度<1或宽度>200时:
宽度=输入(“输入行(必须是1-200之间的整数):”)
如果width.isdigit():
宽度=int(宽度)
其他:
宽度=-1

为了便于比较,您可以尝试将宽度始终设置为整数。 在本例中,我将width设置为-1(int)作为坏值以再次执行循环

if option == "1":
        width = -1
        while  width < 1 or width>200:
            width = input("Enter rows (must be an integer between 1-200): ")
            if width.isdigit():
                width = int(width)
            else:
                width = -1
如果选项==“1”:
宽度=-1
宽度<1或宽度>200时:
宽度=输入(“输入行(必须是1-200之间的整数):”)
如果width.isdigit():
宽度=int(宽度)
其他:
宽度=-1
而宽度<“1”或宽度>“200”
?为什么要引用?@goodvi