Pascal在python中的三角形?

时间:2014-09-02 10:43:17

标签: python pascals-triangle

我似乎遇到了在python中创建一个pascal三角形的问题,而且我真的很沮丧,没有发现问题。请帮忙。感谢。

下面是代码:

inpt = input("Enter levels: ")   #number of levels in a triangle
list1 = []
list2 = [1]

for a in range(inpt):
    list1.append(1)
    for x in range(a+1):
        if (x == 0 or x == a):
            list1[x]
        elif (x > 0 or x < a):
            list1[x] = list2[x] + list2[x-1]
    print list1
    list2 = list1

并打印出类似这样的内容:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 4, 1]
[1, 4, 8, 9, 1]

4 个答案:

答案 0 :(得分:4)

对于list2 = list1,您说两个名称list1list2引用相同的列表。
要真正复制列表,您可以使用list2 = list1[:](或copy之类的模块。另请参阅this question ("python list by value not by reference")

for a in range(inpt):
    list1.append(1)
    for x in range(a+1):
        if (x == 0 or x == a):
            list1[x]
        elif (x > 0 or x < a):
            list1[x] = list2[x] + list2[x-1]
    print list1
    list2 = list1[:]

答案 1 :(得分:1)

您可以简化代码。

for x in range(a+1)从0开始,一直到a,因为您使用的是a+1,如果检查可以避免使用0a那么从1开始你的范围并循环range(a)会更有意义,因此无需进行任何if/elif检查:

for a in xrange(inpt):
    list1.append(1)
    for x in xrange(1, a):
        list1[x] = list2[x] + list2[x-1]
    print list1
    list2 = list1[:]

答案 2 :(得分:-1)

我认为你需要深度复制或克隆你的列表而不是list2 = list1,因为这会使两个变量指向同一个列表。 请参阅How to clone or copy a list?

答案 3 :(得分:-1)

x = int(input("Enter some number = "))
l =[]
temp = [1,1]
num1 =0
num2 =1
s =""
p = int((x*30)/2)
finalList =[]
l1 = [1]
l2 = [1,1]
if(x is 1):
    print(l1)
   finalList.append(l1)
elif x is 2:
   finalList.append(l1)
   finalList.append(l2)
else:
   finalList.append(l1)
   finalList.append(l2)
   for w in range(1,x-1):
       for q in range(w+2):
           l.insert(q,0)
       for r in range(w):  
           l[r+1]=temp[num1]+temp[num2]
           num1 +=1
           num2 +=1
       l[0] = 1
       l[-1] = 1
       temp = l
       finalList.append(l)
       #print(temp)
       num1= 0
       num2=1
       l=[]
for y in range(x):
    for t in range(p):
        s+= "  "
    for b in range(len(finalList[y])):
        s += str(finalList[y][b])
        s+="     "
    print(s)
    s=" "
      p = p - 2