2016-12-16 4 views
0

今年は学校でpythonを学び始めました。今まではtkinter canvas(絵画家、花など)だけで基本的なことをやっていて、今自分で知っていることすべてを学ぶ。クラスを使ってデジタル和関数を作るにはどうすればいいですか

私は(好ましくは再帰なし)数のデジタル合計値を見つけるために、関数を書くのこのアイデアについて考えてきたので、私はこの思い付いた:

def sum(n): 
    total=0 
    for letter in str(n): 
     total+=int(letter) 
    return total 

しかし、その後、私は考えていました例えば、 "絶対的なDIG数。和" を見つけるために再帰を使用して、約99 = 9 + 9 = 18 => 1 + 8 = 9 と私は基本的になり、この

total=0 
def suma(n): 
    global total 

    def part_sum(n): 
     global total 
     total_part=0 

     for letter in str(n): 
      total_part+=int(letter) 
     total=total_part 

     if total<10: 
      print(total) 
     else: 
      part_sum(total) 

    part_sum(n)  

を思い付いnの合計、nよりも小さいかどうかを調べ、それが再実行されない場合(基本再帰)、使用します(私が聞いたことのように何らかの理由で悪い)変数とグローバル変数の束と私はそれがクラスとオブジェクトを使ってはるかに効率的に行うことができることをよく知っていますが、私はそれだけでvidoesのカップルを見ましたそれはあまりうまくいきません。

誰かが自分のコードを編集して、ここにそれを理解するのに役立つメモを貼り付けることができますか?

+0

申し訳ありませんが、あなたはそのコードを書いており、われわれが理解するのを助けてほしいのですか?あなたが書いた作業中のコードを理解するのに役立ちます.... –

+0

'' '...クラスとオブジェクトを使ってはるかに効率的に行うことができます...' '' - あなたはPythonではすべてがオブジェクトであることを認識する必要があります機能を含む。 [標準型階層](https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy)。関数はこのタスクで正常に動作します。 – wwii

+0

[クラス](https://docs.python.org/3/tutorial/classes.html#classes) – wwii

答えて

0

は、ここであなたが[function(input1), function(input2), function(input3)]

1

再帰がしばしば使い古さあるmap(function, [input1, input2, input3])を取って、返すようmapと考えることができ、私の解決策

def rec_dig_sum(n): 
    total = str(sum(map(int, str(n)))) 
    while len(total)>1: 
     total = str(sum(map(int, total))) 
    return int(total) 

です。私はあなたがそれなしでsuma()をもっとはっきりと書くことができると信じています。すでに作成したものをベースに構築します。

def sum(n): 
    total=0 
    for letter in str(n): 
     total+=int(letter) 
    return total 

def suma(n): 
    while n >= 10: 
     n = sum(n) 
    return n 
0

代わりに変数を保存し、ループの各反復でそれを更新する(通常の方法でこれを行うために):

def iterative_sum(num): 
    while num >= 10: 
     num = int(sum(map(int, str(num)))) 
    return num 

は、新しい関数呼び出しの引数として、それを送信します。

def recursive_sum(num): 
    if num >= 10: 
     return recursive_sum(sum(map(int, str(num)))) 
    return num 

あなたはまた、最初の合計を行うには再帰関数を作成し、それが唯一の1桁になるまでそうし続ける機能でそれを使用することができます。

def rc(n, c=0): 
    if n: 
     return rc(n//10, c+n%10) 
    return c 

def rs(n): 
    if n >= 10: 
     return rs(rc(n)) 
    return n 
関連する問題