簡體   English   中英

Python中特定方式的數字總和

[英]Sum of Digits in a specific way in Python

我正在尋找運行的代碼,即:

    int(input) = 2565

打印輸出應該是這樣的:

    2 + 5 + 6 + 5  = 18 = 1 + 8 = 9

我編寫了給出最終答案“9”的代碼。 但是我無法用每個數字分隔的“+”號來寫它。 假設我需要使用 while 循環,但我該如何編寫代碼,使其與上面的輸出類似?

你可以使用這樣的東西:

def sum_of_digits(s):
    if s < 10:
        return s
    return sum_of_digits(sum(int(c) for c in str(s)))
    
> sum_of_digits(2565)
9

它遞歸地檢查數值是否小於 10。如果是,則返回該值。 如果不是,則添加數字,然后根據結果遞歸調用自身。

編輯

要在執行過程中打印出這些步驟,您可以執行以下操作:

def sum_of_digits(s):
    if s < 10:
        print(s)
        return s
    print(' + '.join(c for c in str(s)) + ' = ')
    return sum_of_digits(sum(int(c) for c in str(s)))

首先,啟動一個空字符串output_str
當我們的整數大於 9 時,while 循環會繼續:

  1. [s for s in str(x)]將創建我們整數的數字(作為字符串)的列表。 它被稱為列表理解,非常有用,我的建議是閱讀它。
  2. 使用" + ".join()我們創建一個在數字之間帶有 " + " 的字符串。 output_str的末尾添加此字符串。
  3. " = "添加到output_str
  4. 計算數字的總和(我們不能使用sum(lst_of_digits)因為它是一個字符串列表。 sum([int(s) for s in lst_of_digits])將字符串列表轉換為一個 inter 列表,可以使用sum() )。 將總和存儲到x
  5. 將新的x + " = "output_string

在字符串的末尾,我們有一個多余的“=”(因為不需要最后一個(5)),讓我們從中刪除最后三個字符( = )。

x = 2565
output_str = ""
while x > 9:
    lst_of_digits = [s for s in str(x)]
    output_str += " + ".join(lst_of_digits)
    output_str += " = "
    x = sum([int(s) for s in lst_of_digits])
    output_str += f"{x} = "
output_str = output_str[:-3]

輸出:
output_str = '2 + 5 + 6 + 5 = 18 = 1 + 8 = 9'

您可以使用print函數的end關鍵字參數,它是 print 在所有參數都打印之后將放置的最后一個字符/字符串,嗯,打印,默認情況下是"\\n"但它可以根據您的需要進行更改.

和字符串中的.join方法將給定的字符串放在給定的字符串列表/可迭代對象之間以獲得所需的結果:

>>> " + ".join("123")
'1 + 2 + 3'
>>> 

將它們混合在一起:

def sum_digit(n):
    s = sum(map(int,str(n)))
    print(" + ".join(str(n)),"=",s, end="")
    if s<10:
        print()
        return s
    else:
        print(" = ",end="")
        return sum_digit(s)

在這里,我們首先獲取s上數字的總和,並將其打印為期望值,使用end=""打印不會轉到遞歸步驟所需的下一行,然后我們檢查是否完成,在這種情況下打印一個新的空行,如果不是我們打印一個額外的=以將其綁定到下一個遞歸步驟

>>> sum_digit(2565)
2 + 5 + 6 + 5 = 18 = 1 + 8 = 9
9
>>> 

這可以很容易地修改為通過添加額外的參數或迭代來返回累積的字符串,但我將它們作為練習留給讀者:)

我是一個菜鳥,但這應該做你想做的。

干杯,古列爾莫

import math
import sys

def sumdigits(number):

    digits = []
    for i in range( int(math.log10(number)) + 1):
      digits.append(int(number%10))
      number = number/10

    digits.reverse()
    string = ''
    thesum = 0
    for i,x in enumerate(digits):
      string += str(x)
      thesum += x
      if i != len(digits)-1: string += ' + '
      else: string += ' = '

    if thesum > 10:
      return string,thesum,int(math.log10(number))+1
    else:
      return string,thesum,0


def main():

    number = float(sys.argv[1])
    finalstring = ''

    string,thesum,order = sumdigits(number)
    finalstring += string
    finalstring += str(thesum)
    
    while order > 0:
      finalstring += ' = '
      string,thesum,order = sumdigits(thesum)

      finalstring += string
      finalstring += str(thesum)


    print 'myinput = ',int(number)
    print 'Output = ',finalstring

if __name__ == "__main__":
    main()

暫無
暫無

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

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