0

だから私がやろうとしているのは、forループを使ってPythonでこの「三角形」を作ることです:

パスカル

しかし、次のようなテキストで:

0|0
1|01
2|012
3|0123
4|01234

私が現在持っている出力は次のとおりです。

0|01234
1|01234
2|01234
3|01234
4|01234

出力のコードは次のとおりです。

def pascal(n):
    answer = ""
    for rows in range(n):
        answer = str(rows) + "|"
        for col in range(n):
            answer = answer + str(col)
        print(answer)

pascal(5)

私の質問は、どうすれば出力にこれを実行させることができますか?(私は何をすべきかについて困惑しています):

0|0
1|01
2|012
3|0123
4|01234



私が一体何を達成しようとしていたのか誰かが知りたいなら、私の解決策はここにあります

Soooooooo、この青い三角形:

パスカル

"n choose k" により、パスカル三角形に変わります。

方式

forループを理解しようとしていたので、基本的なセットアップ(青い三角形)を完了できます。皆さんが助けてくれました:)

したがって、n choose k を取得するために思いついたコードは次のとおりです。

def factorial(n):
    answer = 1
    for number in range(2, n+1):
       answer = answer * number
    return answer


def pascal(n):
    answer = ""
    for rows in range(n):
        answer = ""
        for col in range(rows+1):
            answer = answer + str( int(factorial(rows) / (factorial(col)*factorial(rows-(col)))) )

        print(answer)
pascal(10)

factorial() は n choose k 式の感嘆符であり、式の残りの部分は次のコードで作成しました。

factorial(rows) / (factorial(col)*factorial(rows-(col))) 

したがって、0より大きいnはパスカル三角形になります:)

4

5 に答える 5

3

あなたは近くにいます。各行を印刷するとき、 までずっと行きたくないでしょうn。内側のループは で停止するはずrowsなので、 に変更for col in range(n)for col in range(rows+1)ます。

def pascal(n):
    answer = ""
    for rows in range(n):
        answer = str(rows) + "|"
        for col in range(rows+1):
            answer = answer + str(col)
        print(answer)

pascal(5)
于 2013-11-04T01:42:28.263 に答える
2

2番目を変更するだけですfor

コード:

def pascal(n):
    answer = ""
    for rows in range(n):
        answer = str(rows) + "|"
        for col in range(rows + 1): # Modify this
            answer = answer + str(col)
        print(answer)

pascal(5)

なんで?- 最初forは行数用で、2 番目forはその行の要素用であるため、ループオーバーしたくありません。たとえば、5正しい数の要素だけを繰り返します。この場合は、次のようになります。行数。

于 2013-11-04T01:42:27.370 に答える
1

あなたのコードは正しかったのですが、内側のループは にループすべきではありませんn。に置き換える必要がありrows+1ます。

def pascal(n):
    answer = ""
    for rows in range(n):
        answer = str(rows) + "|"
        for col in range(rows+1):
            answer = answer + str(col)
        print(answer)

pascal(5)

出力:

0|0
1|01
2|012
3|0123
4|01234
于 2013-11-04T01:39:28.547 に答える
0

正直なところ、これを行うために for ループを使用することはありません。while ループは、やりたいことに対してはるかに効率的です。例えば:

pascal(n):
  answer=''
  answerright = ''
  i=0
  while i <= n:
    answerright += str(i)
    answer += str(i) + '|' + answerright + '\n'
    i+=1
  return answer

これにより、コードを過度に複雑にすることなく、探しているものが生成されます。for ループを使用する必要があるかどうかはわかりませんが、そうでない場合は、これがより良い解決策です。Python では、すべての for ループは実際には foreach ループであることを常に覚えておいてください。

于 2013-11-04T01:38:40.280 に答える
0

これにより、正しいパスが得られるはずです。

for row in range (5):
  row_string = str(row) + "|"

  for i in range(row+1):
    row_string += str(i)

  print row_string

内側の for ループで、現在の行 (ここではインデックスがゼロであるため +1) まで反復したいだけです。

于 2013-11-04T01:38:54.077 に答える