三个单独的if语句之间的区别以及使用'或'在一个if语句中

时间:2016-04-07 17:47:09

标签: python python-3.x

比如说,有三个足球队的球员都需要每天使用他们之间共享的Python 3.x程序登录。

其中哪一种更有效/更好?为什么?

此:

while True:
    team = input("Which team are you in? A, B or C?").lower()
    if team == "a" or team == "b" or team == "c":
        #asks for player's number and then registers him in for their team for the day
        break
    print("Invalid input. Please enter A, B or C.")

或者这个:

while True:
    team = input("Which team are you in? A, B or C?").lower()
    if team == "a":
        #asks for player's number and then registers him in for their team for the day
        break
    if team == "b":
        #asks for player's number and then registers him in for their team for the day
        break
    if team == "c":
        #asks for player's number and then registers him in for their team for the day
        break
    print("Invalid input. Please enter A, B or C.")

4 个答案:

答案 0 :(得分:4)

不同之处在于,当您为条件使用单独的if语句时,您可以根据该条件遵循特殊代码块(命令),而如果您将所有条件放在一个{{ 1}}语句你必须为所有这些命令使用相同的命令。

所以这一切都取决于你的逻辑,并且在性能方面没有区别。如果你想对所有条件都遵循一个特定的命令,你最好用布尔运算符链接条件。否则,您应该为每个条件使用单独的if语句,并遵循每个条件的相关命令。

答案 1 :(得分:0)

第一种方法更好,因为它更容易阅读。如果你需要对每个团队进行不同的检查,第二种方法会更好。由于您正在编写单独的ifs,因此您具有更大的灵活性。

就效率而言,它确实会影响你之后在if语句中所做的事情。例如。如果在第一种情况下你测试团队是否在('a','b','c')并且当为真时,你再次在列表中搜索以找到要处理的确切变量,而在第二种情况下,因为你知道您不需要直接搜索和处理这些变量的确切团队,那么第二种方法将更有效。

为了充分利用这两种方法,只有在你写完这样的内容后才能进行搜索:

team_objects = {  # Or db search instead
    'a': team_a,
    'b': team_b,
    'c': team_c,
}

letter = input('Which team are you in? A, B or C?').lower()
team = team_objects.get(letter, None)
if team:
    team.players += 1  # or something else
else:
    print('Invalid input. Please enter A, B or C.')

答案 2 :(得分:0)

如果Efficient / better意味着哪种方式运行得更快并且您关注代码的性能,那么您可以编写一个简单的基准测试来测试它。您可以计算两个时间点之间的经过时间。例如,检查随机team值的100K次。

从我自己的角度来看,我认为我们应该编写更易读的代码,让代码更容易被其他程序员理解,它可能无法加速您的开发,但它不会延迟您的项目。

答案 3 :(得分:0)

第一个是简洁而正确的,只能获得有效的输入。第二个是在实际使用输入之前对每个有效输入进行一些预处理时,因为您仍处于while True循环中。你可以让第一个更干净,

options = ("a", "b", "c")
while True:
    option = input("x: ")
    if option in options:
        break