我有一个询问用户姓名的程序:
while True:
try:
name = str(input("Please enter your name > "))
except ValueError:
print("Please enter a valid name")
continue
else:
break
我想阻止用户输入一个整数,但是使用上面的代码,字符串中会接受整数。如何防止用户在字符串中输入整数?
答案 0 :(得分:5)
首先,不要将str
转换为input
返回str
。请注意docs
然后函数从输入中读取一行,将其转换为字符串(剥离尾随换行符),然后返回
在您输入name
后,您可以有if
条件。
name = str(input("Please enter your name > "))
if (re.search('\d',name)):
print("Sorry your name contains a number")
不要忘记import re
答案 1 :(得分:1)
break
在尝试转换为int时如果引发异常,因为它不是int:
while True:
name = input("Please enter your name > ")
try:
int(name)
except ValueError:
break
print("Please enter a valid name")
str.digit
也可能有用,但在负面输入时会失败。
要检查任何字符是否为数字,请使用:
while True:
name = input("Please enter your name > ")
if any(ch.isdigit() for ch in name):
print("Please enter a valid name")
else:
break
您还可以创建一组可接受的字符:
from string import ascii_letters
st = set(ascii_letters)
while True:
name = input("Please enter your name > ")
if not st.issuperset(name):
print("Please enter a valid name")
else:
break
您可能希望添加-, " "
和任何其他潜在字符。
答案 2 :(得分:0)
您可以使用字符串方法isdigit()
来检查字符串是否只是整数。
name = input("Please enter your name: ")
if name.isdigit() == True:
print ("That's not a name!")
同样,您也可以使用方法isalpha()
来检查字符串是否只是文本。但是,如果有空格,则返回False。
name = input("Enter your name: ")
if name.isalpha() != True:
print ("That's not a name!")
答案 3 :(得分:0)
也许:
if len(set(name) - set('1234567890')) < len(set(name)):
name = input("Please enter a valid name: ")