2016-11-16 68 views
1
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?我怎样才能控制我的用户的输入

+0

[询问用户的输入,直到他们给出有效的响应](http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-有效的响应) – wwii

回答

2

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

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:') 
2

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

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