簡體   English   中英

python中某個數字的數字和

[英]Digit sum of certain number in python

我目前正在編寫一段代碼,該代碼生成數字的數字總和並僅在它們是 5 的倍數時才打印它們。

因此,例如:0、5 和 14 將是本例中打印出來的前三位數字。

num = 0
while num < 100:
    sums = sum([int(digit) for digit in str(num)]) 
    if sums % 5 == 0: #determines if the sum is a multiple of 5
        print(num)
    num += 1

這段代碼效果很好! 絕對可以完成 1 到 100 之間的總和。但是,我在 python 方面沒有很多經驗,並認為我會推動自己並嘗試在一行代碼中完成它。

目前,這就是我正在使用的:

print(sum(digit for digit in range(1,100) if digit % 5 == 0))

我覺得我在正確的軌道上的某個地方,但我無法到達那里的其余部分。 目前,此代碼正在吐出 950。

我知道digit % 5 == 0是完全錯誤的,但我完全沒有想法! 任何幫助和/或智慧之言將不勝感激。

這似乎對我有用

print([digit for digit in range(1,100) if (sum([int(i) for i in str(digit)]) % 5==0)])

或者如果你想包括 0:

print([digit for digit in range(0,100) if (sum([int(i) for i in str(digit)]) % 5==0)])

少括號等:

>>> [n for n in range(100) if sum(int(d) for d in str(n)) % 5 == 0]
[0, 5, 14, 19, 23, 28, 32, 37, 41, 46, 50, 55, 64, 69, 73, 78, 82, 87, 91, 96]

如果你真的想要一個單線(我認為你當前的解決方案更具可讀性):

print(*(i for i in range(101) if sum(int(j) for j in str(i))%5 == 0))

您可以使用兩個嵌套列表推導式:一個將生成數字元組及其數字總和的列表,另一個將選擇滿足您條件的那些:

[num for num,s in 
    [(x, sum(int(digit) for digit in str(x))) # The inner one
     for x in range(100)] 
 if s % 5 == 0]
#[0, 5, 14, 19, 23, 28, 32, 37, 41, 46, 50, 55, 64...]

其他解決方案也是可能的。

添加長代碼以提高可讀性,

#separating each digits within number
def sum_digits(number):
    res = 0
    for x in str(number): res += int(x)
    return res

num_list = []   
for number in range(0, 100):
    if sum_digits(number) % 5 == 0:
         num_list.append(number)
         
print(num_list)

[0, 5, 14, 19, 23, 28, 32, 37, 41, 46, 50, 55, 64, 69, 73, 78, 82, 87, 91, 96]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM