2015-08-28 3 views
0

Je suis un débutant à Python et ont été récemment essayer de créer un calculateur d'IMC, mais je vais avoir des erreurs avec le code suivant:Python: raw_input et le type d'opérande non pris en charge (s)

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):') 

Chaque fois que j'essaie pour exécuter le code, je suis en mesure d'entrer le poids et la hauteur, mais je suis alors confronté à ce message d'erreur:

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' 

Je présente mes excuses pour cette question stupide et code monté erreur, mais je suis très nouveau à la programmation et apprécie tout type d'aide. :)

+1

choses que vous obtenez de «raw_input» sont toujours dans le type de chaîne convertissez-les en int en utilisant int() ' – The6thSense

+1

Notez que' weight.isdigit' ne fait référence qu'à la méthode, elle ne l'appelle pas *. –

+0

il ya beaucoup d'erreur dans votre programme il suffit de passer par la base de python puis essayez à nouveau et qu'est-ce que vous essayez d'accomplir ici 'si height == exit:' – The6thSense

Répondre

2

raw_input renvoie toujours un objet str. Vous devez convertir explicitement l'entrée en int. Vous pouvez faire

val = int(raw_input(...)) 

ou

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

Comme d'autres l'ont mentionné, il y a beaucoup d'erreurs dans votre code. En voici un:

if height == exit: 

Même problème avec la condition weight. Je vais juste faire remarquer que vous n'avez pas posé de questions à ce sujet, je vais vous laisser savoir quel est le problème :).

2

S'il vous plaît l'utiliser de cette façon

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

Vous devez jeter les entrées d'entrée int, car ils sont des chaînes.

Et vous n'avez plus à vérifier si elle est un chiffre,

encore, je vous suggère d'ajouter une autre condition comme:

if weight and height: 
    #Do stuff 

Si aucune entrée n'a été fournie.

EDIT:

/\ Si vous avez besoin décimaux les jeter à flotter

1

les numéros saisis doivent être convertis en flotter. il suffit de changer le bmi = float (poids)/(float (hauteur) ** 2) Vous êtes bon pour aller