制作嵌套for循环(Python 3.x)

时间:2013-11-04 01:30:52

标签: python for-loop python-3.x

所以我要做的就是在python中使用for循环来实现这个“Triangle”:

Pascal

但是文字是这样的:

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,这个蓝色三角形:

Pascal

通过“n选择k”变成pascal三角形:

formula

我试图找出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都会形成一个pascal三角形:)

5 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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,只是在正确数量的元素上,在这种情况下,它将是行数。

答案 2 :(得分: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

答案 3 :(得分: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循环,永远记住它。

答案 4 :(得分: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,因为我们在这里为零索引)。