Python: raw_input y tipo (s) de operandos no admitidos

Soy un novato en Python y recientemente he intentado crear una calculadora de IMC, pero tengo errores con el siguiente código:

def calculator(): weight = raw_input('Please enter your weight (kg):') if weight.isdigit and weight > 0: height = raw_input('Please enter your height (m):') if height.isdigit and height > 0: bmi = (weight) / (height ** 2) print "Your BMI is", bmi if bmi = 18.5 and bmi = 25 and bmi = 30: print 'You are obese.' else: height = raw_input('Please state a valid number (m):') else: weight = raw_input('Please state a valid number (kg):') 

Cuando bash ejecutar el código, puedo ingresar peso y altura, pero luego me enfrento a este mensaje de error:

 Traceback (most recent call last): File "*location*", line 40, in  calculator() File "*location*", line 15, in calculator bmi = (weight) / (height ** 2) TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int' 

Me disculpo por esta pregunta tonta y el código cargado de errores, pero soy muy nuevo en progtwigción y aprecio cualquier tipo de ayuda. 🙂

raw_input siempre devuelve un objeto str . Necesita convertir explícitamente la entrada a un int . Usted puede hacer

 val = int(raw_input(...)) 

o

 val = raw_input(...) val = int(val) 

Como han mencionado otros, hay muchos errores en su código. Aqui hay uno:

 if height == exit: 

Mismo problema con weight condición de weight . Solo voy a señalar que no preguntaste sobre esto en cuestión, así que te haré saber cuál es el problema :).

Por favor utilízalo de esta manera

 def calculator(): weight = int(raw_input('Please enter your weight (kg):')) if weight >0 and weight > 0: height = int(raw_input('Please enter your height (m):')) if height >0 and height > 0: bmi = (weight) / (height ** 2) print "Your BMI is", bmi if bmi < 18.5: print 'You are underweight.' if bmi >= 18.5 and bmi < 25: print 'Your BMI is normal.' if bmi >= 25 and bmi < 30: print 'You are overweight.' if bmi >= 30: print 'You are obese.' else: height = int(raw_input('Please state a valid number (m):')) if height == exit: exit() else: weight = int(raw_input('Please state a valid number (kg):')) if weight == exit: exit() 

Es necesario convertir las entradas de entrada en int porque son cadenas.

Y ya no tienes que comprobar si es un dígito,

Aún así, te sugiero que agregues otra condición como:

 if weight and height: #Do stuff 

En caso de que no se proporcionara ninguna entrada.

EDITAR:

/! \ En caso de que necesites decimales, úsalos para flotar

Los números ingresados ​​deben convertirse a flotar. simplemente cambia bmi = float (peso) / (float (altura) ** 2) Estás listo para comenzar