我正在尝试创建一个函数来检查用户是否输入了一个数字。如果用户输入一个数字,我的程序应该输出一条错误信息,如果用户输入一串字母,我的程序应继续执行程序。我怎么能这样做?
到目前为止我已经想出了这个:
#Checks user input
def CheckInput():
while True:
try:
city=input("Enter name of city: ")
return city
except ValueError:
print ("letters only no numbers")
此功能似乎不起作用。请帮忙。
答案 0 :(得分:2)
您希望过滤掉包含字符串中数字的任何回复。给出的答案将使用正则表达式。
如果这就是你想要的,就完成了工作。但您也会接受Ad€×¢®或john@example.com等城市名称。
取决于你想要的挑剔方式,以及你是否只是想修复这段代码片段或者学习答案给你的技巧,这样你就可以解决下一个想要拒绝任何问题的问题。如果不是一美元金额,你可以尝试写一个正则表达式。这允许您定义要匹配的字符。您可以编写一个简单的例子来测试输入字符串是否包含不是字母的字符[^ a-zA-Z](^ inside []表示任何不在列出的类中的字符)。如果该RE匹配,则可以拒绝该字符串。
然后考虑“仅限字母”的严格规则是否足够好?你有没有替换另一个有缺陷的规则(不允许数字)?怎么样'L.A.'作为城市名称?还是'洛杉矶'?也许你需要允许空格和句号。连字符怎么样?尝试[^ a-zA-Z .-],现在包括空格,句点和连字符。反斜杠告诉RE引擎将字面上的连字符与“a-z”中的连字符区别对待。
有关在此处编写正则表达式的详细信息:http://docs.python.org/3/howto/regex.html#regex-howto
在此处使用Python中的Re模块的详细信息:http://docs.python.org/3/library/re.html#module-re
答案 1 :(得分:1)
val = input("Enter name of city:")
try:
int( val )
except ValueError:
return val
else:
print("No numbers please")
编辑:我看到提到输入中根本不应该有数字。此版本检查输入中任何位置的数字:
import re
val = input("Enter name of city:")
if re.search( r'\d', val ) is not None:
print("No numbers please")
else:
return val
答案 2 :(得分:1)
import re
def CheckInput():
city = input('Enter name of city: ')
if re.search(r'\d', city):
raise Exception('Invalid input')
您不会进行类型检查,因为在Python 3中,所有文本输入都是字符串。这会使用正则表达式检查输入中的十进制值,如果找到则会引发异常。
答案 3 :(得分:0)
您可以使用type(variable_name)函数来检索类型。