Foros del Web » Programando para Internet » Python »

Sentencia

Estas en el tema de Sentencia en el foro de Python en Foros del Web. hola nuevamente... tengo un problemilla con un codigo... print ("-- Riesgo cardiovascular --") m=float(input("Ingrese su peso (Ej: 88.0):")) a=float(input("Ingrese su estatura ( Ej: 1.70) (cm):")) ...
  #1 (permalink)  
Antiguo 23/04/2014, 05:27
 
Fecha de Ingreso: abril-2014
Mensajes: 4
Antigüedad: 10 años
Puntos: 0
Exclamación Sentencia

hola nuevamente... tengo un problemilla con un codigo...

print ("-- Riesgo cardiovascular --")

m=float(input("Ingrese su peso (Ej: 88.0):"))
a=float(input("Ingrese su estatura ( Ej: 1.70) (cm):"))
imc=m/a**2
print("Su IMC (masa corporal) es:", imc)
if(imc<18.5):
print("Usted tiene bajo riesgo de enfermedades cardiovasculares")
if(imc>=18.5 and imc<=24.9):
print("Usted esta en el promedio de riesgo de enfermedades cardiovasculares")
if(imc>=25 and imc<=29.9):
print("Usted tiene un risgo levemente aumentado de enfermedades cardiovasculares")
if(imc>=30):
print("Usted tiene un riesgo aumentado de enfermedades cardiovasculares")


como bien menciono soy nuevo en python y quiero agregarle una sentencia que me diga que los dígitos puesto es incorrecto, ingrese dígito nuevamente.


osea, que en caso que el dígito ingresado no sea correcto, este reinicie el programa automáticamente.
ahora si bien la configuración cumple con lo que quiero, quiero que en caso de que no se digite el el peso y la estatura con un punto entre el dígito este me marce error y mande a reintentar la operación...

espero me puedan ayudar, gracias...
  #2 (permalink)  
Antiguo 23/04/2014, 11:30
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Sentencia

Tu programa es para consola ? web ? aplicacion de escritorio ?

La respuesta depende del tipo de programa que estas escribiendo
__________________
Salu2!
  #3 (permalink)  
Antiguo 23/04/2014, 11:59
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Sentencia

Italico, mira el código.
__________________
Grupo Telegram Docker en Español
  #4 (permalink)  
Antiguo 23/04/2014, 12:45
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Sentencia

Cita:
Iniciado por Carlangueitor Ver Mensaje
Italico, mira el código.
Que debo mirar especificamente ? los print() pueden sacar HTML y de hecho el que no haya marcas no significa que no sea "HTML", eso podria ademas estar embebido dentro de <HTML><BODY> .. </BODY></HTML>
__________________
Salu2!
  #5 (permalink)  
Antiguo 23/04/2014, 12:46
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Sentencia

input

Y eso de sacar los print por HTML, es algo que solo harías si haces Webs como si vivieses en el siglo pasado.

Saludos
__________________
Grupo Telegram Docker en Español
  #6 (permalink)  
Antiguo 23/04/2014, 12:47
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Sentencia

Cita:
Iniciado por Carlangueitor Ver Mensaje
Italico, mira el código.
Que vaina... no puedo acostumbrarme a que en Python la funcion print() no es de caracter "general" como en PHP por ejemplo donde la salida puede ser al navegador o a la consola segun de donde sea la invocacion del programa

Cita:
Iniciado por Carlangueitor Ver Mensaje
input

Y eso de sacar los print por HTML, es algo que solo harías si haces Webs como si vivieses en el siglo pasado.
Si.......cierto! es que aun uso PHP :P
__________________
Salu2!
  #7 (permalink)  
Antiguo 23/04/2014, 12:49
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Sentencia

Si, esa es una de las malas costumbres que se quedan los que han programado en PHP. Que pena PHP.

Saludos
__________________
Grupo Telegram Docker en Español
  #8 (permalink)  
Antiguo 23/04/2014, 12:51
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Sentencia

OFFTOPIC:

Tambien se me paso lo del input() ... ojala el HIGHLIGHT fuera automatico cuando no se coloca en ningun lado y se ve que hay mas de 1 linea de codigo

Stackflow... no deja colocar codigo sin identar... te obliga a editar
__________________
Salu2!
  #9 (permalink)  
