Python-If语句中跳过了多个Elif语句

时间:2018-10-28 02:21:59

标签: python

我正在尝试让我的程序根据用户输入的小时返回不同的语句。如果我在他的前两个语句之间输入小时数((hours <6)和(hours <= 10)或(hours> = 6)),它将返回正确的字符串,但是如果我输入的数字大于10小时,它将不会在该小时内返回预期的字符串,但会继续重复第二个字符串。

感谢您的帮助!

这是我的程序: https://i.stack.imgur.com/uQzBi.png

def food(hours, boolean):

    if boolean == "True" or boolean == "true":        
        if (hours < 6):
            return "no food"

        elif (hours <= 10) or (hours >= 6):
            return "breakfast, marmalade"

        elif (hours <= 15) or (hours >= 11): 
            return "lunch, true,dessert"

        elif (hours < 22) or (hours >= 15):
            return "dinner, dessert"

        else:
            return "no food"

    else:
        if (hours < 6):
            return "no food"

        elif (hours <= 10) or (hours >= 6):
            return "breakfast,coffee"

        elif (hours <= 15) or (hours >= 11):
            return "lunch, false"

        elif (hours < 22) or (hours >= 15):
            return "dinner"

        else:
            return "no food"

x = food(15, "true")
print(x)

4 个答案:

答案 0 :(得分:3)

您应该使用“和”而不是“或”。大于10的任何值也将大于等于6,因此第二个条件始终匹配。

答案 1 :(得分:1)

Python的布尔值为True和False。他们不需要使用字符串“ True”或“ False”。您还可以使用if-elif-else逻辑的功能。 Python从上到下执行,当条件满足时,它将中断。您的函数可以重写为:

def food(hour, boolean):
    '''Food 
    Takes in hour as int and boolean as bool
    E.g. x = food(15,True)
    # TODO:
    Ensure that input data types are correct.
    '''
    if boolean:
        if hour >= 22 or hour >= 0:
            return 'no food'
        elif hour >= 15:
            return 'dinner, dessert'
        elif hour >= 11:
            return 'lunch, true,dessert'
        elif hour >= 6:
            return 'breakfast, marmalade'
        else:
            raise ValueError('something wrong')
    else:
        if hour >= 22 or hour >= 0:
            return 'no food'
        elif hour >= 15:
            return 'dinner'
        elif hour >= 11:
            return 'lunch, false'
        elif hour >= 6:
            return 'breakfast, coffee'
        else:
            raise ValueError('something wrong')


x = food(15, True)
print(x)

答案 2 :(得分:0)

好像第一个elif语句是您的问题。您应该使用和代替or。通过使用or,> = 6的任何东西都会返回早餐果酱,而不仅仅是6到10之间的东西。

答案 3 :(得分:0)

欢迎使用StackOverflow!如其他答案所述,使用“和”而不是“或”将解决您的问题。但是,如果每个餐点都是连续的,例如通过编写以下内容,则为每餐包含一个以上的条件是多余的:

if (hours < 6):
    return "no food" 

您已经说过,如果输入的小时数小于6,则仅输出返回值,因此只有大于6的值才可以进入下一个elif语句。

请让我知道我是否对您的程序用例有误解,这需要您编写这样的代码!