2016-09-27 10 views
-1

2^2 + 2^2 + 3^2 +の正方形の合計が入力mを超えたときに終了するwhileループを作成します。 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 

あなたは、M = 18

のために3と14を印刷すべきであるのでこれは私がこれまで持っているものである、と私は基本的には完全にこの時点で失われています:

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**2resultの各数字がrange(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

ありがとうございました!私はそれが必要でないときにforループで複雑すぎるように思えた。 – Mike

関連する問題