我似乎遇到了在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]
答案 0 :(得分:4)
对于list2 = list1
,您说两个名称list1
和list2
引用相同的列表。
要真正复制列表,您可以使用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
,如果检查可以避免使用0
和a
那么从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