我想要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
答案 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()
希望这会起作用