Parece que tengo problemas para crear un triángulo de Pascal en Python, y estoy realmente frustrado de no encontrar el problema. Por favor ayuda. Gracias.

Aquí está el código:

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

E imprime algo como esto:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 4, 1]
[1, 4, 8, 9, 1]
0
edrichhans 2 sep. 2014 a las 14:43

4 respuestas

La mejor respuesta

Con list2 = list1 estás diciendo que los dos nombres list1 y list2 hacen referencia a la misma lista.
Para copiar realmente la lista, puede usar list2 = list1[:] (o un módulo como copy. Consulte también esta pregunta ("lista de Python por valor, no por referencia "))

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[:]
4
Community 23 may. 2017 a las 11:46
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
-1
senthil balaji 18 feb. 2017 a las 16:52

Puedes simplificar tu código.

for x in range(a+1) comienza en 0 y llega hasta a porque está usando a+1, usa los controles if para evitar 0 y a para que tiene más sentido comenzar su rango desde 1 y recorrer el range(a), eliminando así la necesidad de cualquier comprobación 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[:]
1
Padraic Cunningham 2 sep. 2014 a las 13:54

Creo que necesita copiar en profundidad o clonar sus listas en lugar de list2 = list1 ya que esto hará que ambas variables apunten a la misma lista. Consulte ¿Cómo clonar o copiar una lista?

-1
Community 23 may. 2017 a las 12:00