Как уже упоминалось в комментариях, вы можете использовать что-то похожее на следующее:
YourName = input("Please enter your name: ")
while True:
if YourName.isalpha():
break
else:
print("Must enter string")
print("Please type in your name")
YourName = input("Please enter your name: ")
continue
isinstance () - это встроенная функция, которая проверяет, принадлежит ли переменная определенному классу, например, isinstance(my_var, str) == True
. Однако , функция Input()
всегда возвращает строку. Таким образом, если вы хотите убедиться, что введены все буквы, которые вы хотите использовать .isalpha () . Вы также можете использовать Try/except
. Как сказал @SiHa , этот вопрос SO имеет большой ответ.
Как указано в комментариях, этот ответ не будет работать, если в строке есть пробел. Если вы хотите разрешить несколько форматов имен, вы можете использовать Regex. Например, вы можете сделать следующее:
import re
YourName = input("Please enter your name: ")
while True:
if re.fullmatch(r"[a-zA-Z]+\s?[a-zA-Z]+", YourName) is not None:
break
else:
print("Must enter string")
print("Please type in your name")
YourName = input("Please enter your name: ")
continue
Использование регулярных выражений даст вам больше контроля над входными данными, чем обычные строковые методы. Документы , Python Regex HOWTO . re
- это стандартная библиотека, которая поставляется с python и обеспечит вам максимальную гибкость. Вы можете использовать regex101 , чтобы помочь вам тестировать и отлаживать.
Что re.fullmatch()
вернет объект совпадения, если найден, и None
, если нет. Он говорит, что ввод может быть любой заглавной или заглавной буквой с необязательным пробелом в середине, за которым следуют дополнительные буквы.
Если вы не хотите импортировать пакет, вы можете перебрать свой входной объект и проверить, все ли символы - пробел или альфа, используя:
all([x.isalpha() | x.isspace() for x in YourName])
однако это не скажет, сколько мест есть или где они находятся. Было бы оптимально использовать Regex, если вы хотите больше контроля.