セットアップ:番号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()
質問:私はこのエラーを防ぐために何ができる? リクエスト:自分のコードを編集するのではなく、自分のコードを編集してみてください。それは私が間違ったことを学び、必要に応じて将来それを修正するのに役立ちます。
あなたは非常に多くの不必要な変数と 'int'文を持って' repeat1'と 'repeat2を定義しないでください、このような動作を実装する簡単な方法は、あなたが途中で計算する中間和を追跡することです'' len(List) 'として、ただ一つの変数を使います。また、大文字の名前は使用しないでください。それは従来からクラスのためです。 'array'か何かをします。 – HyperNeutrino
余分なコードをおかけして申し訳ありません。私はプログラミングに慣れていないので、すべての変数と整数を追跡するのは難しいです。 –
また、これはHPのコード戦争の問題ですので、私はすでに解決策があることに注意してください。私のコードがなぜ機能しないのか知りたいだけです。 –