Nを考えると、n個の数字のTSUMを取ります。その値は、複数の桁を有する場合に、生成された単一の桁数を減らす続けます

ILoveMath:
def digital_root(n):
    x = str(n)
    while len(x)!=0 and len(x)!=1:
        r = 0
        for i in range(len(x)):
            r= r + int(x[i])
        x = str(r)
    return r

デジタルルートの数はすべての桁の再帰的な和です。Nを考えると、n個の数字の合計を取ります。その値が1桁以上を持っている場合は、1桁の数字が生成されるまで、このように減少続けます。これは、自然数にのみ適用されます。

私のコード:

このコードは効率的ですか?私は次のエラーを取得します:

Traceback (most recent call last):
  File "main.py", line 8, in <module>
    test.assert_equals( digital_root(0), 0 )
  File "/home/codewarrior/solution.py", line 8, in digital_root
    return r
UnboundLocalError: local variable 'r' referenced before assignment
Kaleb Coberly:

あなたがreturn文に到達したときrが範囲外であるように見えます。それだけでreturn文の前に終了while文、内で局所的に適用されます。

それはあなたが唯一のreturn文を持っており、それは機能のために最も広い範囲で、そして最後にあることをことを良いことです。だから、return文と同じスコープで、whileループのRの外を宣言してみてください。そのスコープは、同様に、whileループ内のすべてが含まれています。

def digital_root(n):
    x = str(n)
    r = 0
    while len(x) > 1:
        r = 0
        for i in range(len(x)):
            r = r + int(x[i])
        x = str(r)
    return r

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=18051&siteId=1