比如说,有三个足球队的球员都需要每天使用他们之间共享的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.")
答案 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