运行“else”语句的Python程序,即使前面的“if”语句为true

运行“else”语句的Python程序,即使前面的“if”语句为true,python,Python,我对计算机编程非常陌生。我开始写一个非常简单的脚本,当你输入某人的名字时,它会告诉你他家的方向: # Users and Directions: davids_house = "Directions to David's home from X... \n East on Y, \n South on Z," \ " \n West on A, \n South on B, \n first C on the right."

我对计算机编程非常陌生。我开始写一个非常简单的脚本,当你输入某人的名字时,它会告诉你他家的方向:

# Users and Directions:
davids_house = "Directions to David's home from X... \n East on Y, \n South on Z," \
               " \n West on A, \n South on B, \n first C on the right."
bannons_house = "bannons directions here"

# Asking the user where he/she would like to go:
destination = input("Where would you like to go? ")

# Reads out a set of directions depending on what name was picked:
if destination in ['Davids_House', 'davids_house', 'Davids_house', 'davids_House']:
    print(davids_house)

if destination in ['Bannons_House', 'bannons_house', 'Bannons_house', 'bannons_House']:
    print(bannons_house)

else:
    print("Sorry, that's not an option.")
每当我运行这个程序并到达它给出方向的点时,我都会给它一个有效的输入,比如说“davids_house”。它将打印出方向,但也将运行“else”语句。当我输入无效值时,它会执行我希望它执行的操作,并且只显示“对不起”,这不是一个选项

我的印象是,除非'if'语句对有效值不满意,否则'else'不会运行


令人惊讶的是,我在其他论坛上找不到类似的内容。我发现问题/答案与我正在寻找的类似,但在这个具体案例中,没有任何东西能真正解决我的问题。我做错了什么?

这是因为程序中的前两个if语句是分开的,不相关的,所以即使第一个if为True,第二个if仍然运行。您应该使用if..elif..else:

如果目的地位于['Davids_House'、'Davids_House'、'Davids_House'、'Davids_House']: 普林特戴维兹之家酒店 如果目的地在['Bannons_House'、'Bannons_House'、'Bannons_House'、'Bannons_House']: 普林班农之家酒店 其他: 对不起,那不是一个选项。
这是因为程序中的前两个if语句是分开的,不相关的,所以即使第一个if为True,第二个if仍然运行。您应该使用if..elif..else:

如果目的地位于['Davids_House'、'Davids_House'、'Davids_House'、'Davids_House']: 普林特戴维兹之家酒店 如果目的地在['Bannons_House'、'Bannons_House'、'Bannons_House'、'Bannons_House']: 普林班农之家酒店 其他: 对不起,那不是一个选项。 你有一个if,和一个与其无关的成对if/else;顺序的ifs之间并没有天生的联系,而else只与前面的一个ifs关联,如果可能的话,它们之间有多个elif块。如果希望else仅在所有If失败时运行,则需要将它们绑定在一起,方法是将第二个If与第一个If绑定。这将使你的行为相互排斥;一个且仅一个块将执行:

if destination in ['Davids_House', 'davids_house', 'Davids_house', 'davids_House']:
    print(davids_house)

# Next line changed to elif from if
elif destination in ['Bannons_House', 'bannons_house', 'Bannons_house', 'bannons_House']:
    print(bannons_house)

else:
    print("Sorry, that's not an option.")
你有一个if,和一个与其无关的成对if/else;顺序的ifs之间并没有天生的联系,而else只与前面的一个ifs关联,如果可能的话,它们之间有多个elif块。如果希望else仅在所有If失败时运行,则需要将它们绑定在一起,方法是将第二个If与第一个If绑定。这将使你的行为相互排斥;一个且仅一个块将执行:

if destination in ['Davids_House', 'davids_house', 'Davids_house', 'davids_House']:
    print(davids_house)

# Next line changed to elif from if
elif destination in ['Bannons_House', 'bannons_house', 'Bannons_house', 'bannons_House']:
    print(bannons_house)

else:
    print("Sorry, that's not an option.")

它打印了大卫家的方向,但其他的只适用于班农家。若要将所有语句合并为一个语句,请使用elif:

顺便说一下,如果您想包含许多不同形式的大写字母,您可能需要在比较字符串之前对其进行预处理。一个简单的例子:

if destination.casefold() == 'davids_house':

它打印了大卫家的方向,但其他的只适用于班农家。若要将所有语句合并为一个语句,请使用elif:

顺便说一下,如果您想包含许多不同形式的大写字母,您可能需要在比较字符串之前对其进行预处理。一个简单的例子:

if destination.casefold() == 'davids_house':

我没有阅读整个问题,但是如果你发布了一个好问题,也许可以尝试使用elif而不是另一个。措辞恰当,问题陈述清晰,等等。干得好!我没有阅读整个问题,但是如果你发布了一个好问题,也许可以尝试使用elif而不是另一个。措辞恰当,问题陈述清晰,等等。干得好!非常感谢。正是我所需要的,我感谢你的详细解释。谢谢!这正是我所需要的,我感谢您的详细解释。感谢您的回复,我还实现了casefold字符串方法。那很有用@spirebyte。您可以随时更改您的选择;感谢您的回复,我还实现了casefoldstring方法。那很有用@spirebyte。您可以随时更改您的选择;