2016-09-27 2 views
-1

Напишите цикл while, который выходит, когда сумма квадратов 1^2 + 2^2 + 3^2 + ... превышает вход m. Распечатайте самую большую сумму, меньшую m, и количество членов в сумме.Может ли кто-нибудь помочь с этой задачей?

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 

Поэтому вы должны напечатать 3 и 14 при т = 18.

Это то, что я до сих пор, и я в основном полностью утрачена в данный момент:

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

Не могу понять, куда мне идти. Вычисление сумм квадратов не является проблемой, и не прерывает цикл for, когда сумма квадратов превышает вход пользователя. Я просто не могу понять, как печатать 3 и 14 на основе ввода.

ответ

1

Что не так в вашем коде, что вы проверяете result + result**2, где result - это номер в range(y). Вы в основном проверяете, 1 + 1**2 >= m, 2 + 2**2 >= m и так далее. Вот как я это сделаю:

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

Спасибо! Кажется, я делал это слишком сложным с циклом for, когда это не было необходимо. – Mike

Смежные вопросы