【问题标题】:How can I check if the users input is a number?如何检查用户输入的是否是数字?
【发布时间】:2013-10-17 08:54:50
【问题描述】:

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

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

 #Checks user input

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

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

【问题讨论】:

  • Python 2 还是 3? input 在 Python 3 中已更改。
  • 您的要求不是很清楚。你想要一个只包含字母的字符串吗?还是一个不包含数字的字符串?还是一个不完全由数字组成的字符串?
  • @larsmans 因为它应该是一个城市名称,我认为字符串应该只包含字母
  • @LostAvatar:那"Los Angeles" 怎么样?
  • @larmans 好的,你找到我了 :D 但我无法想象一个有效的城市名称中有数字

标签: python string input


【解决方案1】:

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

如果这就是你想要的,那就大功告成。但您也可以接受 Ad€×¢® 或 john@example.com 等城市名称。

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

然后考虑“仅字母”的严格规则是否足够好?您是否用另一条规则替换了一条有缺陷的规则(不允许使用数字)? “洛杉矶”怎么样?作为城市名称?还是“洛杉矶”?也许你需要考虑空格和句号。连字符呢?试试 [^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

【讨论】:

  • 感谢您的回答。我已经找到了我的问题的答案,因此我想删除这个问题。你能删除你的答案吗?这将非常有帮助。再次感谢。
  • @user2889627 这不是堆栈溢出的工作方式,问题和答案应该对很多人长期有用
  • 正如Richard Tingle 所说,所有问题和答案都应留作他人参考。除非问题(和答案)值得商榷。
【解决方案2】:
import re

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

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

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

    • 那么“ZYX987”是一个有效的输入吗?
    • 第一个解决方案不是一个好的编程习惯:如果规则改变,你必须改变你的逻辑。第二个是更好的选择:您通过模式验证您的字符串,而不是通过“int”的副作用! (我建议使用验证功能...)
    • 第一:其他人可能有同样的问题。第二:教师可能想查看学生是否从 StackOverflow 中获取答案。
    【解决方案4】:

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

    【讨论】:

    • input() 的 type() 将永远是一个字符串
    • 在 Python 3 中它会。在 Python 2 中,它不会。
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2020-04-30
    相关资源
    最近更新 更多