[英]Looping through python function and savings inputs and function value in a matrix format
[英]Looping through inputs in 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
,这是循环中的当前索引(因为您在range(len(Ui))
上迭代),例如,它从0,1,2等取值。
我想你希望i
成为用户引入的当前值。 如果是这样,那么循环应该是for i in Ui:
相反。 但请注意,此值是一个字符串,而不是整数(即使输入看起来像一个整数)。 因此,比较应该是i == "2"
(或int(i) == 2
,但如果用户输入无法通过int
转换的内容,则这不是防错的)。
循环中的变量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)))
首先,关于你的第二个拆分代码,你可能错过了类型转换。
在Python中, 2 == '2'
将返回False
。
因此,要使代码的第二部分工作,这将有助于:
user_input = input("Enter Numbers:")
Ui = user_input.split()
for i in range(len(Ui)):
if int(i) == 2:
print(i)
else:
print ("tada")
此外,您的订单ID现在看似AS-XXXXXX
格式。 在这种情况下,您不必进行int
类型转换。 因为您的订单ID无论如何都是String
。
因此,对于输入多个订单ID,这可能会有所帮助(同样,我已经冒昧地添加了您想要的ESC键退出,即使我说它本身就是一个完整的主题):
import keyboard
while True:
if keyboard.is_pressed('ESC'):
break
else:
SOname = input("Please enter the order number: (If multiple, seperate by spaces)").upper()
if(SOname ==
IDArray = SOname.split()
for ID in IDArray:
if not re.match(r"\b[A-Z]{2}[-][0-9]{6}\b", ID):
print ("Error in ", ID, " Please enter order in format 'AS-XXXXXX'")
else:
break
对于使用keyboard
,您可能希望在shell中使用pip install keyboard
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.