检查数字是否仅由两个数字组合而成

2 投票
7 回答
9904 浏览
提问于 2025-04-17 21:18

我写了一个函数,用来检查一个数字是否有除了3和5以外的其他数字,如果有就返回false。

def isDecent(n):
    digits = list(map(int, str(n)))
    for digit in digits:
        if digit != 3 or digit != 5: return False
    return True

print(isDecent(5553334))

但是不幸的是,这个函数没有正常工作!我能知道问题出在哪里吗?

7 个回答

1

你可以使用集合(set):

d=str(55555333)
r=''.join(set(d))
if r in '353':
    print "Number contains 3 or 5"
1

我建议不要把它转换成字符串:

def isDecent(n):
    if n == 0:
        return False

    while n: 
        if n % 10 not in (3, 5, ): 
            return False 
        n //= 10

    return True 
1

你的问题是你用了or,其实应该用and

只需要把你的代码改成这样:

def isDecent(n):
    digits = list(map(int, str(n)))
    for digit in digits:
        if digit != 3 and digit != 5: return False
    return True

print(isDecent(555333))

然后一切就正常了!

2

因为“为什么”这个问题已经有人回答过了,所以我来告诉你怎么高效地做到这一点。

def isDecent(n):
    return all(char in '35' for char in str(n))

这是同样内容的姐妹版本。

def isDecent(n):
    return not any(char not in '35' for char in str(n))
6

总是会有这样的情况:digit != 3 或者 digit != 5。所以这个条件永远会返回假。

or 改成 and

另外,你也可以这样检查:

if digit not in (3, 5):

其实,我们并不需要把字符转换成整数来检查是否相等,你可以直接这样做:

def isDecent(n):
    digits = str(n)
    return all(digit in ("3", "5") for digit in digits)

或者甚至可以用 digit in "35"... 不过我觉得这样可读性稍差。

还有一个选择是使用集合:

def isDecent(n):
    return set(str(n)).issubset('35')

撰写回答