我正在尝试为学校做这个练习,但代码不起作用,在计算BMI之后,恰好它不会执行if语句。此外,如果输入不正确,则现在检查除外的状态。请告知代码中要更正的内容。谢谢!
SELECT COALESCE(null, 0)
答案 0 :(得分:2)
开始:请注意,您将变量b行声明为另一个。这意味着第一次减速是多余的。 第二,不要使用休息,但是elif代替' if'。 第三,尝试后的前两行,什么都不做..
答案 1 :(得分:2)
从哪里开始?
try
区块之前进行的,因此您的except ZeroDivisionError
永远不会被触发。except user_input_1 != int
评估为except True
,这是毫无意义的,永远不会被触发break
循环中没有点击while
的唯一方法是,如果你抛出一个被捕获的异常(如果它没有被捕获,它将逃脱你的while
}循环并退出程序)。由于获取用户输入的代码是while
循环的外部,因此(如果异常可能被捕获)没有区别,您会看到错误消息只是永远重复你对python的理解似乎存在一些根本性的差距。我建议先填写这些;尝试并实现一个所需的功能(例如,获取用户输入并显示适当的错误消息,如果它无效)并从那里构建。
答案 2 :(得分:0)
SpoonMeiser已经提到过您的代码存在很多问题:
- 唯一的分组是在进入
try
区块之前进行的,因此您的except ZeroDivisionError
永远不会被触发。except user_input_1 != int
评估为except True
,这是毫无意义的,永远不会被触发- 你在
醇>break
循环中点击while
的唯一方法就是如果你抛出一个被抓住的异常(如果它没有被捕获,它就是&#39} ;二 逃避while
循环并退出程序)。既然代码那个 得到用户输入是while
循环的外,会有(如果 例外可能被捕获)没有区别,你会看到 错误消息只是永远重复。
其他错误包括:
使用b in range(x, y)
:这些只包含该时间间隔内的整数值。你可以用以下方法测试它:
print(2.1 in range(0,10)) # Prints: False
print(2 in range(0,10)) # Prints: True
您应该从头开始使用= float(input(...))
:如果您始终将用户输入用作float
只需执行一次。< / p>
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()