Foros del Web » Programando para Internet » Python »

problema con FOR en codigo

Estas en el tema de problema con FOR en codigo en el foro de Python en Foros del Web. Buenas.. estoy teniendo un problema bastante estupido pero me tiene detenido el programa, ya he tratado todo lo que se me ha ocurrido y no ...
  #1 (permalink)  
Antiguo 02/05/2010, 15:57
AxL456
Invitado
 
Mensajes: n/a
Puntos:
problema con FOR en codigo

Buenas..

estoy teniendo un problema bastante estupido pero me tiene detenido el programa, ya he tratado todo lo que se me ha ocurrido y no logro corregirlo, por lo que quisiera que le den un vistazo al codigo a ver cual es el problema:

Código Python:
Ver original
  1. ###Factores de friccion en turbulencia total para los distintos diametros
  2. ###nominales de los accesorios
  3. #Variable = ((mm),(inch),(ft))
  4. ft_tabla = ((15.0, 0.5, 0.027),
  5.             (20.0, 0.75, 0.025),
  6.             (25.0, 1.0, 0.023),
  7.             (32.0, 1.25, 0.022),
  8.             (40.0, 1.5, 0.021),
  9.             (50.0, 2.0, 0.019),
  10.             (65.0, 2.5, 0.018),
  11.             (80.0, 3.0, 0.018),
  12.             (100.0, 4.0, 0.017),
  13.             (125.0, 5.0, 0.016),
  14.             (150.0, 6.0, 0.015),
  15.             (200.0, 8.0, 0.014),
  16.             (250.0, 10.0, 0.014),
  17.             (300.0, 12.0, 0.013),
  18.             (400.0, 16.0, 0.013),
  19.             (450.0, 18.0, 0.012),
  20.             (600.0, 24.0, 0.012))
  21.            
  22. def FtMilimetros(D):
  23.     """Funcion para obtener el valor del factor de turbulencia total a partir
  24.        del diametro nominal en milimetros del accesorio
  25.        Xmm = diametro nominal (mm)
  26.        """
  27. ##    print "1"
  28.     for x in ft_tabla:
  29. ##        print "2"
  30.         if x[0] >= D:
  31. ##            print "3"
  32. ##            print "4"
  33.             ft = x[-1]
  34. ##            print "5"
  35.             return ft
  36.         else:
  37. ##            print "6"
  38.             return None
  39.  
  40. da = 150 #Diametro de valvula
  41. ft = FtMilimetros(da)
  42.  
  43. print ft

El programa basicamente lo que hace es iterar a traves de "ft_tabla" comparando el primer valor de cada tupla dentro de "ft_tabla" con un valor predeterminado (da) y si el valor es mayor o igual que "da" entonces asigna el ultimo valor de dicha tupla a la variable ft...

hasta aqui todo bien, el problema es que a pesar que de existen valores mayores a "da" (150) el programa no asigna ningun valor a ft y ejecuta el bloque "else"..

si anulamos la parte del "else" entonces el codigo funciona correctamente:

Código Python:
Ver original
  1. ###Factores de friccion en turbulencia total para los distintos diametros
  2. ###nominales de los accesorios
  3. #Variable = ((mm),(inch),(ft))
  4. ft_tabla = ((15.0, 0.5, 0.027),
  5.             (20.0, 0.75, 0.025),
  6.             (25.0, 1.0, 0.023),
  7.             (32.0, 1.25, 0.022),
  8.             (40.0, 1.5, 0.021),
  9.             (50.0, 2.0, 0.019),
  10.             (65.0, 2.5, 0.018),
  11.             (80.0, 3.0, 0.018),
  12.             (100.0, 4.0, 0.017),
  13.             (125.0, 5.0, 0.016),
  14.             (150.0, 6.0, 0.015),
  15.             (200.0, 8.0, 0.014),
  16.             (250.0, 10.0, 0.014),
  17.             (300.0, 12.0, 0.013),
  18.             (400.0, 16.0, 0.013),
  19.             (450.0, 18.0, 0.012),
  20.             (600.0, 24.0, 0.012))
  21.            
  22. def FtMilimetros(D):
  23.     """Funcion para obtener el valor del factor de turbulencia total a partir
  24.        del diametro nominal en milimetros del accesorio
  25.        Xmm = diametro nominal (mm)
  26.        """
  27. ##    print "1"
  28.     for x in ft_tabla:
  29. ##        print "2"
  30.         if x[0] >= D:
  31. ##            print "3"
  32. ##            print "4"
  33.             ft = x[-1]
  34. ##            print "5"
  35.             return ft
  36. ##        else:
  37. ##            print "6"
  38. ##            return None
  39.  
  40. da = 150 #Diametro de valvula
  41. ft = FtMilimetros(da)
  42.  
  43. print ft

entonces no entiendo porque cuando el "else" esta descomentado, el programa no funciona correctamente :S
  #2 (permalink)  
Antiguo 02/05/2010, 17:19
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: problema con FOR en codigo

Bueno es por que ese for solo itera una vez.

Lo que hace tu programa es recorre la tabla agarra el primer valor y compara. Mayor igual regresa x[-1] de cualquier otra forma retorna None.

Cualquier función que termine sin retornar nada retorna None.
  #3 (permalink)  
Antiguo 02/05/2010, 18:01
AxL456
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con FOR en codigo

Ok el problema es entonces que al iterar la primera vez, encuentra un valor que no cumple el if por lo que entonces pasa al else y debido a que en el else estoy colocando return el def finaliza sin permitir otra iteracion..

en ese caso la solucion seria la siguiente:

Código Python:
Ver original
  1. def FtMilimetros(D):
  2.     """Funcion para obtener el valor del factor de turbulencia total a partir
  3.        del diametro nominal en milimetros del accesorio
  4.        Xmm = diametro nominal (mm)
  5.        """
  6. ##    print "1"
  7.     for x in ft_tabla:
  8.         if x[0] >= D:
  9. ##            print "2"
  10. ##            print "3"
  11.             fti = x[-1]
  12. ##            print "4"
  13.             return fti
  14.         else:
  15.             fti = None
  16.     return fti

Muchas gracias por la ayuda de verdad que necesitaba un par de ojos mas para ver ese pequeño gran problema

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 15:06.