2016-05-11 2 views
-3
name = "" 
name = input("Hi there, what is your name? ") 
while name.isalnum(): 
    name = input("Hi there, what is your name? ") 
while name.isdigit(): 
    name = input("Hi there, what is your name? ") 

Это код кода, но я хочу, чтобы он принимал только буквы. Однако, когда я запускаю этот код, возникает проблема, и программа продолжает запрашивать имя пользователя для любого введенного ввода, единственный способ, которым программа продолжает работать, - это нажать «пробел (бар)». Что не так с этим?Почему этот код, который использует .isalnum, не работает?

+0

Почему существуют две петли? –

+0

Как видно из комментариев к ответу, вы не объяснили, что именно вы хотите принять и что отклонить. Предположим, вы хотите принимать имена, содержащие только пробелы и буквы в алфавите английского/ASCII? Как насчет апострофа, как в О'Мэлли? И так далее. На ваш вопрос нельзя ответить, пока вы не разъясните. –

ответ

3
while name.isalnum(): 

означает, что цикл будет продолжать работать до тех пор, как имя алфавитно-цифровой. Вы хотите:

while not name.isalnum(): 
+0

Я уже пробовал это, и он не работает, но я хочу, чтобы программа НЕ принимала имена, которые являются буквенно-цифровыми, но даже когда я заменяю «while» на «while not», код все еще не работает должным образом –

+1

@AbukarAwes: Вероятно, вы неправильно поняли термин «буквенно-цифровой», если только вы не хотите, чтобы ваша программа использовалась только людьми с такими именами, как эта странная вещь, которую принц начал называть себя. 'isalnum' не означает, что« содержит как буквы, так и цифры »; это означает, что каждый символ в строке является буквенно-цифровым (и есть хотя бы один символ). – user2357112

0

Ваша цель может быть лучше достигнута через regex:

import re 
p=re.compile(r'[a-zA-Z\s]+$') 
name="user0000" 
while not p.match(name): 
    name = input("Hi there, what is your name? ") 

Это будет принимать такие имена, как «Джордж Смит», но не «Smith1980»

Смежные вопросы