我正在尝试让我的程序根据用户输入的小时返回不同的语句。如果我在他的前两个语句之间输入小时数((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)
答案 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语句。
请让我知道我是否对您的程序用例有误解,这需要您编写这样的代码!