input().split() 的验证

validation of input().split()

提问人:TheArvin98 提问时间:10/17/2023 最后编辑:Goku - stands with PalestineTheArvin98 更新时间:10/17/2023 访问量:68

问:

我必须使用 input().split() 连续同时输入 4 个项目 而且我不知道如何分别验证这 4 个项目(例如:对于第二个项目,它必须只有十进制和 10 个字符,或者对于第四个项目,它必须小于 20 个字符)。有人可以帮我解决这个问题吗???谢谢

我自己可以用 4 个单独的 input() 来做到这一点,但不知道如何在一个 input() 中做到这一点

my code

name = "0"
identical_num = "wrong"
enterence_year = "wrong"
field= "0"

#name
    
while name.isalpha() == False or len(name)==0 or len(name)>20:
    name= input("Enter the NAME - at least 1 to 20, only character").lower()
        
#identical_num   
    
while True:
    try:
        if len(identical_num)==10 and identical_num.isdecimal():
            break
        else:
            identical_num = input("Enter the IDENTICAL_NUM , must be 10 digit")
    except ValueError:
        print("Invalid input!")
              
#enterence_year 

while True:
   try:
       if enterence_year not in range(1300,1501):
           enterence_year = int(input("Enter the ENTERENCE_YEAR , between 1300 to 1500"))
       else:
           break
                
   except ValueError:
       print("Invalid input!")
            
#field
    
while field.isalpha() == False or len(field)==0 or len(field)>20:
    field= input("Enter the FIELD - at least 1 to 20, only character").lower()

python-3.x 输入 拆分

评论

1赞 jarmod 10/17/2023
例:a,b,c,d = "sell me 12 cows".split()

答:

1赞 Goku - stands with Palestine 10/17/2023 #1

您的代码看起来不错,正如 @jarmod 所评论的那样:

您可以执行以下操作:

name, identical_num, enterence_year, field = input("Enter 4 values separated by a space").split()

从 1 中获取 4 个值。input()

继续你的代码。

2赞 Tanishq Chaudhary 10/17/2023 #2

您可以要求用户输入以空格分隔,用空格拆分所有值,然后单独验证每个值。可以使用通用的 try-except 来捕获所有ValueError

示例代码:

def validate_name(name):
    if name.isalpha() == False or len(name) == 0 or len(name) > 20:
        raise ValueError("name is at least 1 to 20, only character")


while True:
    # strips extra whitespace on either side of the input
    name, identical_num, enterence_year, field = (
        input("Enter space-separated values: ").strip().split()
    )

    try:
        # validate each field
        validate_name(name)
        # etc ...
        break
    # catch exceptions together
    except ValueError as e:
        print(e)