2017-04-23 170 views
0

我想爲學校做這個練習,但代碼將無法正常工作,恰恰它不執行if語句後計算BMI。此外,如果輸入不正確,現在檢查除了狀態。請告知代碼中需要更正的內容。謝謝!嘗試,除了和while循環在Python

user_input_1 = input('What is your weight') 
user_input_2 = input('What is your height') 
b = 'BMI' 
b = int(user_input_1)/(float(user_input_2)**2) 
while True: 
    try: 
    user_input_1 == int and user_input_1 > 0 
    user_input_2 == float and user_input_2 > 0 
    print(b) 
    if b in range(1, 19): 
     print('You are skinny as a rail') 
     break 
    if b in range(19, 26): 
     print('You are fit as a butcher\'s dog') 
     break 
    if b >= 25: 
     print('You are as plum as a partridge') 
     break 
    break 
    except ZeroDivisionError: 
    input('Enter your height in meters as a float') 
    except user_input_1 != int: 
    input('Please enter your weight in kg') 

回答

2

的開始:請注意,您接連聲明變量b行。這意味着第一次減速是多餘的。 秒,不要使用break,而是elif而不是'if'。 三,前兩行後嘗試,什麼都不做。

2

從哪裏開始?

  1. 唯一的分裂發生在進入try塊之前,所以你except ZeroDivisionError永遠不會觸發。
  2. except user_input_1 != int計算爲except True這是毫無意義的,永遠不會觸發
  3. 你不要在你的while循環創下break的唯一方法,就是如果你把那個被捕獲的異常(如果它沒有被捕獲,它的我會逃離你的while循環並退出你的程序)。由於獲取用戶輸入的代碼是while循環的以外的地方,因此會有(如果能夠捕捉到異常)沒有區別,並且您會看到錯誤消息只是一直重複。

你對python的理解似乎存在一些根本性的差距。我建議先填寫那些;嘗試和實現一個所需的功能(例如,輸入用戶並顯示合適的錯誤消息,如果它是無效的),並從那裏建立。

0

有很多的問題,你的代碼SpoonMeiser已經提到:

  1. 唯一的分裂發生在進入try塊之前,所以你except ZeroDivisionError永遠不會觸發。
  2. except user_input_1 != int計算爲except True這是毫無意義的,永遠不會觸發
  3. 你不要在你的while循環創下break的唯一方法,就是如果你把那個被捕獲的異常(如果它沒有被捕獲,它的請跳過while循環並退出程序)。由於該 獲取用戶輸入的代碼是while循環,會有(如果 例外能否被抓)沒有區別的,你會看到 錯誤信息只是在重複,直到永遠。

其他錯誤是:

  1. 使用的b in range(x, y):這些僅包括在該時間間隔的整數值的值。你還可以用它進行測試:

    • print(2.1 in range(0,10)) # Prints: False
    • print(2 in range(0,10)) # Prints: True
  2. 您應該使用= float(input(...))從一開始:如果你總是會使用用戶輸入作爲float只是做它曾經。

  3. b = 'BMI'


這裏是生成的代碼:

def foo(): 
    try: 
     user_input_1 = float(input('What is your weight? ')) 
     user_input_2 = float(input('What is your height? ')) 
     if all(x>0 for x in [user_input_1,user_input_2]): 
      b = user_input_1/user_input_2**2 
      print(b) 
      if 0 > b > 26: 
       print('You are skinny as a rail') 
      elif 19 > b > 26: 
       print("You are fit as a butcher's dog") 
      else: 
       print('You are as plum as a partridge') 
     else: raise ValueError 
    except ValueError: 
     print('Enter your height in meters as a float') 
     foo() 
+0

我們不應該做人民的功課他們,而是隻給指針。 此外,在這種情況下循環可能比遞歸更好。 – SpoonMeiser