【问题标题】:Django, Detecting if variable is a numberDjango,检测变量是否为数字
【发布时间】:2013-11-28 23:26:52
【问题描述】:

在Django的一个函数中,用户可以给我发送一个数字或者一个字符串,我想知道我收到的是一个数字还是一个字符串(提示:数字总是1-6之间的整数)

我想知道是否有可能检测到这一点以及如何检测(举个例子),因为我得到的数字或字符串会告诉我下一步该做什么。

【问题讨论】:

  • 如何发送号码?在请求中?
  • 像这样:def make_choice(request, option):
  • 那么option总是是一个字符串。
  • 因此,尝试将其转换为 int(option) 之类的整数只有在它最初是数字时才有效。我错了吗?

标签: python django string integer


【解决方案1】:

您可以尝试使用int() 将字符串转换为数字,捕获异常:

def isNum(data):
    try:
        int(data)
        return True
    except ValueError:
        return False

仅当字符串可以转换为整数时才返回True

【讨论】:

  • @Christian:这就是对于的例外。不仅仅是检测编码错误。不,这并不慢,这实际上比使用正则表达式或一系列字符串方法测试的替代方案更快。
  • @Christian:除了“它可能很慢”之外,你能告诉我什么吗?因为这没什么大不了的。你有证据吗?
【解决方案2】:

怎么样:if isinstance(data, int):

【讨论】:

    【解决方案3】:

    我假设您的电话号码仍会包含在一个字符串中,即。 “1”或“4”或“6”——如果是这样,那么有几种方法可以做到;你可以使用正则表达式来检查它是否是一个数字,或者你可以敲出一个看起来像这样的函数

    def isNumber(your_input_string):
        return len(your_input_string) == 1 and your_input_string in "123456"
    

    由于数字总是介于 1 和 6 之间,它只能是长度为 1 的字符串,并且必须包含在字符串 '123456' 中,因为……嗯,这些是允许的数字。

    编辑

    正如 Martijn Pieters 在下面的 cmets 中指出的那样,这是一种迂回的做法;一个更简单的解决方案是检查字符串是在“1”还是“6”之间。

    def isNumber(your_input_string):
        return len(your_input_string) == 1 and '1' <= your_input_string <= '6'
    

    【讨论】:

    • 你可以简单地写成return len(your_input_string) == 1 and your_input_string in "123456",而python中没有truefalse
    • 这是相当……迂回的。 return len(your_input_string) == 1 and '1' &lt;= your_input_string &lt;= '6' 会做同样的事情,但更快。
    • - 我不敢相信我忽略了一个事实,即我基本上只是返回一个布尔表达式。这有点尴尬。自从我上次用 python 编写任何东西已经有一段时间了,所以我什至不确定我的语法是否正确。我什至不记得你可以用
    • 你需要在这里测试长度; '1' &lt;= '16' &lt;= '6' 也是 True,由于字典顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2020-12-19
    相关资源
    最近更新 更多