在不使用任何内置函数的情况下,在给定整数中找到两个连续的数字时,为布尔值True或False

问题描述

要在给定的整数(N)中查找两个连续的数字(D)而不使用任何内置函数并返回True或False,则遇到一个D时,似乎退出了以下代码,但是如果存在两个DS。为什么它不能按原样工作以及如何解决?谢谢!

def double_digits(n,d):
    """Return True if N has two Ds in a row otherwise return False.

    int,int -> Boolean

    >>> double_digits(91019,1)
    False
    >>> double_digits(88,8)
    True
    >>> double_digits(2772,7)
    True
    >>> double_digits(88108,0)
    False
    >>> double_digits(12345,4)
    False
    >>> double_digits(81811081,1)
    True
    """
    while n > 0:
        remainder = n % 10
        n = n // 10
        if remainder == d:
            if n % 10 == d:
                return True
            else:
                remainder,n = n % 10,n // 10
    return False

解决方法

最后一个return语句应该退出循环。 下面是正确的代码:

   def double_digits(n,d): 
    while n > 0:
        remainder = n % 10
        n = n // 10
        if remainder == d:
            if n % 10 == d:
                return True
            else:
                remainder,n = n % 10,n // 10
    return False
,

您必须使最后一条语句缩进缩进:返回False,在左侧增加4个空格。那一定对你有帮助。
另外,您可以将输入转换为字符串,然后进行字符匹配就很容易了。

def double_digits(n: int,d: int)->bool:
    n = str(n)
    d = str(d)
    i = 0
    while i < len(n)-1:
        if n[i] == d and n[i+1] == d:
            return True
        i+=1
    return False

在这里,我使用了一些内置功能,例如lenstr,但是如果您明确地
要避免使用它们,只需采用原始方法,并仅使return语句缩进一次