2014-12-21 2 views
-4

Я пытаюсь создать демонстрационную программу, которая проверяет имя пользователя, введенное пользователем, и проверяет, содержит ли она буквы из A-Z или a-z.Python validate for A-Z или a-z

user_boolean = False 

while user_boolean == False: 
    username = input("What is your name?") 

    if [username contains letters] == False: 
     username_reattempt = input("Your name contains numbers or unpermitted characters. Please type your name correctly. >> ") 
     if username_reattempt[contains letters] == True: 
      user_boolean == True 
    else: 
     user_boolean == True 

Теперь вы можете увидеть, что user_boolean устанавливается как ложь, и что в то время как оно является ложным, это в то время как цикл будет идти дальше. Если имя пользователя содержит символы, которые не являются A-Z или a-z, он попросит пользователя повторно указать свои данные. Если им удастся выполнить вторую попытку, они выйдут из цикла while, и программа продолжит работу в основных частях.

Теперь я исследовал различные методы для этого, и до сих пор я не нашел метод ... ранее, я нашел метод .isdigit(), но это для целых чисел, а не строк.

Есть ли способ?

+2

Рассматривали вы с помощью регулярных выражений для этого? –

+0

@ Регулярные выражения для постоянных пользователей? Это не пришло, нет. Что это? –

+0

Проверьте библиотеки 're'; https://docs.python.org/2/library/re.html. Вы можете легко проверить шаблоны, подобные этому 'r/[a-zA-Z] /'. Вы можете использовать 'find' или другие варианты, чтобы найти случаи того, сколько a-zA-Z присутствует в строке, которую вы проверяете. В твоем случае; если это просто больше, чем '0', у вас есть правда. –

ответ

1

Поскольку вы не знакомы с регулярными выражениями, вот супер-легкая альтернатива:

Если вы хотите добавить в белый список только некоторых символов (возможно, разрешив символы, которые не только буквы), то вы, вероятно, хотите использовать набор:

def containsOnly(s, whitelist): 
    whitelist = set(whitelist) 
    for char in s: 
     if char not in whitelist: 
      return False 
    return True 

Эта функция может быть использована для вашей цели следующим образом:

In [7]: containsOnly('asdfA5', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') 
Out[7]: False 

In [8]: containsOnly('asdfA', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') 
Out[8]: True 

In [9]: containsOnly('asdfA5', '5abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') 
Out[9]: True 
+0

Возможно, вы захотите переосмыслить свои первые две функции ... –

+0

@TimPietzcker: почему вы так говорите? OP явно новичок, поэтому я хотел написать ультра простой код – inspectorG4dget

+1

Они возвращают 'True' для' 'a12345" или '" Z54321 "' ... –

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