Треугольник Паскаля в питоне?
Кажется, у меня проблемы с созданием треугольника паскаля в python, и я действительно разочарован тем, что не нашел проблему. Пожалуйста помоги. Благодарю.
Вот код:
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 ответа
С list2 = list1
вы говорите, что два имени list1
а также list2
ссылаются на тот же список.
Чтобы действительно скопировать список, вы можете использовать list2 = list1[:]
(или такой модуль, как копия. См. также этот вопрос ("список python по значению, а не по ссылке"))
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[:]
Вы можете упростить свой код.
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[:]
Я считаю, что вам нужно глубоко копировать или клонировать ваши списки вместо list2=list1, поскольку это заставит обе переменные указывать на один и тот же список. Обратитесь к разделу Как клонировать или скопировать список?
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