Antiguo 23/04/2014, 14:14
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 1 mes
Puntos: 18
Respuesta: Sentencia

@enfernando, una forma de hacerlo en pseudo código:


Código Python:
Ver original
  1. def get_data():
  2.     '''obten datos'''
  3.     . . .
  4.  
  5.     return (m, a)
  6.  
  7. def calcular_imc(m, a):
  8.    ''' haz los calculos '''
  9.     . . .
  10.  
  11.     return 'Su IMC es x...'
  12.  
  13. def main():
  14.    '''comprueba los datos, si son validos lanza la funcion calcular_imc
  15.   si no vuelve a lanzar la funcion main'''
  16.  
  17.     m, a = get_data()
  18.     lista_datos_validos = [...]
  19.     if m in lista_datos_validos:
  20.         print calcular_imc(m, a)
  21.     else:
  22.         print 'intenta de nuevo'
  23.         main()
  24.  
  25. main()

Saludos
  #10 (permalink)  
Antiguo 23/04/2014, 14:30
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Sentencia

Soy nuevo en Python.... pero llamar a main() desde main() no es recursivo como si fuera en otro lado ? yo lo haria con un while(..)

Cita:
Iniciado por sukoy Ver Mensaje
def main():
'''comprueba los datos, si son validos lanza la funcion calcular_imc
si no vuelve a lanzar la funcion main'''

m, a = get_data()
lista_datos_validos = [...]
if m in lista_datos_validos:
print calcular_imc(m, a)
else:
print 'intenta de nuevo'
main()

main()[/HIGHLIGHT]
Por otro lado las funciones no deberian devolver un texto sino ser lo mas generales posibles y devolver solo lo que calculan y mas si se llaman calcular_algo()


def calcular_imc(m, a):
''' haz los calculos '''
. . .

return 'Su IMC es x...'


deberia ser.:


def calcular_imc(m, a):
''' haz los calculos '''
. . .

return imc


y en main() redactar el mesaje al usuario
__________________
Salu2!
  #11 (permalink)  
Antiguo 24/04/2014, 03:48
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 1 mes
Puntos: 18
Respuesta: Sentencia

Cita:
Soy nuevo en Python.... pero llamar a main() desde main() no es recursivo como si fuera en otro lado ? yo lo haria con un while(..)
Sí es recursivo, me gusta asi. Tú hazlo como quieras.

Cita:
Por otro lado las funciones no deberian devolver un texto sino ser lo mas generales posibles y devolver solo lo que calculan y mas si se llaman calcular_algo()
Las funciones deben hacer lo que el programador quiera que hagan, si no te gusta el nombre lo puedes cambiar ;) No problem.
  #12 (permalink)  
Antiguo 24/04/2014, 10:50
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Sentencia

Cita:
Iniciado por sukoy Ver Mensaje
Las funciones deben hacer lo que el programador quiera que hagan, si no te gusta el nombre lo puedes cambiar ;) No problem.
Creo que a lo que se refiere a que es una buena práctica por cuestiones de reusabilidad, testing, etc. No por gustos.


Saludos
__________________
Grupo Telegram Docker en Español
  #13 (permalink)  
Antiguo 24/04/2014, 11:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 1 mes
Puntos: 18
Respuesta: Sentencia

Si Carlangueitor ya lo habia entendido. ;)

Lo que queria transmitir al usuario que pidió ayuda es la idea de una función para recojer los datos otra para los calculos y otra para controlar el proceso sin entrar en más complicaciones. Creo que le seria más fácil de entender por el momento.

Saludos.
  #14 (permalink)  
Antiguo 24/04/2014, 11:50
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Sentencia

Creo que también es bueno iniciar con buenas prácticas :)
__________________
Grupo Telegram Docker en Español
  #15 (permalink)  
Antiguo 24/04/2014, 14:08
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sentencia

Simplemente agregar que hay que tener cuidado con las recursiones en Python, las recursiones no son lo fuerte de Python.
Porque Python tiene un limitador de llamadas cuando se invoca muchas veces una función, si la invocación sobrepasa el límite, producirá un error y el programa se cerrará a la fuerza sin poder comprender porque pasó eso.
En ese programa no será importante eso ya que las llamadas son muy pocas, pero en programas más grandes que se necesiten más llamadas en menos tiempo, podría producir un fallo.

Etiquetas: programa, sentencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:52.