求数字和除以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()
希望这会奏效
我想要一个 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()
希望这会奏效