输入验证为字符串和异常

时间:2018-10-15 17:53:56

标签: python string list validation input

x = input("Enter state 1")
y = input("Enter state 2")
z = input("Enter state 3")

# The three states are strings among a list

For example:
    state_1 = ['Light', 'Medium', 'Heavy']
    state_2 = ['Small', 'Medium', 'Large']
    state_3 = ['Blue', 'Red', 'Black']

If x != 'Light' or 'Medium' or 'Heavy':
    print("Wrong input")
else:
    x = pre_defined_function(x) #let's say

# Same to be done with other states, output given only if all three states are entered correctly

我尝试过尝试并除外,但无法实现:

请帮助我确定正确的验证方法

2 个答案:

答案 0 :(得分:0)

您的问题出在比较语句if x != 'Light' or 'Medium' or 'Heavy':中,该语句实际上仅在检查x != 'Light',然后检查字符串'Medium''Heavy'是否为真(他们将因为长度大于0的字符串得出True)。

检查字符串是否与字符串列表中的任何值匹配的一种简单方法是使用set()。由于集合几乎允许立即查找时间来查看值是否在集合内,因此不必针对每个值检查x

使用集合检查x是否与state_1中的任何字符串匹配:

x = input("Enter state 1")
y = input("Enter state 2")
z = input("Enter state 3")

# Store states in sets
state_1 = {'Light', 'Medium', 'Heavy'}
state_2 = {'Small', 'Medium', 'Large'}
state_3 = {'Blue', 'Red', 'Black'}

if x not in state_1:
    print("Wrong input")
else:
    x = pre_defined_function(x)

答案 1 :(得分:0)

卡尔提供了很好的解释。您的if语句仅用于查看if x != "Light"。由于您使用的是or,因此它将始终作为True传递,因为“ Medium”和“ Heavy”将始终取值为True。

将语句放入while循环中也可能会有所帮助。

while x not in state_1:
    print("Wrong input")
    x = input("Enter state 1: ")
else:
    x = pre_defined_function(x)

这将连续循环直到输入有效的输入为止。