2017-09-20 16 views
0

セットアップ:番号32からは、3x3 + 2x2 = 13なので、平方和の合計は13 です.1x1 + 3x3 = 10なので、13の平方和の合計は10です。 for 10は1なので、32は幸せな数字です。コードが大きなループを処理できません

サンプル入力

入力は単一の正の整数になります。いくつかの例がここに与えられています。

サンプル出力

プログラムは、入力された番号が出口その後、幸せか不幸かどうかを示す文章を印刷しなければなりません。

32ハッピー数

4565は不幸数

42は不幸数

5555は、ハッピー数

実際の問題であるである:たびI入力膨大な数5555などのエラーが発生します。

File "C:/Users/username/Desktop/bob.py", line 43, in sos 
sos() 

File "C:/Users/username/Desktop/bob.py", line 26, in sos 
for x in range(repeat): 
RuntimeError: maximum recursion depth exceeded in comparison 

**コード:**

ans = input() 
y = 5000 #this is so that the data does not loop forever 
repeat = len(ans) 
def sos(): 
    global y 
    global repeat1 
    global ans 
    for x in range(repeat): 
     List = list(str(ans)) 
     repeat1 = len(List) 
     repeat2 = len(List) 
     ans1 = int(List[int(repeat2)-int(repeat1)]) * int(List[int(repeat2)-int(repeat1)]) 
     #print("ans1", ans1) 
     ans2 = int(List[int(repeat2)-(int(repeat1)-1)]) *int(List[int(repeat2)-int(repeat1-1)]) 
#print("ans2", ans2) 
    ans = ans1 + ans2 
    y -= 1 
    if x == 1: 
     print(this, "is a happy number") 
    else: 
     if y <=0: 
      print(this, "is not a happy number") 
     else: 
      sos() 


sos() 

質問:私はこのエラーを防ぐために何ができるリクエスト:自分のコードを編集するのではなく、自分のコードを編集してみてください。それは私が間違ったことを学び、必要に応じて将来それを修正するのに役立ちます。

+1

あなたは非常に多くの不必要な変数と 'int'文を持って' repeat1'と 'repeat2を定義しないでください、このような動作を実装する簡単な方法は、あなたが途中で計算する中間和を追跡することです'' len(List) 'として、ただ一つの変数を使います。また、大文字の名前は使用しないでください。それは従来からクラスのためです。 'array'か何かをします。 – HyperNeutrino

+0

余分なコードをおかけして申し訳ありません。私はプログラミングに慣れていないので、すべての変数と整数を追跡するのは難しいです。 –

+0

また、これはHPのコード戦争の問題ですので、私はすでに解決策があることに注意してください。私のコードがなぜ機能しないのか知りたいだけです。 –

答えて

0

数値は再帰的な二乗和が1になった場合は幸せな数字になり、無限に再発する場合は数字が返されます(wikipedia definition参照)。 ...

def is_happy(num): 
    return is_happy_recursive(num, []) 

def is_happy_recursive(num, seq): 
    sum_squares = sum([int(d)**2 for d in str(num)]) 
    if sum_squares == 1: 
     return True 
    elif sum_squares in seq: 
     return False 
    else: 
     seq.append(sum_squares) 
     return is_happy_recursive(sum_squares, seq) 
+0

助けてくれてありがとうが、私は新しいものを作るのではなく、自分のコードを修正するよう誰かに頼んだ。しかし、より良い答えが見つからない場合、私はあなたの答えを正しいものとしてマークします。 –

関連する問題