找到数字之和,并在除以8时检查余数

时间:2016-12-19 08:14:23

标签: python python-2.7

我想要Python或shell脚本来检查特定范围内的数字。对于每个数字,找到其数字之和,将总和除以8,如果余数在1到4之间,则打印该数字。

实施例。

  

5959

     

5 + 9 + 5 + 9 = 28

28/8的剩余是4。

4在1到4的范围内,因此请打印数字5959并转到下一个数字。如果余数不在1到4的范围内,则忽略它并转到下一个数字。

到目前为止,我已经尝试了这一点,但它并没有达到我的预期。

count = 0
lower = 5959
while (count<1000):
 sum_digit= lower%8

 count+=1
 lower+=1
 if 1<=sum_digit<=4:
  print lower

5 个答案:

答案 0 :(得分:4)

您需要找到每个数字的总和的余数mod 8。执行lower%8只会找到数字本身的余数mod 8。

Python中对数字求和的最简单方法是首先将其转换为字符串,以便循环显示各个数字。然后将每个数字转换回整数,以便您可以使用它们进行算术运算。

为了保持输出的可管理性,我将使用更小的范围:

for n in range(5959, 5980):
    if 0 < sum(map(int, str(n))) % 8 < 5:
        print(n)

<强>输出

5959
5960
5965
5966
5967
5968
5974
5975
5976
5977

如果您不想使用map功能,可以使用生成器表达式:

for n in range(5959, 5980):
    if 0 < sum(int(d) for d in str(n)) % 8 < 5:
        print(n)

FWIW,这可以写在一行,但恕我直言我的早期版本更具可读性:

print(*(u for u in range(5959,5980)if 0<sum(map(int,str(u)))%8<5),sep='\n')

答案 1 :(得分:2)

如果我是你,为了计算数字的总和,我会这样做:

>>> my_num = 5959
>>> sum(int(i) for i in str(my_num))
28

在您当前的代码中,我没有看到您计算sum数字。

答案 2 :(得分:2)

或未使用str的版本:

count = 0
lower = 5959
while lower:
    count += lower % 10
    lower //= 10     # //= for python 3; /= for python 2

这只是计算数字的总和。

答案 3 :(得分:0)

看看是否有效:

QLayout::SetMinimumSize

答案 4 :(得分:0)

def main():
    count = 0
    lower = 5959
    while (count<1000):
        lowersum = sum_digits(lower)
        sum_digit= lower%8
        count+=1
        lower+=1
        if 1<=sum_digit<=4:
            print (sum_digit,lowersum)

def sum_digits(n):
    sum = 0
    while n:
        sum += n % 10
        n //= 10
    return sum
main()

希望这会起作用