如何在Python中检查一个数字的所有数字是否都是奇数?

2024-01-22

有人告诉我要解决一个问题,我必须找出全部由奇数组成的 4 位数字的个数。我尝试了以下 python 代码:

new_list =[] # A list which holds the numbers
for a in range(1111,10000):
    for b in str(a):
        if int(b) % 2 == 1:
            new_list.append(a)
print len(new_list)

然而,第二个循环的 if 语句有一个缺陷,它只检查当前数字是否为奇数,并且还导致数字被多次添加,更不用说它们不符合条件。那么如何使用python解决这个问题呢?如果您可以编写一个函数来检查列表(参数)的所有数字是否由仅包含奇数/偶数数字的数字组成,那也很棒。

编辑:我还需要一个数字列表,这就是乘法不能完成所有工作的原因。


仅由奇数位组成的 4 位数字只能使用数字1, 3, 5, 7 and 9。 5 的 4 次方就是 625 个不同的数字。这并不需要把它们都尝试一遍。

当然,您仍然可以这样做,使用itertools.product()例如:

from itertools import product

print sum(1 for combo in product('13579', repeat=4))

because product('13579', repeat=4)将从奇数字符串中产生 4 个字符的所有可能组合。

您的代码需要测试是否all数字为奇数;如果有任何数字,则尽早突破not odd:

new_list =[] # A list which holds the numbers
for a in range(1111,10000):
    for b in str(a):
        if int(b) % 2 == 0:
            break
    else:
        # only executed if the loop wasn't broken out of
        new_list.append(a)

你可以使用all()函数也带有用于该测试的生成器表达式:

new_list = []
for a in range(1111,10000):
    if all(int(b) % 2 == 1 for b in str(a)):
        new_list.append(a)

然后可以将其折叠为列表理解:

new_list = [a for a in range(1111,10000) if all(int(b) % 2 == 1 for b in str(a))]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中检查一个数字的所有数字是否都是奇数? 的相关文章

随机推荐