【问题标题】:Python 3: Checking user input for correct syntax on every 4th wordPython 3:每 4 个单词检查用户输入的语法是否正确
【发布时间】:2018-07-28 19:44:23
【问题描述】:

我目前正在编写一个程序,该程序需要解释用户输入并将其转换为可用数据。数据中的字数必须是 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.'")

【问题讨论】:

标签: python python-3.x


【解决方案1】:

为避免耗尽检查,您需要将代码重组为更小的部分并引入控制结构,例如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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2012-05-02
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多