簡體   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