Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中尝试,除了和while循环_Python_Python 2.7_While Loop_Try Except - Fatal编程技术网

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

在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:

我试图为学校做这个练习,但代码不起作用,确切地说,在计算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')

对于start:请注意,您一行接一行地声明变量b。这意味着第一次减速是多余的。 第二,不要用break,而是用elif代替if。
第三,try之后的前两行,不执行任何操作。

对于start:请注意,您在另一行之后声明变量b。这意味着第一次减速是多余的。 第二,不要用break,而是用elif代替if。 第三,尝试后的前两行,什么也不做..

从哪里开始

  • 唯一的除法是在进入
    try
    块之前进行的,因此将永远不会触发除ZeroDivisionError之外的
    除法
  • 除了用户输入1!=int
    的计算结果为
    ,除了True
    之外,它没有意义,永远不会被触发
  • while
    循环中,您不点击
    中断
    的唯一方法是抛出一个被捕获的异常(如果未捕获,它将退出
    while
    循环并退出程序)。由于获取用户输入的代码在
    while
    循环之外,因此(如果可以捕捉到异常)不会有任何区别,并且您会看到错误消息永远重复
  • 在您对python的理解中似乎存在一些基本的差距。我建议先填这些;尝试并实现一个所需的功能(例如,获取用户输入,如果无效,则显示适当的错误消息),然后从那里开始构建。

    从哪里开始

  • 唯一的除法是在进入
    try
    块之前进行的,因此将永远不会触发除ZeroDivisionError之外的
    除法
  • 除了用户输入1!=int
    的计算结果为
    ,除了True
    之外,它没有意义,永远不会被触发
  • while
    循环中,您不点击
    中断
    的唯一方法是抛出一个被捕获的异常(如果未捕获,它将退出
    while
    循环并退出程序)。由于获取用户输入的代码在
    while
    循环之外,因此(如果可以捕捉到异常)不会有任何区别,并且您会看到错误消息永远重复

  • 在您对python的理解中似乎存在一些基本的差距。我建议先填这些;尝试并实现一个所需的功能(例如,获取用户输入,如果无效,则显示适当的错误消息),然后从中构建。

    SpoonMiser已经提到,您的代码存在很多问题:

  • 唯一的除法是在进入
    try
    块之前进行的,因此将永远不会触发除ZeroDivisionError之外的
    除法
  • 除了用户输入1!=int
    的计算结果为
    ,除了True
    之外,它没有意义,永远不会被触发
  • while
    循环中,唯一不命中
    中断的方法是抛出一个被捕获的异常(如果没有捕获,它将
    退出
    ,而
    循环并退出程序)。因为代码
    获取用户输入在
    循环之外,而
    循环之外,则会有(如果
    例外情况可能会被捕获)没有区别,你会看到
    错误消息永远重复
  • 其他错误包括:

  • 在范围(x,y)中使用
    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
    循环中,唯一不命中
    中断的方法是抛出一个被捕获的异常(如果没有捕获,它将
    退出
    ,而
    循环并退出程序)。因为代码
    获取用户输入在
    循环之外,而
    循环之外,则会有(如果
    例外情况可能会被捕获)没有区别,你会看到
    错误消息永远重复
  • 其他错误包括:

  • 在范围(x,y)中使用
    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()
    

    我们不应该为他们做家庭作业,而应该给他们指点。此外,在这种情况下,循环可能比递归更好。我们不应该为人们做家庭作业,而应该只是给出一些指针。此外,在这种情况下,循环可能比递归更好。