Python - Ayuda con una actividad de la universidad. 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 una actividad de la universidad. Python.

Publicado por Manuel (12 intervenciones) el 15/06/2017 19:20:49
Hola a todos, tengo dos problemas con un ejercicio de la universidad.

El enunciado dice:

7) Escribir un programa que almacene la información relacionada con pacientes: edad, sexo y si es
diabético. Además, se registra el DNI de cada uno. Utilizá un diccionario para registrar los datos provistos
en la tabla de más abajo. Se pide:
a) Informar cuántos pacientes hay registrados.
b) Informar todas las claves y todos los valores contenidos en el diccionario.
c) Indicar si los pacientes con DNI 14.972.142 y 6.409.217 sufren de diabetes.
d) Calcular la edad promedio de los pacientes con diabetes.

El problema que tengo es que, en el primer paso, cuando coloco mi while con mi break para que me solicite la entrada de todos los pacientes, el break no funciona. Intento con un while seguido de una condicion, e incluso con un while true seguido de un break en un if, y nunca se ejecuta el break, me sigue pidiendo datos sin cesar.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def pacientes():
    dni=input("Ingrese DNI del paciente: ")
    listapacientes={}
    while True:
        edad=input("Ingrese edad: ")
        sexo=input("Ingrese sexo: ")
        diabetes=input("Ingrese si tiene diabetes o no: ")
        listapacientes[dni]=[edad,sexo,diabetes]
        print(listapacientes)
        print("\n")
        print("Acaba de cargar al siguiente paciente: ",listapacientes)
        print("Siguiente paciente: ")
        print("Recuerde que si quiere finalizar el ingreso de pacientes, debe introducir un dni igual a 0.")
        print("\n")
        dni=input("Ingrese DNI del paciente: ")
        if dni==0:
            break
            return listapacientes


El segundo problema, simplemente es que no sé como hacer para sumar las edades que contiene el diccionario. Intento con un for pero me tira error, también intenté pasar los valores a una lista con la funcion list(), pero tampoco puedo sumar los valores con un for ya que me inserta todo en un solo elemento, no como elementos separados.

Tengo exámen en 3 horas. ¿Ayuda?
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 kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda con una actividad de la universidad. Python.

Publicado por kip (257 intervenciones) el 15/06/2017 19:32:59
Hola, el primer problema lo tienes porque estas evaluando un string con un entero y ademas el return no debe ir dentro del while, asi podria funcionarte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def pacientes():
    listapacientes={}
    while True:
        dni=int(input("Ingrese DNI del paciente: "))
        if dni==0:
            break
        edad=int(input("Ingrese edad: "))
        sexo=input("Ingrese sexo: ")
        diabetes=input("Ingrese si tiene diabetes o no: ")
        listapacientes[dni]=[edad,sexo,diabetes]
        print("Acaba de cargar al siguiente paciente: ",listapacientes)
        print("Siguiente paciente: ")
        print("Recuerde que si quiere finalizar el ingreso de pacientes, debe introducir un dni igual a 0.")
    return listapacientes

El otro problema de la suma se debe al mismo problema de tipos de datos, pero ya arriba si te fijas lo solucione transformandolo a un entero con int()lo que toma input().

Prueba y avisanos si tienes algun otro problema.
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 una actividad de la universidad. Python.

Publicado por Manuel (12 intervenciones) el 15/06/2017 19:56:06
El primer problema ya lo solucioné, era un error muy tonto por mi parte, el while no finalizaba con el primer 0 porque abajo llamaba dos veces a la función sin darme cuenta, una con pacientes(), y otra cuando igualaba una variable a pacientes() para luego poder usarla en las demás funciones.
De igual manera tu código me funcionó y lo del tipo de datos también lo arreglé.

El problema continúa en esta parte:

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
def cantpacientes(aa):
    print("Actiivdad de informar la cantidad de pacientes ingresados: \n")
    p=len(aa.keys())
    return p
    print("La cantidad de pacientes ingresados es: ",p)
 
def informardicc(aa):
    print("Actividad de informar el diccionario: \n")
    print(aa.items())
 
def diabeticos(aa):
    print("Actividad de informar los diabéticos: \n")
    for dn,di in aa.items():
        if di[2]=="Si" and int(dn)==14972142:
            print("El paciente con dni: ",dn," tiene diabetes.")
        if di[2]=="Si" and int(dn)==6409217:
            print("El paciente con dni: ",dn," tiene diabetes.")
 
def promedio(aa):
    print("Actividad de informar el promedio de edad: \n")
    cp=len(aa.keys())
    total=0
    for i in aa.values():
        total+=int(i[0])
 
    promed=(total/cp)
    return promed
    print("El promedio es: ",promed)
 
 
 
aa=pacientes()
cantpacientes(aa)
informardicc(aa)
diabeticos(aa)
promedio(aa)

Esas son las demás funciones, de las cuales sólo me funcionan Informar diabéticos, e informar diccionario.

¿Sabrías decirme por qué no me ejecuta los print? En la del promedio solo me retorna el promedio, pero no el print.
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
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda con una actividad de la universidad. Python.

Publicado por kip (257 intervenciones) el 15/06/2017 20:14:51
Eso pasa porque cuando llegas a return la funcion finaliza retornando los valores que hayas colocado, lo demas no se ejecutara, algo similar a break o continue dentro de una iteracion, deberias colocar el print antes de return.

Que error tienes en las otras funciones ?
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 una actividad de la universidad. Python.

Publicado por Manuel (12 intervenciones) el 15/06/2017 20:39:51
Creo que nada más, puede que tenga errores de gramática pero eso no lo tienen mucho en cuenta en la universidad ya que se va mejorando con la experiencia. Muchas gracias por la ayuda!
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