Треугольник Паскаля в питоне?

Кажется, у меня проблемы с созданием треугольника паскаля в 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
Другие вопросы по тегам