首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3:每隔4个单词检查用户输入的语法是否正确

Python 3:每隔4个单词检查用户输入的语法是否正确
EN

Stack Overflow用户
提问于 2018-07-29 03:44:24
回答 1查看 90关注 0票数 0

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

问题是:我不想检查数据中的第0、4和8项,我想检查一直到80,而不是编写代码检查20次。

此程序的示例输入:

代码语言:javascript
复制
JUL ENT 20 K AUG SAL 2 M MAR OTR 200 K

我是Python的新手,所以任何建议都会有很大的帮助。这是我到目前为止所写的。

代码语言:javascript
复制
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.'")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-29 04:19:10

为了避免精疲力尽的检查,您需要将代码重组为较小的部分,并引入控制结构,如while

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

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

函数check_months()有一个参数- data_set,并检查它是否每隔4个单词就是月份。如果是,则返回True,而不是False

示例如下:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
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']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51574675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档