Python - crear una función que toma datos y los agrega a un diccionario

   
Vista:

crear una función que toma datos y los agrega a un diccionario

Publicado por Manuel manuriverogod@gmail.com (9 intervenciones) el 12/06/2017 23:39:40
¡Hola comunidad!
Soy nuevo en esto de la informática, y tengo una duda con Python.
Resulta que estoy practicando con ejercicios para un exámen parcial de programación, el cuál consta de crear una función que toma datos y los agrega a un diccionario.
El problema está después, tengo que crear otra función que trabaje sobre ese diccionario que retorno la función anterior, y no sé como hacer que lo tome, ya que cuando lo intento me tira el error de que no está asignado.

Les paso el código (es súper cortito) a ver si me pueden ayudar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def alumnosdic():
    dicc={}
    print("Vamos a cargar los datos del alumno:")
    dni=int(input("Ingrese DNI: "))
    while dni!= 0:
        alumno=input("Nombre del alumno: ")
        apellido=input("Apellido del alumno: ")
        añodecursada=input("Año de cursada: ")
        aprobado=input("Ingrese condición de aprobado si/no: ")
        dicc[dni]=[alumno,apellido,añodecursada,aprobado]
        print("La carga del alumno ",dicc[dni][0][1]," ha finalizado.")
        print("\n")
        print("Vamos a cargar los datos del siguiente alumno, en el caso de que ya halla finalizado de cargarlos a todos, ingrese 0.")
        dni = int(input("Ingrese DNI: "))
 
    return dicc
 
 
def dosmilquince():
    for valor in dicc.values():
        if valor[2]=="2015" and valor[3]=="si":
            print("Ese alumno curso en el 2015 y aprobo la asignatura")
 
alumnosdic()
dosmilquince()

Paso a explicarles: La consigna era crear una función que tome el registro de todos los alumnos hasta que se ingrese un DNI igual a 0.
Que todos los datos se vayan almacenando, por lo que elegí un diccionario donde cada dni es la clave para acceder a cada alumno.

La segunda consigna, y aqui viene el problema, es imprimir el nombre y apellido de aquellos alumnos que hallan cursado en 2015 y hallan aprobado. Me tira el error de que "dicc" (es el diccionario que surge de la funcion anterior) no está definido. "NameError: name 'dicc' is not defined"

Mi duda es... ¿Cómo utilizo ese diccionario en la función número dos? Tengo examen el jueves y no sé como desenvolverme en un ejercicio de ese tipo por culpa de eso...

¡Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

crear una función que toma datos y los agrega a un diccionario

Publicado por xve (1378 intervenciones) el 13/06/2017 07:54:42
Hola Manuel, te lo he modificado un poco... haber si te sirve.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def alumnosdic():
    dicc={}
    print("Vamos a cargar los datos del alumno:")
    dni=int(input("Ingrese DNI: "))
    while dni!= 0:
        alumno=input("Nombre del alumno: ")
        apellido=input("Apellido del alumno: ")
        anodecursada=input("Ano de cursada: ")
        aprobado=input("Ingrese condicion de aprobado si/no: ")
        dicc[dni]=[alumno,apellido,anodecursada,aprobado]
        print("La carga del alumno ",alumno," ha finalizado.")
        print("\n")
        print("Vamos a cargar los datos del siguiente alumno, en el caso de que ya halla finalizado de cargarlos a todos, ingrese 0.")
        dni = int(input("Ingrese DNI: "))
 
    return dicc
 
 
def dosmilquince(dicc):
    for valor in dicc.values():
        if valor[2]=="2015" and valor[3]=="si":
            print("Ese alumno curso en el 2015 y aprobo la asignatura")
 
dicc=alumnosdic()
dosmilquince(dicc)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

crear una función que toma datos y los agrega a un diccionario

Publicado por CpA (33 intervenciones) el 14/06/2017 07:16:31
Igual deberías imprimir el nombre y apellidos de las personas que cumplen la condición, porque de esta manera solo obtendrás en pantalla una serie de líneas diciendo...
Ese alumno curso en el 2015 y aprobo la asignatura
Ese alumno curso en el 2015 y aprobo la asignatura
Ese alumno curso en el 2015 y aprobo la asignatura
...

Por lo demás, y con las pequeñas modificaciones que te ha añadido Xvs, lo tienes bastante bien...

Yo el dni lo hubiera tomado como literal (texto) por si meten letra del nif, y hubiera controlado el Si/No del aprobado para evitar errores de introducción.
También hubiera mostrado los datos del alumno antes guardarlos en el diccionario.
Por último, el recorrido sobre el diccionario no lo hubiera hecho sobre sus valores, porque así no tienes acceso al número del dni en sí...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

crear una función que toma datos y los agrega a un diccionario

Publicado por CpA (33 intervenciones) el 14/06/2017 09:06:29
Mira, así te lo he completado yo... a ver si sacas algún truquillo que te pueda servir del código...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
def alumnosdic():
 
    dicc = {}
    print("Vamos a cargar los datos del alumno:")
    dni=input("Ingrese DNI: ")
    while dni!= "0":
        # Tomamos datos sólo si DNI no es nulo (retorno de carro sin texto)
        if dni:
            alumno=input("Nombre del alumno: ")
            apellido=input("Apellido del alumno: ")
            anodecursada=input("Ano de cursada: ")
            # Bucle para cerciorarnos que ha introducido SI o NO. Forzamos a mayúsculas.
            aprobado = "X"
            while not aprobado in ("SN"):
                aprobado=input("Ingrese condicion de aprobado (S/N): ").upper()
 
            # Bucle para cerciorarnos que ha introducido SI o NO. Forzamos a mayúsculas.
            correcto = "X"
            while not correcto in ("SN"):
                print("{} - {} {}, Año: {} => {}"
                      .format(dni,alumno,apellido,anodecursada,{"S":"APROBADO","N":"SUSPENSO"}[aprobado]))
                correcto=input("¿Son correctos estos datos? (S/N)").upper()
            if correcto == "S":
                dicc[dni]=[alumno,apellido,anodecursada,aprobado]
                print("La carga del alumno {} {} ha finalizado.".format(alumno,apellido))
            else:
                print("La carga del alumno actual ha sido anulada...")
 
        print("\n")
        print("Vamos a cargar los datos del siguiente alumno, en el caso de que ya halla finalizado de cargarlos a todos, ingrese 0.")
        dni = input("Ingrese DNI: ")
    return dicc
 
 
 
 
 
def dosmilquince(dicc):
    for valor in dicc:
        # Asignamos variables para mayor calidad visual. No repercute ni en memoria ni en velocidad de procesamiento.
        dni = valor
        alumno       = dicc[dni][0]
        apellido     = dicc[dni][1]
        anodecursada = dicc[dni][2]
        aprobado     = dicc[dni][3]
        if anodecursada=="2015" and aprobado=="S":
            print("{} - {} {}, Año: {} => {}"
                      .format(dni,alumno,apellido,anodecursada,{"S":"APROBADO","N":"SUSPENSO"}[aprobado]))
 
 
def main():
    dicc=alumnosdic()
    dosmilquince(dicc)
 
if __name__ == "__main__":
    main()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar