在Python中尝试,除了和while循环

时间:2017-04-23 14:40:40

标签: python python-2.7 while-loop try-except

我正在尝试为学校做这个练习,但代码不起作用,在计算BMI之后,恰好它不会执行if语句。此外,如果输入不正确,则现在检查除外的状态。请告知代码中要更正的内容。谢谢!

SELECT COALESCE(null, 0)

3 个答案:

答案 0 :(得分:2)

开始:请注意,您将变量b行声明为另一个。这意味着第一次减速是多余的。 第二,不要使用休息,但是elif代替' if'。 第三,尝试后的前两行,什么都不做..

答案 1 :(得分:2)

从哪里开始?

  1. 唯一的分组是在进入try区块之前进行的,因此您的except ZeroDivisionError永远不会被触发。
  2. except user_input_1 != int评估为except True,这是毫无意义的,永远不会被触发
  3. break循环中没有点击while的唯一方法是,如果你抛出一个被捕获的异常(如果它没有被捕获,它将逃脱你的while }循环并退出程序)。由于获取用户输入的代码是while循环的外部,因此(如果异常可能被捕获)没有区别,您会看到错误消息只是永远重复
  4. 你对python的理解似乎存在一些根本性的差距。我建议先填写这些;尝试并实现一个所需的功能(例如,获取用户输入并显示适当的错误消息,如果它无效)并从那里构建。

答案 2 :(得分:0)

SpoonMeiser已经提到过您的代码存在很多问题:

  
      
  1. 唯一的分组是在进入try区块之前进行的,因此您的except ZeroDivisionError永远不会被触发。
  2.   
  3. except user_input_1 != int评估为except True,这是毫无意义的,永远不会被触发
  4.   
  5. 你在break循环中点击while的唯一方法就是如果你抛出一个被抓住的异常(如果它没有被捕获,它就是&#39} ;二   逃避while循环并退出程序)。既然代码那个   得到用户输入是while循环的,会有(如果   例外可能被捕获)没有区别,你会看到   错误消息只是永远重复。
  6.   

其他错误包括:

  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只需执行一次。< / p>

  3. b = 'BMI'

  4. 以下是生成的代码:

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