A̱adir listas sobre una lista РPython 2.7

publicado por: Anonymous

Tengo dos dudas en particular:

  • ¿Cómo logro añadir un número indeterminado de listas en otra lista? Específicamente, deseo añadir a una lista, varias listas con 5 elementos en sus interiores (RUT, nombre, primera nota, segunda nota y tercera nota).

  • ¿Por qué al ejecutar las lineas de código que diseñé, las listas, se repiten y no cortan en 5 elementos?

Programa:

lista=[]
lista2=[]
respuesta=""
while respuesta.lower()!="no":
    rut=lista.append(raw_input("ingrese rut del alumno: "))
    nombre=lista.append(raw_input("ingrese nombre completo del alumno: "))
    nota1=lista.append(input("ingrese la primera nota del alumno: "))
    nota2=lista.append(input("ingrese la segunda nota del alumno: "))
    nota3=lista.append(input("ingrese la tercera nota del alumno: "))
    lista2.append(lista)
    respuesta=raw_input(
      "si desea ingresar datos de otro alumno ingrese 'Si', de lo contrario, ingrese 'No' "
    )
print lista2

Salida de la consola de Python:

Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.

ingrese rut del alumno: 17565911-k
ingrese nombre completo del alumno: juan perez
ingrese la primera nota del alumno: 44
ingrese la segunda nota del alumno: 55
ingrese la tercera nota del alumno: 66
si desea ingresar datos de otro alumno ingrese 'Si', de lo contrario, ingrese 'No' si
ingrese rut del alumno: 19565000-k
ingrese nombre completo del alumno: pedro perez
ingrese la primera nota del alumno: 70
ingrese la segunda nota del alumno: 50
ingrese la tercera nota del alumno: 34
si desea ingresar datos de otro alumno ingrese 'Si', de lo contrario, ingrese 'No' no
[
    ['17565911-k', 'juan perez', 44, 55, 66, 'pedro perez', 70, 50, 34],
    ['17565911-k', 'juan perez', 44, 55, 66, 'pedro perez', 70, 50, 34]
]

solución

El problema es que en cada iteración estás utilizando la misma lista para almacenar los datos. Debes declarar una nueva lista en cada iteración.

Al añadir un usuario, insertas los datos en lista, y luego insertas lista en lista2. En la siguiente iteración, añades los datos de otro usuario en la misma lista, y vuelves a insertar la misma lista en lista2. Como en lista2 se almacena una referencia a lista, no una copia, si modificas la lista añadiendo, modificando o eliminando elementos, afectará a las listas anteriores de lista2. Es decir, si añades por ejemplo tres usuarios, en lista2 realmente tienes tres referencias a la misma lista, con 15 elementos.

Simplemente debes mover la declaración de lista dentro del bucle:

lista2 = []
respuesta = ""
while respuesta.lower() != "no":
    lista = []
    rut = lista.append(raw_input("ingrese rut del alumno: "))
    nombre = lista.append(raw_input("ingrese nombre completo del alumno: "))
    nota1 = lista.append(input("ingrese la primera nota del alumno: "))
    nota2 = lista.append(input("ingrese la segunda nota del alumno: "))
    nota3 = lista.append(input("ingrese la tercera nota del alumno: "))
    lista2.append(lista)
    respuesta = raw_input("si desea ingresar datos de otro alumno ingrese 'Si', de lo contrario, ingrese 'No' ")
print lista2
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *