繁体   English   中英

Python 3:每4个字检查用户输入的语法是否正确

[英]Python 3: Checking user input for correct syntax on every 4th word

我目前正在编写一个程序,该程序需要解释用户输入并将其转换为可用数据。 数据中的单词数必须为4、8、12或4的任意倍数。这是因为用户在输入数据时必须遵循的格式-他的输入实际上只是多组4个单词。 因此,在尝试使用数据之前,我要检查以确保用户正确使用了给定的格式,因此我必须检查以确保第0,第4和第8位是3位数月份,而第1位是第五和第九...你明白了。

问题是这样的:我不想检查数据中的第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.'")

为了避免进行繁琐的检查,您需要将代码重组为较小的部分,并引入控制结构,例如while

在我的示例中,我创建了两个函数get_data_set()check_months()

函数get_data_set()无限循环,直到输入正确为止。 这意味着单词数可以被4整除,每第四个单词就是一个月份名称。

函数check_months()有一个参数data_set并检查每第4个单词是否为month。 如果是,则返回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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM