Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] ejercicio dar una medalla segun puntacion de participante.

Estas en el tema de ejercicio dar una medalla segun puntacion de participante. en el foro de Python en Foros del Web. Hola!! Haber si me podéis echar un pequeño cable con esto @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original #Definir una función para determinar el nivel alcanzado ...
  #1 (permalink)  
Antiguo 28/01/2013, 18:51
 
Fecha de Ingreso: julio-2003
Mensajes: 243
Antigüedad: 21 años, 4 meses
Puntos: 11
ejercicio dar una medalla segun puntacion de participante.

Hola!!

Haber si me podéis echar un pequeño cable con esto

Código Python:
Ver original
  1. #Definir una función para determinar el nivel alcanzado por el participante
  2. #toma un examen de aptitud física.
  3. #El estándar se determina sobre la base de las puntuaciones individuales y un total de 3 pruebas.
  4.  
  5. #Gold: Minimo de 4 puntos por cada prueba, y min. total de 13 puntos
  6. #Silver: Minimo de 3 puntos por cada prueba, y min. total de 10 puntos
  7. #Pass: Minimo de 2 puntos por cada prueba, y min. total de 7 puntos
  8. #Fail: Menos de 2 puntos en cualquier prueba o un total de <7
  9.  
  10. def Fitness(a, b, c):
  11.     if a and b and c >3 and a+b+c>12:
  12.             return ("Gold")
  13.            
  14.     elif a and b and c>2 and a+b+c>10:
  15.             return ("Silver")
  16.  
  17.     elif a and b and c>1 and a+b+c>7:
  18.             return ("Pass")
  19.          
  20.     else:
  21.         return ("Fail")



Los resultados que me tiene que dar el ejercicio son:

>>> Fitness(4,5,4)
'Gold'
>>> Fitness(4,4,4)
'Silver'
>>> Fitness(1,5,5)
'Fail'
>>> Fitness(2,2,5)
'Pass'


pero en el Fitness(1,5,5) me da Silver y tendria que dar "Fail" ¿porque pasa esto si en la condicional de silver puse que a,a y c tenia que ser mayor a 2, se que sera alguna tontería pero no lo logro

Gracias!!!
  #2 (permalink)  
Antiguo 28/01/2013, 19:15
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: ejercicio dar una medalla segun puntacion de participante.

El problema es como estás comparando:

Código Python:
Ver original
  1. # Esta forma es incorrecta:
  2. a and b > 2

Eso significa: a es verdadero y b es mayor que dos.

Tomando eso en cuenta solo es cuestión de corregir tus condicionales a algo similar:

Código Python:
Ver original
  1. a > 3 and b >3

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 28/01/2013, 19:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ejercicio dar una medalla segun puntacion de participante.

El problema esta en la condición de tu if.

Código Python:
Ver original
  1. if a and b and c >3:

La razón es que no hace lo que tu piensas que hace. Que seria: "Si a y b y c mayor a tres.", bueno pues eso no hace.

Lo que realmente hace es:
Si a es verdadero y b es verdadero y c es mayor a tres entonces ...

¿En python que es verdadero?
Esto depende del tipo de dato que estés usando. Por ejemplo para un entero si es 0 es falso y para cualquier otro valor es verdadero. Para una lista, si esta vacía es falsa y si tiene algo es verdadera. Lo mismo para las cadenas, tuplas y diccionarios.

Ejemplos:
Código Python:
Ver original
  1. a = 10
  2. print bool(a) # True
  3. a = 0
  4. print bool(a) # False
  5. a = 1
  6. print bool(a) # True
  7. a = -1
  8. print bool(a) # True

Si quieres verificar que a, b y c sean mayores a tres lo puedes hacer explicitamente.

Código Python:
Ver original
  1. a > 3 and b > 3 and c > 3

Puedes mejorar esto si lees un poco mejor: Minimo de 4 puntos por cada prueba
Código Python:
Ver original
  1. min(a, b, c) > 3
Con un poco de lógica es fácil hacer la siguiente deducción:
Si el mínimo de (a, b, c) > 3 entonces a > 3, b > 3 y c > 3
  #4 (permalink)  
Antiguo 29/01/2013, 14:01
 
Fecha de Ingreso: julio-2003
Mensajes: 243
Antigüedad: 21 años, 4 meses
Puntos: 11
Respuesta: ejercicio dar una medalla segun puntacion de participante.

Muchas Gracias a los dos por la gran explicación

lo hice así:

Código Python:
Ver original
  1. def Fitness(a, b, c):
  2.     if a>=4 and b>=4 and c>=4 and a+b+c>=13:
  3.             return ("Gold")
  4.            
  5.     elif a>=3 and b>=3 and c>=3 and a+b+c>=10:
  6.             return ("Silver")
  7.  
  8.     elif a>=2 and b>=2 and c>=2 and a+b+c>=7:
  9.             return ("Pass")
  10.          
  11.     else:
  12.         return ("Fail")

seguramente se pueda hacer de maneras mejor como dices razpeitia pero mis conocimientos aun son muy limitados jeje

Saludos

Etiquetas: Ninguno
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 10:42.