2012-04-20 11 views
1

私はこの単純なプログラムを書いて自分のBMIを計算しました。しかし、私はそれを完了することができません。以下は、私のプログラムがあり、TypeError:&: 'float'と 'float'のサポートされていないオペランドタイプ

PROGRAM

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: 
         print "Your are underweight." 
     if bmi1 > 18.5 & bmi1 < 24.9: 
            print "Your weight is normal." 
     if bmi1 > 25 & bmi1 < 29.9: 
            print "Your are overweight"    
     if 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 bmi2<= 18.5: 
         print "Your are underweight." 
      if bmi2>18.5 & bmi2<24.9: 
            print "Your weight is normal." 
      if bmi2>25 & bmi2<29.9: 
           print "Your are overweight"   
      if bmi2>=30: 
        print "Your are obese" 

OUTPUT私が間違っているつもりです

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 "<stdin>", line 1, in <module> 
    File "bmi.py", line 11, in <module> 
    if bmi1 > 18.5 & bmi1 < 24.9: 
TypeError: unsupported operand type(s) for &: 'float' and 'float' 

?誰でも私に知らせてください..

ありがとう:)。

答えて

8

&bitwise operatorです。あなたはブール値andを探していたと思います。

しかし、Pythonはまた、次の構文をサポートしていることに気づく:

if 18.5 < bmi1 < 24.9: 
    # ... 

インデントとtrobledているように見えたので、これはあなたのスクリプトは次のようになります方法です:

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" 

ありますされていますいくつかのわずかな改善:

  • 明示的な変換(Pythonの3にinput機能がraw_inputのように振る舞うとPython 2 inputのような何もないことから、そのようなあなたの入力を書くための良い習慣かもしれません)
  • 本当に変わることはbmi値であり、そうあります同じことを2回書く必要はありません。

何かがまあ、私は前に上記の構文をしようとしたが、私は私が正しくコードをインデントしていなかったと思い関数にスクリプト全体をラップされる可能性があります:)

+0

、やって残しました。 Pythonのインデントの詳細について私を助ける参考資料はありますか? – user1345589

+0

フィードバックRik :)ありがとうありがとう – user1345589

+0

@ user1345589:私は特定のソースを認識していない、私はあなたのようにGoogleにする必要があります。とにかく、簡単に言えば、ポイントはブロックごとに4つのスペースをインデントすることです。公式のコーディングスタイルガイド[PEP8](http://www.python.org/dev/peps/pep-0008/)に従うことができます。 –

関連する問題