在 Python 中循环输入

莫伊斯

我有一个 python 脚本,我们从 USER 那里获取输入(在命令窗口中,此时不需要 GUI 窗口)。一旦用户提供输入,所提供的输入必须被验证,如果输入格式错误,则需要再次询问输入,直到输入正确为止。询问和验证用户输入的脚本部分在下面并且工作得非常好。

SOname = '1'  #something that doesn't validate
while True:
    SOname = input("Please enter the order number: ").upper()
    if not re.match(r"\b[A-Z]{2}[-][0-9]{6}\b", SOname):
        print ("Error! Please enter order in format 'AS-XXXXXX'"
    else:
        break

满足这个条件后,订单号被进一步用于做很多活动。但是,完成程序的其余部分需要 2 分钟(它涉及大量文件复制、PDF 阅读等...)& 我不希望用户一直等待程序结束并重新开始输入另一个订单号.

所以,我想提供输入多个以空格分隔的订单号的选项(例如:他们可以输入 5 个订单号并在 python 程序运行 10-12 分钟的同时处理其他事情)。就像对于单个订单号一样,每个条目都应根据上述标准进行验证,并且每个编号都应通过程序的其余部分。

这就是我失败的地方。我写了一个小程序来检查所有元素是否都通过循环,但它没有,我不知道为什么。

user_input = input("Enter Numbers:")
Ui = user_input.split()
for i in range(len(Ui)):
    if i == 2:
        print(i)
    else:
        print ("tada")

如果它输入值“2 4 2 4 2 4”,我得到输出“tada tada 2 tada tada tada”

这对我来说甚至没有意义。它打印 2 一次,但输入中有 3 个 2。我究竟做错了什么?我如何进行输入以通过验证,然后通过程序的其余部分。而且,在用户启动程序但不想输入的情况下,如何通过单击 Esc 键来结束脚本?我查了很多地方,但没有什么对我有用。

大货车

i循环中的变量不是采用数据的值,而是采用该数据的索引。因此,第一次通过它的值为 0,下一次为 1,依此类推。因此,无论您的实际输入是什么,您总是会打印出“2”作为第二个元素。

如果要遍历列表的值,请尝试:

for i in Ui:
   if int(i) == 2:
       print(i)

int()之所以存在是因为输入将是来自输入的字符串,而不是整数。

一个更完整的示例,使用您的正则表达式验证如下所示:

import re

while True:
    user_input = input("Enter Numbers:")
    Ui = user_input.split()
    for order in Ui:
        if not re.match(r"\b[A-Z]{2}[-][0-9]{6}\b", order):
            print ("Error! Please enter order in format 'AS-XXXXXX', not {}".format(order))
            break
    else:
        break

print("Orders are {}".format(", ".join(Ui)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章