2012-04-20 99 views
1

我寫了這個簡單的程序來計算一個人的BMI。但我無法執行完成。下面是我的程序,類型錯誤:不支持的操作類型爲:「浮動」和「浮動」

程序

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" 

輸出

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值,所以有不需要寫兩遍相同的東西。

東西剩下要做的,可能是整個腳本包裝成函數:)

+0

嗯,我曾嘗試之前,上面的語法,但我想我沒有正確縮進的代碼。有沒有任何參考可以幫助我瞭解python的縮進細節。 – user1345589 2012-04-20 17:56:10

+0

好感謝反饋裏克:) – user1345589 2012-04-20 17:56:56

+0

@ user1345589:我不知道具體的來源,我不得不穀歌它喜歡你。無論如何,簡而言之,重點是每個區塊縮進四個空格。您可以按照官方的編碼風格指南:[PEP8(http://www.python.org/dev/peps/pep-0008/)。 – 2012-04-21 08:06:45

相關問題