Python - Ayuda con el return en una función? Python.

 
Vista:
sin imagen de perfil
Val: 20
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con el return en una función? Python.

Publicado por Manuel (12 intervenciones) el 12/06/2017 19:46:09
Hola comunidad, soy nuevo, tanto en el foro como en el estudio de la informática.
Actualmente estamos aprendiendo Python.
Resulta que practicando para un exámen que se aproxima, me encuentro con un problema al retornar una variable en una función. Dicha variable contiene un diccionario.

Partiendo de una actividad con el siguiente enunciado:
# Las docentes desean hacer un relevamiento de todos los alumnos que han
cursado la materia desde el año 2000 hasta la actualidad. Para tal fin desean:
a) Almacenar en un diccionario la siguiente información: DNI, Nombre, Apellido, Fecha en la que curso formato ddmmaaaa, Aprobado(si/no).

La carga de la información finaliza al ingresar un DNI igual a 0.

Resulta que la actividad la hice y me funciona, en excepción la parte en la que retorna el diccionario, por lo que al no ser retornado, las funciones de las siguientes actividades no pueden tomarlo como parámetro.

El ejercicio me quedó así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dicc2={}
def Cargaalumnos(dicc2):
    dni=(input("Ingrese DNI: "))
    while int(dni)!=0:
        nombre=input("Ingrese nombre del alumno: ")
        apellido=input("Ingrese apellido del alumno: ")
        fecha=input("Ingrese fecha de cursada del alumno, formato dd/mm/aaaaa: ")
        aprobo=input("Ingrese condición aprobado s/n ")
        dicc2[dni]=[nombre,apellido,fecha,aprobo]
        print("Este es el diccionario que ha creado: ",dicc2[dni])
        dni=(input("Inrese DNI: "))
 
#Si yo no reotrno el diccionario cargado, las demás funciones no podrán utilizarlo, lo leerán vacío.
 
    return dicc2

Cuando el bucle while finaliza, la devolución del programa es simplemente:

[ ]

Sin más, dos corchetes vacíos... He intentado colocando (dicc2) entre paréntesis, y no hay caso, el único modo de que me devuelva el diccionario, es colocando print(dicc2)
Pero esto no me sirve ya que las siguientes funciones que debo realizar trabajan con el diccionario.

Espero puedan ayudarme, saludos.
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
sin imagen de perfil

Ayuda con el return en una función? Python.

Publicado por CpA (33 intervenciones) el 12/06/2017 20:46:59
A ver. Lo primero es que estás definiendo el diccionario fuera del ámbito de la función.
Lo segundo es que, en tu código, no veo la llamada a la función, ni una variable donde recojas el resultado de la misma...
Tres, la función no tiene que recibir ningún parámetro, y si acaso, deberías recibirlo por referencia, pero no es necesario...

Adaptando tu mismo código, podría quedar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def Cargaalumnos():
    dicc2={}
    dni=(input("Ingrese DNI: "))
    while int(dni)!=0:
        nombre=input("Ingrese nombre del alumno: ")
        apellido=input("Ingrese apellido del alumno: ")
        fecha=input("Ingrese fecha de cursada del alumno, formato dd/mm/aaaaa: ")
        aprobo=input("Ingrese condición aprobado s/n ")
        dicc2[dni]=[nombre,apellido,fecha,aprobo]
        print("Este es el diccionario que ha creado: ",dicc2[dni])
        dni=(input("Inrese DNI: "))
    return dicc2
 
 
print("Vamos a comenzar a tomar los datos de los alumnos:")
alumnos = Cargaalumnos()
print("Ya tenemos todos los datos recopilados.")
print("Los datos son:")
print(alumnos)
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
sin imagen de perfil
Val: 20
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con el return en una función? Python.

Publicado por Manuel (12 intervenciones) el 12/06/2017 21:52:47
O sea que, el return no me imprime el diccionario con el que trabaja la función?
¿Y por qué otra función que trabaja con el diccionario, me tira un error diciéndome que la variable "dicc2" no existe?
¿Cómo debería hacer para trabajar en la siguiente función sobre el diccionario resultante de la ésta?
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
sin imagen de perfil

Ayuda con el return en una función? Python.

Publicado por CpA (33 intervenciones) el 13/06/2017 00:22:29
Las variables no son globales, sólo son válidas en el ámbito de cada función.
Si ahora en otra función quieres trabajar con los valores de esta, entonces la nueva función si deberá admitir parámetros...

Supongamos que hora quieres tener una función de "imprimir" la lista, de forma más bonita... podrías hacer lo siguiente:

1
2
3
4
5
6
print("Vamos a comenzar a tomar los datos de los alumnos:")
alumnos = {}
alumnos=Cargaalumnos()
print("Ya tenemos todos los datos recopilados.")
print("Ahora vamos a imprimirlos:")
imprime_alumnos(alumnos)

1
2
3
4
5
def imprime_alumnos(alumnos):
    for a in alumnos:
        print("Alumno con dni {}, nombre {}, apellidos {}, fecha {}\nAprobado => {}"
            .format(a,alumnos[a][0],alumnos[a][1],alumnos[a][2],alumnos[a][3]))
        print("=========================")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 20
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con el return en una función? Python.

Publicado por Manuel (12 intervenciones) el 13/06/2017 01:43:04
Muchísimas gracias por tomarte el tiempo de ayudarme, lo valoro muchísimo :)
Saludos.
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
sin imagen de perfil

Ayuda con el return en una función? Python.

Publicado por CpA (33 intervenciones) el 13/06/2017 18:12:29
De nada amigo Manuel. Encantado de poder ayudarte...
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