-4

我正在尝试创建一个函数来检查用户是否输入了一个数字。如果用户输入一个数字,我的程序应该输出错误信息,如果用户输入一串字母,我的程序应该继续执行 program. 我怎样才能做到这一点?

到目前为止,我已经想出了这个:

 #Checks user input

def CheckInput():
    while True:
        try:
            city=input("Enter name of city: ")
            return city
        except ValueError:
            print ("letters only no numbers")

这个功能似乎不起作用。请帮忙。

4

4 回答 4

2

您正在寻找过滤掉字符串中包含数字的任何响应。给出的答案将使用正则表达式来做到这一点。

如果这就是你想要的,工作就完成了。但您也会接受 Ad€×¢® 或 john@example.com 等城市名称。

取决于你想变得多么挑剔,以及你是只是想修复这个代码片段还是学习答案给你的技术,这样你就可以解决下一个你想要拒绝任何不是一美元的东西的问题金额,比如说),你可以尝试写一个正则表达式。这使您可以定义要匹配的字符。您可以编写一个简单的方法来测试输入字符串是否包含不是字母 [^a-zA-Z] 的字符([ ] 中的 ^ 表示任何不在列出的类中的字符)。如果该 RE 匹配,则您可以拒绝该字符串。

然后考虑“仅字母”的严格规则是否足够好?您是否用另一条规则替换了一条有缺陷的规则(不允许使用数字)?“LA”作为城市名称怎么样?还是“洛杉矶”?也许你需要考虑空格和句号。连字符呢?试试 [^a-zA-Z .-],它现在包含空格、句点和连字符。反斜杠告诉 RE 引擎将连字符与“az”中的连字符不同。

有关在此处编写正则表达式的详细信息:http: //docs.python.org/3/howto/regex.html#regex-howto

有关在 Python 中使用 Re 模块的详细信息:http: //docs.python.org/3/library/re.html#module-re

于 2013-10-17T09:41:45.707 回答
1
import re

def CheckInput():
    city = input('Enter name of city: ')
    if re.search(r'\d', city):
        raise Exception('Invalid input')

您不会进行类型检查,因为在 Python 3 中所有文本输入都是字符串。这使用正则表达式检查输入中的十进制值,如果找到则引发异常。

于 2013-10-17T09:12:54.863 回答
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
于 2013-10-17T08:59:30.200 回答
0

您可以使用 type(variable_name) 函数来检索类型。

于 2013-10-17T08:57:34.683 回答