我目前正在编写一个需要解释用户输入并将其转换为有用数据的程序。数据中的单词数必须是4、8、12或4的任意倍数。这是因为用户在输入数据时必须遵循的格式-他的输入实际上只是4个单词的多组。因此,在我尝试使用数据之前,我想检查以确保用户遵循了给定的格式,因此我必须检查第0、4和8位是否为3位月份,以及第1、5和9位。你明白了吧。
问题是:我不想检查数据中的第0、4和8项,我想检查一直到80,而不是编写代码检查20次。
此程序的示例输入:
JUL ENT 20 K AUG SAL 2 M MAR OTR 200 K
我是Python的新手,所以任何建议都会有很大的帮助。这是我到目前为止所写的。
import re
data_input = input("Please input data.\n")
data_set = re.sub("[^\w]", " ", data_input).split()
data_ready_1 = False
def data_ready_function_1():
if not len(data_set) % 4 == 0:
print("That\'s not a valid input. For formatting help, type \'help\'.'")
data_ready_1 = False
else:
data_ready_1 = True
number = len(data_set) // 4
def data_ready_function_2():
if not (data_set[0]) == ("JAN" or "FEB" or "MAR" "APR" or "MAY" or "JUN" or "JUL" or "AUG" or "SEP" or "OCT" or "NOV" or "DEC"))
print("That\'s not a valid input.'")
发布于 2018-07-29 04:19:10
为了避免精疲力尽的检查,您需要将代码重组为较小的部分,并引入控制结构,如while
。
在我的示例中,我创建了两个函数get_data_set()
和check_months()
。
函数get_data_set()
会无限循环,直到输入正确为止。这意味着单词的数量可以被4整除,并且每4个单词就是一个月份名称。
函数check_months()
有一个参数- data_set
,并检查它是否每隔4个单词就是月份。如果是,则返回True
,而不是False
。
示例如下:
import re
def get_data_set():
while True:
data_input = input("Please input data.\n")
data_set = re.sub(r"[^\w]", " ", data_input).split()
if len(data_set) % 4 != 0:
print("That\'s not a valid input. For formatting help, type \'help\'.'")
continue
if check_months(data_set) == False:
print("That\'s not a valid input.'")
continue
return data_set
def check_months(data_set):
for word in data_set[::4]:
if word not in ("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"):
return False
return True
data_set = get_data_set()
print('Valid data set!')
print(data_set)
输出:
Please input data.
JUL ENT 20 K AUG SAL 2 M MAR OTR 200 K
Valid data set!
['JUL', 'ENT', '20', 'K', 'AUG', 'SAL', '2', 'M', 'MAR', 'OTR', '200', 'K']
https://stackoverflow.com/questions/51574675
复制相似问题