Как я могу исправить эту функцию со словарем, чтобы добавить и распечатать добавленных людей? - PullRequest
0 голосов
/ 09 мая 2018

в настоящее время я пытаюсь решить проблему в написанном мною коде, по какой-то причине всякий раз, когда я вызываю imprimir (), он отображает только последнего добавленного человека, а должен отображать всех добавленных.

libro = {}


def agregar(rut, nombre, edad):

    estudiante = {}

    estudiante['rut'] = rut
    estudiante['nombre'] = nombre
    estudiante['edad'] = edad

    libro['rut'] = estudiante


def imprimir():
    for rut in libro:
        estudiante = libro[rut]
        print(estudiante['rut'], estudiante['nombre'], estudiante['edad'])


def main():
    contador = 0
    while contador < 2:
        rut = input("rut: ")
        nombre = input("nombre: ")
        edad = input("Edad: ")
        contador = contador + 1
        agregar(rut, nombre, edad)
    imprimir()

main()

У меня был ограниченный код только для 2 человек, которые будут добавлены.так что если для первого человека я пишу rut = 1, nombre = 1 и edad = 1, а для второго rut = 2, nombre = 2 и edad = 2. При использовании main () он должен вывести: 1 11 2 2 2 но вместо этого он просто печатает 2 2 2 с 1 1 1 не найден, я предполагаю, что каким-то образом добавленный человек не добавляется, а вместо этого переписывается, но я не могу найти почему, если я включаю imprimir () в то время как вmain () печатает каждого человека, как только я заканчиваю добавлять его, но идея состоит в том, что программа должна напечатать всех добавленных людей, как только я закончу добавлять их.

1 Ответ

0 голосов
/ 09 мая 2018

Проблема в том, что вы добавляете элементы с одинаковым ключом, поэтому dict просто переопределяет последнее значение при каждой добавленной вами записи ...

libro = {}


def agregar(rut, nombre, edad):

    estudiante = {}

    estudiante['rut'] = rut
    estudiante['nombre'] = nombre
    estudiante['edad'] = edad

    # this would override the previous entry since it's always the same key
    libro['rut'] = estudiante
    # use a key that is unique and all entries will be preserved
    libro[rut] = estudiante
    # or for some truly unique keys
    libro[str(uuid.uuid4())] = estudiante
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...