2017-04-23 252 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