2015-10-06 2 views
0

Мне нужна моя программа для проверки ввода пользователя. До сих пор я определил ряд «validLetters» и «validNumbers»:Проверка входа в Python во время цикла

validLetters = ('abcdefghijklmnopqrstuvwxyz ') 
validNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 

Однако, он должен затем проверить, как это:

name = input("What is your name?\n").lower() 
while name == "" or name in validNumbers: 
     name = input("What is your name?\n").lower() 
strinput0 = name 
char_only0 = '' 
for char in strinput0: 
    if char in validLetters: 
     char_only0 += char 
    name = char_only0 

Проблема заключается с «в» части оператора, он работает только в том случае, если вход представляет собой одно число (например, «6»), но он принимает два или более числа (например, «65»), потому что «65» (в отличие от «6») не находится в действительных числах ,

Я хочу, чтобы он просматривал весь вход и снова спрашивал, состоит ли он только из цифр, так как вы можете видеть, что он выводит их (плюс любые специальные символы) в конце.

Существуют решения .isalpha(), однако они не допускают пробелов, которые требуются, если пользователь вводит свое полное имя!

Я уже много часов пробовал эту проблему, кто-то, возможно, может решить это для меня. Заранее спасибо.

+0

Я не понимаю, почему вы позволяете номера в первую очередь, если вы только собираетесь лишить их после. – SirParselot

ответ

1

name.isalpha() - это то, что вы ищете Я думаю и исправлю меня, если я ошибаюсь. Кроме того, чтобы иметь дело с пробелами просто удалить пробелы с помощью name.replace(' ','') так что ваш цикл в то время как будет выглядеть

while name == "" or not name.replace(' ','').isalpha(): 

Это будет держать вас от необходимости вырезать цифры и специальные символы после цикла. Кроме того, поскольку замена не изменяет имя на месте, оно не будет затронуто и сохранит пробелы, если пользователь вводит свое полное имя

+0

Спасибо за большой намек @SirParselot, возможно, вы могли бы просмотреть изменения, которые я сделал по моему вопросу. Большое спасибо. – ProGrammer

+0

@ProGrammer Я не совсем уверен, что вы просите, но я бы порекомендовал опубликовать это как новый вопрос, так как он немного отличается от этого. – SirParselot

+0

вот вопрос: http://stackoverflow.com/questions/32986366/turning-this-code-into-a-python-function?noredirect=1#comment53799059_32986366 – ProGrammer

1

Я бы посоветовал отказаться от in и использовать регулярное выражение, потому что это то, !

Так что в вашем случае проверки Имя:

import re 
name = '123 Full Name' 
valid_pattern = re.compile('^[a-zA-Z0-9 ]+$') 
if re.match(valid_pattern,name): 
    print 'Valid Name' 
else: 
    print 'Invalid Name!' 
Смежные вопросы