Python 如何检查用户输入的是否为数字?

Python 如何检查用户输入的是否为数字?,python,string,input,Python,String,Input,我试图创建一个函数来检查用户是否输入了一个数字。如果用户输入了一个数字,我的程序将输出一条错误消息,如果用户输入了一串字母,我的程序将继续执行程序。我该怎么做 到目前为止,我已经想到了这一点: #Checks user input def CheckInput(): while True: try: city=input("Enter name of city: ") return city except

我试图创建一个函数来检查用户是否输入了一个数字。如果用户输入了一个数字,我的程序将输出一条错误消息,如果用户输入了一串字母,我的程序将继续执行程序。我该怎么做

到目前为止,我已经想到了这一点:

 #Checks user input

def CheckInput():
    while True:
        try:
            city=input("Enter name of city: ")
            return city
        except ValueError:
            print ("letters only no numbers")
这个功能似乎不起作用。请帮忙

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

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

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

您希望筛选出字符串中包含数字的任何响应。给出的答案将使用正则表达式实现这一点

如果这就是你想要的,工作完成了。但你也会接受像Ad××或john@example.com.

您可以尝试编写一个正则表达式,这取决于您希望选择的程度,以及您是想修复这个代码片段还是想学习答案提供给您的技术,以便您能够解决下一个问题,即您想拒绝任何非美元金额的内容。这允许您定义要匹配的字符。您可以编写一个简单的函数来测试输入字符串是否包含非字母[^a-zA-Z]的字符(^inside[]表示不在所列类中的任何字符)。如果重新匹配,则可以拒绝该字符串

然后考虑“仅限字母”的严格规则是否足够好?您是否已将一条有缺陷的规则(不允许使用数字)替换为另一条?“洛杉矶”作为一个城市名称怎么样?还是“洛杉矶”?也许你需要考虑空间和周期。连字符呢?请尝试[^a-zA-Z.-],它现在包含空格、句点和连字符。反斜杠告诉RE引擎按字面意义处理该连字符,而不是“a-z”中的连字符

有关在此处编写正则表达式的详细信息:


有关在Python中使用Re模块的详细信息,请参见:

Python2或3<代码>输入在Python3中已更改。您的要求不太清楚。您想要只由字母组成的字符串吗?还是不包含数字的字符串?还是一个不完全由数字组成的字符串?@larsmans因为它应该是一个城市名称,所以我认为这个字符串应该只由数字组成letters@LostAvatar:那“洛杉矶”怎么样?@larmans好的,你明白我的意思了:D但我无法想象一个名字中有数字的有效城市input()的类型()在Python 3中永远是字符串。在Python2中,它不会。所以“ZYX987”是一个有效的输入?第一个解决方案不是一个好的编程实践:如果规则改变,您必须改变您的逻辑。第二个是更好的选择:通过模式验证字符串,而不是通过“int”的副作用!(我建议使用验证功能…)首先:其他人可能也有同样的问题。第二:老师可能想看看学生是否从StackOverflow那里得到了答案。谢谢你的回答。我已经找到了问题的答案,因此我想删除这个问题。你能删除你的答案吗?那将非常有帮助。再次感谢。@user2889627这不是堆栈溢出的工作方式,问题和答案对很多人来说应该是长期有用的。Richard Tingle说,所有问题和答案都应该作为其他人的参考。除非问题(和答案)有争议。
import re

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