如何在输入有效输入之前询问用户特定的字符串和循环?

时间:2015-03-29 02:02:17

标签: python string python-3.x input limit

我正在使用Python 3.0。我试图让用户输入字符串' Small' Medium' Medium'或者'大'如果没有输入任何错误,则引发错误,然后再次请求输入。

while True:

    try:
        car_type = str(input('The car type: '))
    except ValueError:
        print('Car type must be a word.')
    else:
         break

为什么这不起作用?即使输入了一个数字,程序也会继续,并在结束时出现错误。

2 个答案:

答案 0 :(得分:1)

input始终返回str,因此str(input())永远不会引发ValueError

你将字符串与一个单词混淆。字符串只是一系列字符。例如,"123hj -fs9f032@RE#@FHE8"是完全有效的字符序列,因此是完全有效的字符串。然而,这显然不是一个词。

现在,如果用户键入“1234”,Python将不会试图为您考虑并将其转换为整数,它只是一系列字符 - “1”后跟“2”后跟一个“3”,最后是“4”。

您必须定义符合条件的字符,然后检查输入的字符串是否符合您的定义。

例如:

options = ["Small", "Medium", "Large"]
while True:
    car_type = input("The car type: ")
    if car_type in options: break
    print("The car type must be one of " + ", ".join(options) + ".")

答案 1 :(得分:1)

您可以按照以下步骤操作:

valid_options = ['Small', 'Medium' , 'Large' ]

while True:
    car_type = input('The car type: ') # input is already str. Any value entered is a string. So no error is going to be raised.
    if car_type in valid_options:
        break
    else:
        print('Not a valid option. Valid options are: ', ",".join(valid_options))

print("Thank you. You've chosen: ", car_type)

此处无需任何尝试和错误。