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



如果有人想看看我到底想完成什么,这是我的解决方案

太好了,这个蓝色三角形:

帕斯卡

通过“n 选择 k”变成帕斯卡三角形:

公式

我试图弄清楚 for 循环,这样我就可以完成基本设置(这是蓝色三角形),你们帮助了:)

所以我想出的获得 n 选择 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 选择 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

只修改第二个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是行数,第二个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 回答