2015-08-28 3 views
0

Я новичок в Python и в последнее время попытки создать калькулятор ИМТ, но у меня возникают ошибки со следующим кодом:Python: raw_input и неподдерживаемый тип операнда (ов)

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: 
       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 = raw_input('Please state a valid number (m):') 


    else: 
     weight = raw_input('Please state a valid number (kg):') 

Всякий раз, когда я пытаюсь для выполнения кода, я могу войти вес и высоту, но я тогда столкнулся с этим сообщением об ошибке:

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

Я извиняюсь за этот немой вопрос и ошибки охваченном кода, но я новичок в программирование и оцените любую помощь. :)

+1

вещи, которые вы получаете из 'raw_input', всегда в строковом типе, преобразуйте их в int, используя' int() ' – The6thSense

+1

Обратите внимание, что' weight.isdigit' ссылается только на метод, он фактически не вызывает * этот метод. –

+0

есть много ошибок в вашей программе, просто пройдите через основную часть python, затем повторите попытку и что вы пытаетесь выполнить здесь 'if height == exit:' – The6thSense

ответ

2

raw_input всегда возвращает объект str. Вам необходимо явно преобразовать ввод в int. Вы можете сделать

val = int(raw_input(...)) 

или

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

Как уже упоминалось, есть много ошибок в коде. Вот один:

if height == exit: 

Такая же проблема с weight состоянии. Я просто хочу указать, как вы не спрашивали об этом, поэтому я дам вам понять, в чем проблема :).

2

Пожалуйста, используйте этот способ

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() 

Вам нужно отбрасывать записи входных в целое, потому что они являются строками.

И вам больше не придется проверить, если это цифра,

Тем не менее, я предлагаю вам добавить еще одно условие, как:

if weight and height: 
    #Do stuff 

В случае не было представлено никаких записей.

EDIT:

/\ В случае, если вам нужно десятичные бросить их плавать

1

числа введенного должно быть преобразовано, чтобы плавать. просто измените bmi = float (weight)/(float (height) ** 2) Вы должны пойти

Смежные вопросы