TypeError: tipo (s) de operando no admitidos para &: ‘float’ y ‘float’

Escribí este sencillo progtwig para calcular el IMC de uno. Pero no puedo ejecutarlo completo. A continuación se muestra mi progtwig,

PROGRAMA

h = input("Please Enter your height in meters:") q = raw_input("Do you want to enter your weight in kg or lbs?") if q=="kg": w1 = input("Please Enter your weight in kgs:") bmi1 = w1/(h*h) print "Your BMI is", bmi1 if bmi1  18.5 & bmi1  25 & bmi1 = 30: print "Your are obese" if q=="lbs": w2 = input("Please Enter your weightin lbs:") bmi2 = w2/((h*h)*(39.37*39.37)*703) print "Your BMI is:", bmi2 if bmi218.5 & bmi225 & bmi2=30: print "Your are obese" 

SALIDA

 Please Enter your height in meters:1.52 Do you want to enter your weight in kg or lbs?kg Please Enter your weight in kgs:51 Your BMI is 22.074099723 Traceback (most recent call last): File "", line 1, in  File "bmi.py", line 11, in  if bmi1 > 18.5 & bmi1 < 24.9: TypeError: unsupported operand type(s) for &: 'float' and 'float' 

¿A dónde me voy mal? Alguien solo házmelo saber ..

Gracias :).

& es un operador bit a bit , creo que estabas buscando el booleano and .

Pero note que Python también soporta la siguiente syntax:

 if 18.5 < bmi1 < 24.9: # ... 

Como parece que te ha preocupado la sangría, así es como se vería tu script:

 h = raw_input("Please enter your height in meters: ") h = float(h) w_unit = raw_input("Do you want to enter your weight in kg or lbs? ") w = raw_input("Please enter your weight in {}: ".format(w_unit)) w = int(w) if w_unit == "kg": bmi = w / (h*h) elif w_unit == "lbs": bmi = w / ((h*h) * (39.37 * 39.37) * 703) print "Your BMI is {:.2f}".format(bmi) if bmi <= 18.5: print "Your are underweight." elif 18.5 < bmi <= 25: print "Your weight is normal." elif 25 < bmi < 30: print "Your are overweight" elif bmi >= 30: print "Your are obese" 

Hay un par de mejoras leves:

  • La conversión explícita (ya que en Python 3 la función de input comporta como raw_input y no hay nada como la input Python 2, podría ser un buen hábito escribir tu entrada de esa manera)
  • Lo que realmente cambia es el valor bmi , por lo que no es necesario escribir dos veces lo mismo.

Algo que queda por hacer, podría ser envolver todo el script en funciones 🙂