我有一个 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] 删除。
我来说两句