Foros del Web » Programando para Internet » Python »

Problema con basico if elif else

Estas en el tema de Problema con basico if elif else en el foro de Python en Foros del Web. Buenos dias Tengo el siguiente código, es un método iterativo: Código: import math import numpy h = 0.5 end_time = 80. num_steps = int(end_time / ...
  #1 (permalink)  
Antiguo 03/04/2014, 01:46
 
Fecha de Ingreso: junio-2013
Mensajes: 9
Antigüedad: 6 años, 4 meses
Puntos: 0
Problema con basico if elif else

Buenos dias

Tengo el siguiente código, es un método iterativo:

Código:
import math
import numpy

h = 0.5
end_time = 80. 
num_steps = int(end_time / h)
times = h * numpy.array(range(num_steps + 1))
transmission_coeff = 5e-5

def sir():
       
    s = numpy.zeros(num_steps + 1)
    i = numpy.zeros(num_steps + 1)
    r = numpy.zeros(num_steps + 1)

    s[0] = 10000 -10
    i[0] = 10
    r[0] = 0

    for step in range(num_steps):
        
        s2i = h * transmission_coeff * s[step] * i[step]
        i2r = h / 5. * i[step]
        r2s = h / 2.*r[step] 
        s[step + 1] = s[step] + r2s - s2i
        i[step + 1] = i[step] - i2r + s2i  
        r[step + 1] = r[step] + i2r - r2s

    return s, i, r
s, i, r = sir()
El problema que tengo es que quiero que el transmission_coeff me varie de acuerdo a el dato que me arroja el s[step] asi que

Código:
if s[step]>9500:
            transmission_coeff=2e-5
        elif s[step]<=9500:
            transmission_coeff=2e-4
        elif s[step]<=4500
            transmission_coeff=2e-5
        else:
             transmission_coeff=2e-2
mi problema es que no se donde ponerlo porque si lo coloco al inicio donde declaro el transmission_coeff no puede jalar el dato de s[step] y si lo pongo abajo con el for in me genera un problema con la declaracion inicial. Pense en introducirlo como funcion al inicio, pero tampoco me sale. alguien me puede dar luz sin enviarme a un manual, ya que estoy un tanto extraviado.

Agradezco de antemano
Saludos
  #2 (permalink)  
Antiguo 03/04/2014, 02:23
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con basico if elif else

Hola santiagoyepes, aquí probablemente tienes tu problema (creo que se te pasó por alto):

Código:
if s[step]>9500:
            transmission_coeff=2e-5
        elif s[step]<=9500:
            transmission_coeff=2e-4
        elif s[step]<=4500:
            transmission_coeff=2e-5
        else:
             transmission_coeff=2e-2
los : que están en rojo son los que te faltaba, eso es problema de identación, creo que se te pasó por alto eso!!

¡¡Espero que sea ese el problema!!
  #3 (permalink)  
Antiguo 03/04/2014, 08:52
 
Fecha de Ingreso: junio-2013
Mensajes: 9
Antigüedad: 6 años, 4 meses
Puntos: 0
Respuesta: Problema con basico if elif else

De verdad muchas gracias por tomarte el tiempo de revisar el codigo, en efecto faltaban los puntos, pero me esta enviarndo el siguiente mensaje de error: runtimewarning: in value encounted in double_scalars s[step+1]=s[step]+r2s-s2i

La forma mas logica que encontre fue colocarlo asi

Código:
for step in range(num_steps):
        if s[step]>9500:
            transmission_coeff=2e-5
        elif s[step]<=9500:
            transmission_coeff=2e-4
        elif s[step]<=4500:
            transmission_coeff=2e-5
        else:
             transmission_coeff=2e-2
        
        s2i = h * transmission_coeff * s[step] * i[step]
        i2r = h / 5. * i[step]
        r2s = h / 2.*r[step] 
        s[step + 1] = s[step] + r2s - s2i
        i[step + 1] = i[step] - i2r + s2i  
        r[step + 1] = r[step] + i2r - r2s
pero igual me tira el mismo mensaje de error que creo choca con el transmission_coeff que tengo que poner al inicio del codigo para que me jale algun valor el metodo iterativo.

No se si requiera que defina el bloque de los condicionales como un def coeff():?

Mil gracias!
  #4 (permalink)  
Antiguo 03/04/2014, 10:12
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 6 años, 6 meses
Puntos: 31
Respuesta: Problema con basico if elif else

Ese bloque condicional está mal, tal como lo tienes sólo el else y el primer elif son los que funcionan, porque ambas condiciones abarcan todos los valores de tu variable. Por ejemplo 4000 va a ser siempre menor de 9500.
  #5 (permalink)  
Antiguo 03/04/2014, 12:59
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con basico if elif else

Aquí te dejo un ejemplo y explicación del error de tu código:

Código Python:
Ver original
  1. NUMS = ["1000", "2000", "4000", "4500", "9500", "10000"]
  2.  
  3. for Num in NUMS:
  4.     Num = int(Num)
  5.     if Num > 9500:
  6.         print "Numero es mayor que 9500"
  7.     elif Num <= 9500:
  8.         print "Numero es menor o igual que 9500"
  9.     elif Num <= 4500:
  10.         print "ERROR: El condicional elif nunca podra llegar aqui"
  11.     else:
  12.         print "ERROR: no se puede cumplir el else porque el if y el primer elif estan abarcando todo el valor posible para que no se cumpla jamas el else"
  13.  
  14.     # Tampoco se cumplira el segundo elif por la misma razon
  15.  
  16. raw_input()

como se puede observar en la lista, tenemos valores menores que 9500 (1000, 2000, 4000, 4500) y mayores que 9500 (10000), el resultado de ese ejemplo es este:

Numero es menor o igual que 9500
Numero es menor o igual que 9500
Numero es menor o igual que 9500
Numero es menor o igual que 9500
Numero es menor o igual que 9500
Numero es mayor que 9500


Y bueno como veras, no se cumplió ni el segundo elif ni tampoco el else. Prueba a mejorar el código y luego nos comentas!!

Suerte!!!

Etiquetas: basico, gui
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 08:39.