2016-09-27 75 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 M = 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其中resultrange(y)中的每个数字。您基本上检查是否1 + 1**2 >= m2 + 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

谢谢!似乎我没有必要让它变得太复杂了。 – Mike

相关问题