在Python中尝试,除了和while循环
我试图为学校做这个练习,但代码不起作用,确切地说,在计算BMI后,它不会执行if语句。此外,如果输入不正确,则现在将检查except语句。请告知代码中要更正的内容。谢谢在Python中尝试,除了和while循环,python,python-2.7,while-loop,try-except,Python,Python 2.7,While Loop,Try Except,我试图为学校做这个练习,但代码不起作用,确切地说,在计算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 = 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')
对于start:请注意,您一行接一行地声明变量b。这意味着第一次减速是多余的。 第二,不要用break,而是用elif代替if。
第三,try之后的前两行,不执行任何操作。对于start:请注意,您在另一行之后声明变量b。这意味着第一次减速是多余的。 第二,不要用break,而是用elif代替if。 第三,尝试后的前两行,什么也不做..从哪里开始
try
块之前进行的,因此将永远不会触发除ZeroDivisionError之外的除法
除了用户输入1!=int
的计算结果为,除了True
之外,它没有意义,永远不会被触发while
循环中,您不点击中断
的唯一方法是抛出一个被捕获的异常(如果未捕获,它将退出while
循环并退出程序)。由于获取用户输入的代码在while
循环之外,因此(如果可以捕捉到异常)不会有任何区别,并且您会看到错误消息永远重复try
块之前进行的,因此将永远不会触发除ZeroDivisionError之外的除法
除了用户输入1!=int
的计算结果为,除了True
之外,它没有意义,永远不会被触发while
循环中,您不点击中断
的唯一方法是抛出一个被捕获的异常(如果未捕获,它将退出while
循环并退出程序)。由于获取用户输入的代码在while
循环之外,因此(如果可以捕捉到异常)不会有任何区别,并且您会看到错误消息永远重复在您对python的理解中似乎存在一些基本的差距。我建议先填这些;尝试并实现一个所需的功能(例如,获取用户输入,如果无效,则显示适当的错误消息),然后从中构建。SpoonMiser已经提到,您的代码存在很多问题:
try
块之前进行的,因此将永远不会触发除ZeroDivisionError之外的除法
除了用户输入1!=int
的计算结果为,除了True
之外,它没有意义,永远不会被触发while
循环中,唯一不命中中断的方法是抛出一个被捕获的异常(如果没有捕获,它将
退出,而循环并退出程序)。因为代码
获取用户输入在循环之外,而循环之外,则会有(如果
例外情况可能会被捕获)没有区别,你会看到
错误消息永远重复
b
:这些仅包括该间隔内的整数值。您可以通过以下方式进行测试:
print(范围(0,10)内为2.1)#Prints:False
print(范围(0,10)中的2个)#Prints:True
=float(输入(…)
:如果您总是将用户输入用作float
,只需执行一次即可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()
作为Spoonmiser,您的代码有很多问题:
try
块之前进行的,因此将永远不会触发除ZeroDivisionError之外的除法
除了用户输入1!=int
的计算结果为,除了True
之外,它没有意义,永远不会被触发while
循环中,唯一不命中中断的方法是抛出一个被捕获的异常(如果没有捕获,它将
退出,而循环并退出程序)。因为代码
获取用户输入在循环之外,而循环之外,则会有(如果
例外情况可能会被捕获)没有区别,你会看到
错误消息永远重复
b
:这些仅包括该间隔内的整数值。您可以通过以下方式进行测试:
print(范围(0,10)内为2.1)#Prints:False
print(范围(0,10)中的2个)#Prints:True
=float(输入(…)
:如果您总是将用户输入用作float
,只需执行一次即可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()
我们不应该为他们做家庭作业,而应该给他们指点。此外,在这种情况下,循环可能比递归更好。我们不应该为人们做家庭作业,而应该只是给出一些指针。此外,在这种情况下,循环可能比递归更好。