0

読んでくれてありがとう、うまくいけば私の質問に答えてくれます。乗算や指数を使用せずに数値の 2 乗を求めるこの Python プログラムを作成しようとして、私は立ち往生しています。代わりに、1から始まる最初の奇数nの合計を取得する必要があります。

def square():
    print("This program calculates the square of a given number")
    print("WITHOUT using multiplication! ")
    odd = 1
    n = eval(input("Enter a number: "))
    for odd in range(0, n + 1, 2):
        odd = odd + 2 
        final_square = n + odd
    print(n, "squared is", final_square, ".") 

編集: こんにちは、私は 4 + 4 + 4 + 4 を実行できません。1 + 3 + 5 + 7 を実行する必要がありますが、方法がわかりません。4 の 2 乗は 11 か何かになります。

4

3 に答える 3

1

最初の n 個の奇数を生成することによって答えを得る必要があると言われているので、それを行う方法を考える必要があります - 確かにあなたのループはそれをしていません:

いくつかの問題:

  1. 奇数 = 1 を実行してから for ループで奇数を使用すると、2 つが共存できないため、奇数 = 1 の初期値が上書きされます。
  2. あなたのループは、私が見ることができる最初の n 個の奇数を生成しません。

私の提案は、ループを作り直すことです:最初の「n」奇数は次の形式です:

1, 3, 5, ... n*2-1 (0 からではなく 1 から数えます)

したがって、次のようなループ:

  final = 0 
  for c in range(1, n+1): #start counting from 1 to do 1 to n+1
      odd = c*2 -1        #Use the series above to generate each odd number.
      final += odd

動作するはずです

これを行うためのはるかに「pythonic」な方法は次のとおりです。

 final = sum(c*2-1 for c in range(1,n))

これは、ジェネレーターを使用してすべての奇数を作成し (ループに相当)、作成された値を合計します。

于 2014-09-16T07:39:54.473 に答える