2016-09-27 1 views
-1

Schreiben Sie eine while-Schleife, die ausgeht, wenn die Summe der Quadrate 1^2 + 2^2 + 3^2 + ... einen Eingang m überschreitet. Drucken Sie die größte Summe kleiner als m und die Anzahl der Begriffe in der Summe aus.Kann jemand bei dieser Aufgabe helfen?

Example: If m = 18 then 
1^2 +2^2 + 3^2 = 1 + 4 + 9 = 14 
1^2 +2^2 + 3^2 + 4^2 = 1 + 4 + 9 + 16 = 30 

Deshalb sollten Sie aus 3 und 14 für m drucken = 18.

Das ist, was ich habe, so weit, und ich bin im Grunde ganz an diesem Punkt verloren:

def sum_printer(): 
    y = input("Please enter a maximum number: ") 
    y = int(y) 
    for result in range(y): 
     while result + result ** 2 >= y: 
      break 
     else: 
      print(str(result) + "^2 =", result ** 2, end=" ") 


def sum_of_squares_result(m, n): 
    return sum(result ** 2 for result in range(m, n)) 

sum_printer() 

Ich kann nicht herausfinden, wohin ich von hier aus gehen soll. Die Berechnung der Quadratsummen ist kein Problem, ebenso wenig wie die Unterbrechung der for-Schleife, wenn die Summe der Quadrate die Eingabe des Benutzers übersteigt. Ich kann einfach nicht herausfinden, wie man 3 und 14 basierend auf der Eingabe druckt.

Antwort

1

Was in Ihrem Code falsch ist, ist, dass Sie result + result**2 überprüfen, wobei result jede Nummer in range(y) ist. Sie überprüfen grundsätzlich, ob 1 + 1**2 >= m, 2 + 2**2 >= m, und so weiter. Hier ist, wie ich es tun würde:

def sum_printer(): 
    ceil = int(input("What is the maximum to not be exceeded? ")) 
    total = 0 
    curr = 1 

    while total + curr**2 < ceil: 
     total += curr**2 
     curr += 1 
    curr -= 1 

    print(curr, total) 
+0

Vielen Dank! Scheint, ich machte es mit einer for-Schleife zu kompliziert, wenn es nicht nötig war. – Mike

Verwandte Themen