如何控制用户的输入

时间:2016-11-16 19:01:11

标签: python user-input

 name = input('Enter your name please: ')
 while name != str:
     name = input('Please enter only letters for your name: ')
 ss = input('Enter your Social Security Number: ')
 while ss != int:
     ss = input('Please enter only numbers for your social security number:')

所以我有这个基本程序要求用户输入他的名字和SS#,我想这样做,用户无法输入一个str或一个浮点数,他应该输入一个int。我尝试了这个,但它只是永远循环,因为If语句正在检查输入是否是数据类型str或int,我该怎么做才能检查变量是int还是str?

2 个答案:

答案 0 :(得分:2)

您正在尝试将该值与type进行比较。您应该存储名称并检查是否只有字母(.isalpha())并尝试对安全号码进行类型转换。如果失败,则不是有效输入。使用isnumeric()作为SSN也是一种选择。类似的东西:

name = input('Enter your name please: ')
while not name.isalpha():
    name = input('Please enter only letters for your name: ')

ss = input('Enter your Social Security Number: ')
try:
    int(ss)
    valid_ss = True
except ValueError:
    valid_ss = False

while not valid_ss:
    ss = input('Please enter only numbers for your social security number:')
    try:
        int(ss)
        valid_ss = True
    except ValueError:
        valid_ss = False

name = input('Enter your name please: ')
while not name.isalpha():
    name = input('Please enter only letters for your name: ')

ss = input('Enter your Social Security Number: ')
while not ss.isnumeric():
    ss = input('Please enter only numbers for your social security number:')

答案 1 :(得分:2)

name != str没有按照您的想法行事。 input()的结果总是一个字符串。如果您只想获得某些类型的字符串,那么您必须自己验证它们。要检查某些内容是否仅包含字母或仅包含数字,您可以使用name.isalpha()name.isnumeric()

如果您需要比这些或其他内置字符串方法提供的内容更复杂的内容,那么您可能需要编写正则表达式或其他自定义验证代码。