求数字和除以8时的余数

Find the sum of digits and check the remainder when dividing by 8

我想要一个 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

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

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

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

看看这是否有效:

number = 5959
sum = 0
for digit in str(number):
    sum += int(digit)
mod = sum % 8

或不使用str的版本:

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

这只是计算数字的总和。

你需要求出每个数的位数之和的余数mod8。做 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')
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()

希望这会奏效