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

时间:2014-01-08 17:35:33

标签: python

我被告知要解决一个问题,我必须找出全部由奇数组成的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 个答案:

答案 0 :(得分:5)

仅由奇数位组成的4位数字只能使用数字13579。这给你5的功率4是625个不同的数字。这并不需要全力以赴。

当然,您仍然可以使用itertools.product()来执行此操作:

from itertools import product

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

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

您的代码需要测试所有数字是否为奇数;如果任何数字奇数,则提前爆发:

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))]

答案 1 :(得分:0)

我相信如果你想要模拟你已有的东西,这样的东西会起作用,但我回应了yotommy的观点,即一些直观的乘法可以解决问题。

 for a in range(1111,10000):
       allOdd = True
       for b in str(a):
           if int(b) % 2 == 0:
               allOdd = False
       if(allOdd):
          new_list.append(a)

答案 2 :(得分:-1)

您可以尝试这样的事情

def isAllOdd(num):
  if num < 10: return num % 2 == 1;
  return isAllOdd(num % 10) and isAllOdd(int(num / 10))

答案 3 :(得分:-1)

for i in range(1000,3001):
  s=str(i)
  if (int(s[0])%2==0 and int(s[1])%2==0 and int(s[2])%2==0 and int(s[3])%2==0):
      print(i,end=",")