如何减轻Python中Switch / Case语句的缺失?

时间:2016-11-28 22:51:31

标签: python python-3.x

在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))

3 个答案:

答案 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()

来自Why isn’t there a switch or case statement in Python?

答案 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]))