【问题标题】:try, except and while loop in PythonPython中的try,except和while循环
【发布时间】:2017-04-23 14:40:40
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    for start:注意你声明变量 b 是一个接一个。这意味着第一次减速是多余的。 其次,不要使用break,而是使用elif而不是'if'。 第三,尝试后的前两行,什么都不做..

    【讨论】:

      【解决方案2】:

      从哪里开始?

      1. 唯一的除法发生在进入try 块之前,因此您的except ZeroDivisionError 永远不会被触发。
      2. except user_input_1 != int 计算结果为 except True,这是毫无意义的,永远不会被触发
      3. while 循环中不命中break 的唯一方法是,如果你抛出一个被捕获的异常(如果它没有被捕获,它将逃脱你的while 循环并退出你的程序)。由于获取用户输入的代码在while 循环之外,因此(如果可以捕获异常)没有区别,您会看到错误消息永远重复。

      您对 python 的理解似乎存在一些根本性的差距。我建议先填写那些;尝试仅实现一个所需的功能(例如,获取用户输入并在无效时显示适当的错误消息)并从那里构建。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我们不应该为人们做功课,而只是给他们指点。此外,在这种情况下,循环可能比递归更好。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 2021-12-13
        • 2016-04-06
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多