2017-09-20 1 views
0

Setup: beginnend mit der Zahl 32, ist die Summe der Quadrate 13 weil 3x3 + 2x2 = 13. Die Summe der Quadrate für 13 ist 10, weil 1x1 + 3x3 = 10. Die Summe der Quadrate für 10 ist 1, also 32 ist eine glückliche Zahl.Code nicht in der Lage, große Schleifen

Abtastwerteingang

Die Eingabe wird eine einzige positive ganze Zahl sein. Einige Beispiele werden hier gegeben.

Beispielausgabe

Das Programm muss angibt, ein Satz gedruckt werden, wenn die Eingangsnummer glücklich oder unglücklich ist, dann beenden.

32 ist eine glückliche Zahl

4565 ist eine unglückliche Zahl

42 ist eine unglückliche Zahl

5555 ist eine glückliche Zahl

tatsächliches Problem: wenn ich Eingabe große Zahl Wie 5555. Ich erhalte einen Fehler wie:

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 

** Code: **

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() 

Frage: Was kann ich tun, um diesen Fehler zu verhindern? Anfrage: Bitte versuchen Sie, meinen Code zu bearbeiten, anstatt Ihren eigenen zu erstellen. es hilft mir zu lernen, was ich falsch gemacht habe und es in der Zukunft reparieren, wenn es nötig ist.

+1

Sie haben so viele unnötige Variablen und 'int' Aussagen ... Definieren Sie keine' repeat1' und 'Repeat2 'Als' len (List) ', verwende einfach eine Variable. Verwenden Sie keine Großbuchstaben. das ist konventionell für Klassen. Do 'Array' oder etwas. – HyperNeutrino

+0

Es tut mir leid für den überschüssigen Code. Ich bin neu in der Programmierung, so dass es schwer für mich ist, alle meine Variablen und Ganzzahlen zu verfolgen. –

+0

Bitte beachten Sie auch, dass dies ein HP Code Wars-Problem ist, also habe ich bereits eine Lösung, ich möchte nur wissen, warum mein Code nicht funktioniert. –

Antwort

0

Eine Zahl ist entweder eine glückliche Zahl, wenn die rekursive Summe der Quadrate in 1 endet, oder nicht, wenn sie endlos rekursiv ist (siehe wikipedia definition). Eine einfache Möglichkeit, ein solches Verhalten zu implementieren ist, die Zwischensummen verfolgen Sie berechnen, auf dem Weg:

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

danke für die Hilfe, aber ich fragte ausschließlich jemanden, meinen Code zu reparieren, anstatt einen neuen zu erstellen. Allerdings werde ich Ihre Antwort als richtig markieren, wenn ich keine bessere Antwort finde. –