4

私がプログラムに言った場合のようにn=10、どうすればそれを返すことができ10*9*8*7*6*5....1ますか?

while ループを考えましたが、シーケンス内のすべての数値を合計していないため、どこかで失敗したように感じます。

私の現在のコードは次のようになります

def product(n):
  i=n
  a=n-1
  while a>0:
    return i * a
    b=i * a
    a=a-1
    i=i-1

再帰を使わずにそれを行うより良い方法はありますか? 非常に初歩的な質問で申し訳ありませんが、コーディングの方法を独学で学ぼうとしています。あなたはどこかから始めなければなりません!

ありがとう!

4

8 に答える 8

7

あなたはコーディングを学ぼうとしているので、完全な解決策は提供しませんが、代わりにいくつかのヒントを提供します。

  • -loop の代わりにfor( を使用して) 1 から n まで実行されるループを作成します。これにより、乗算したい値が生成され、適切な回数だけ反復されます (これは、ループでは少しトリッキーになる場合があります)。range(1, n+1)whilewhile

  • productループのたびに乗算の結果を格納する名前の変数を用意します。

  • -loopproductに入る前に初期化してくださいfor。中に入ると、 の値を更新するだけですproduct

  • ループが終了したら、returnステートメントを使用して の値を返すことができますproduct

  • 最後に、テスト目的で、n4 などの小さな値から始めて、ループ内で計算している値を出力して、コードがどのように機能しているかを確認することができます。

これを行うにはもっと簡潔で Pythonic な方法がありますが、これは既に設定したコード構造を使用します。そしてもちろん、あなたが言及したように再帰的にも。

基本をマスターすると、より慣用的な方法でこれを記述したり、これを実行する適切な関数を呼び出したりすることが理解できるようになります。

于 2012-09-02T00:53:40.443 に答える
4

さて、ここに別の Pythonic アプローチがあります。

>>> import operator
>>> numbers = range(1, 11)
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> reduce(operator.mul, numbers)
3628800
于 2012-09-02T01:17:20.713 に答える
2

あなたが意図したものが階乗関数であると仮定すると、単に次を使用できますmath.factorial()

>>> import math
>>> math.factorial(10)
3628800
于 2012-09-02T00:53:51.550 に答える
2

基本的に、数値 n の階乗を見つけようとしています。数値の階乗を見つけるには、2 つの方法があります。

  1. ループ構造の使用
  2. 再帰の使用(あなたが述べたように)

新しいプログラマーは、1 から n まで実行され、反復ごとに乗算された値を変数に入れる単純なループ構造を使用する方がよいでしょう。その変数があなたの答えです。ただし、再帰も機能し、コードがエレガントに見えることも知っておいてください。ハッピープログラミング!

于 2012-09-02T00:57:54.633 に答える
1

これは階乗と呼ばれます。10!10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1と同等です。

def factorial(n):
    product = 1
    while n > 0:
        product *= n
        n -= 1
    return product

ちなみに、実際にはmath.factorial.

于 2012-09-02T00:54:38.750 に答える
1
 def factorial(n):
     if n <= 1: return 1
     return n * factorial(n-1)

私はいつも再帰を学ぶ典型的な例として階乗を考えています...

于 2012-09-02T01:04:46.407 に答える
0

これを行う別の方法は、 を使用することscipy.productです。

>>> import scipy
>>> scipy.product(xrange(1,11))
3628800
于 2012-09-02T02:00:24.253 に答える
0

学習者として、組み込み関数を使用せずにそれを行う必要があります。ツールを学ぶことは、優れたプログラマーになるとはるかに簡単になるため、ツールだけでなくプログラミングを学ぶのに役立ちます。これを行うには 2 つの方法があります。私はより単純なバージョンを実装しました。

再帰の使用:

def product(n):
    if n== 1:
        return 1
    return n * product(n-1)

単純なループの使用:

def product(n):
    res = 1
    while n>1:
        res = res * n
        n = n - 1
    return res
于 2012-09-06T10:04:26.617 に答える