【问题标题】:How to learn is there a numbers in string如何学习字符串中是否有数字
【发布时间】:2019-12-30 14:09:05
【问题描述】:

我的任务是创建一个函数,如果 word 中有数字 (0-9),则返回 True,如果 word 中没有数字,则返回 False:

def has_digits(string):
    for r in range (0,10)
    if r in string:
        return 'True'
    else: return 'False'

print(has_digits('Python3'))

通常我有这个错误信息:

TypeError: 'in <string>' requires string as left operand, not int

【问题讨论】:

  • 既然你有for r in range(0, 10):,那么循环内的r 将是一个int。因此,当您执行if r in string: 时,您将尝试评估例如0 in 'Python3' 并且,正如错误告诉您的那样,这没有任何意义。此外,您的缩进已被破坏,他们可能希望您返回布尔值 TrueFalse 而不是看起来像它的字符串。
  • 这样更好:return any(char.isdigit() for char in string) 见:stackoverflow.com/questions/19859282/…

标签: python python-3.x string numbers int


【解决方案1】:
def has_digits(string):
    return any(char.isdigit() for char in string)

print(has_digits('abc1'))

你的例子应该是这样的:

def has_digits(string):
    b = False
    for r in range(0, 10):
        if str(r) in string:
            b = True
    return b


print(has_digits('Python3'))

你应该已经解析了str(r),其次你的函数会检查0是否在你的字符串中并立即返回false。不会为循环中的其余值运行。

【讨论】:

  • SO 不是代码编写服务,这并没有向 OP 解释为什么他们最初的尝试没有成功。
  • char.isdigit 实际上是做什么的?为什么它内部没有任何变量?
  • @Balloonbear 该信息可在文档中找到:docs.python.org/3/library/stdtypes.html#str.isdigit
  • @Balloonbear char.isdigit() 检查字符是否为数字,并且对字符串中的每个字符都运行。您的示例首先不起作用,因为您应该已经解析了 `str(r),其次您的函数将检查 0 是否在您的字符串中并立即返回。不会跑剩下的。我也修复了你的例子。
  • @jonrsharpe 这样更好吗?我给了他一个工作的例子。我也没有解释错。
【解决方案2】:

您必须将 for 循环中的 int 对象转换为 str 对象,因为 if a in b 仅适用于 ab 作为字符串 (str) 对象。你必须从循环中删除一个return。否则,方法 isDigit 将在字符串的第一个字母处以 truefalse 结尾。

def has_digits(string):
    for r in range(0, 10):
        if str(r) in string:
            return true

    return false

print(has_digits("Python3"))

>> true

现在,如果您的字符串包含数字,该方法将返回 true。否则它将进一步循环字符串并检查下一个字母。最后,该方法返回false,因为字符串结束并且该方法没有从循环中返回true

这段代码现在如何工作?
假设您将字符串Python3 传递给方法has_digits,然后第一个for 循环将数字0 迭代到9。所以在第一个循环中r 等于0。现在将进行条件检查if str(r) in stringif 语句检查 str(0)"0" 数字 0 的字符串版本)是否在字符串 string(这是您的 Python3)中。其中没有"0",因此条件为falsefor 循环以1 继续。整个过程重复直到3。对于3if 语句返回true,因为"3"Python3 中,现在该方法将返回true,这表明您的字符串至少 一位数。

【讨论】:

  • 这是一个非常有趣的案例。好的,所以我用 str(r) 制作了 thouse“数字”字符串格式 rithg?所以“return 'False”的位置就可以了。我不太明白它是如何工作的逻辑
  • 是的。 str(a) 将对象 a 转换为 string 对象。现在,您可以使用string 对象的所有方法(如if(a in b) 检查)。我将更新我的答案以解释逻辑。
【解决方案3】:

改变这个:

if r in string:

到这里:

if str(r) in string:

【讨论】:

    【解决方案4】:

    嗯,你的代码有错误。

    def has_digits(string):
        for r in range (0,10)  # here; should have a :(colon) at the end
        if r in string:
            return 'True'
        else: return 'False'
    
    print(has_digits('Python3'))
    

    正确的代码应该是:

    def has_digits(string):
        for r in range(10):
            r = str(r)
            if r in string:
                return True
        return False
    
    print(has_digits('Python3'))
    

    【讨论】:

      【解决方案5】:

      错误的原因是您正在检查字符串中的整数值。所以改变

      如果 r 在字符串中

      如果 str(r) 在字符串中

      循环内也不需要 else ,因为如果第一个字符不是数字,它将返回 false ,因此您将无法得到正确答案,您可以将其更改为类似

      def has_digits(string):
          for r in range (0,10):
               if str(r) in string:
                   return 'True' # use boolean return for better use
          return false
      

      虽然这是正确的方法,但您会得到结果,但要了解列表推导和生成器。您将更快、更好地获得结果。

      【讨论】:

        【解决方案6】:

        出现此错误是因为您将字符串与 int 进行比较。 将r in string 更改为str(r) in string 将解决此错误。

        def has_digits(string):
            for r in range (0,10):
                if str(r) in string:
                    return 'True'    
            return 'False'
        
        print(has_digits('Python3'))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-26
          • 2023-01-22
          • 2013-07-14
          • 2014-02-11
          • 1970-01-01
          • 1970-01-01
          • 2021-08-23
          相关资源
          最近更新 更多