在Python中处理如下情况的好方法是什么?我会在Java中使用Switch / Case break模式,但不确定Python中最好的方法是什么。
下面的代码简单地模拟了6面模具辊并以10000卷的形式打印它们。我的if else
解决方案确实有效,但看起来很糟糕,因此我们非常感谢您提供更好的解决方案。
from random import randint
i = 0
ii = 0
iii = 0
iv = 0
v = 0
vi = 0
for trial in range(0, 10000):
die = randint(1, 6)
if die == 1:
i += 1
elif die == 2:
ii += 1
elif die == 3:
iii += 1
elif die == 4:
iv += 1
elif die == 5:
v += 1
else:
vi += 1
print("i = {}, ii = {}, iii = {}, iv = {}, v = {}, vi = {}"
.format(i, ii, iii, iv, v, vi))
答案 0 :(得分:6)
只是不要定义6个变量,而是定义list
:
from random import randint
rolls = [0]*6
for trial in range(0, 10000):
die = randint(1, 6)
rolls[die-1] += 1
print("i = {}, ii = {}, iii = {}, iv = {}, v = {}, vi = {}"
.format(*rolls))
注意使用format
传递给*
的好参数。
答案 1 :(得分:2)
有很多这样的问题
你可以通过一系列if ... elif ... elif轻松地做到这一点...... 其他。有一些关于switch语句语法的建议,但是 尚未就是否以及如何进行范围测试达成共识。看到 PEP 275了解完整详情和当前状态。
对于需要从大量选择中进行选择的情况 可能性,您可以创建一个字典映射大小写值 调用函数。例如:
def function_1(...): ... functions = {'a': function_1, 'b': function_2, 'c': self.method_1, ...} func = functions[value] func()
答案 2 :(得分:0)
对于更一般化的案例,您可以使用字典。这有什么用呢?好吧,假设你想要1001和1006之间的随机数,而不是1和6.使用列表,你必须添加1000个占位符。使用字典时不需要这样做。
from random import randint
rolls = {
1001: 0,
1002: 0,
1003: 0,
1004: 0,
1005: 0,
1006: 0
}
for trial in range(0, 10000):
die = randint(1001, 1006)
rolls[die] += 1
print("1001 = {}, 1002 = {}, 1003 = {}, 1004 = {}, 1005 = {}, 1006 = {}"
.format(rolls[1001], rolls[1002], rolls[1003], rolls[1004], rolls[1005], rolls[1006]))