2016-11-16 5 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 или float, где он предположительно для ввода 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()) и попробуйте лить тип на номер безопасности. Если это не удается, это недействительный ввод. Использование 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:') 
2

name != str не делать то, что вы думаете, что он делает. Результат input() всегда является строкой. Если вы хотите получить только определенные типы строк, вы должны сами их проверить. Для проверки того, что что-то содержит только буквы или содержит только цифры, вы можете использовать name.isalpha() и name.isnumeric().

Если вам нужно что-то более сложное, чем эти или другие встроенные методы строкой, вам, вероятно, потребуется написать регулярное выражение или другой код проверки.