gpt4 book ai didi

python - 在 Python 中使用字典代替 Case/Switch 语句

转载 作者:太空狗 更新时间:2023-10-29 20:40:02 25 4
gpt4 key购买 nike

我想随机化一个初始化为完整的魔方(所有颜色都在正确的边上)。我有旋转立方体的移动功能。我想连续随机选择 50 个函数以适本地随机化它。

我做这个项目是为了更多地了解 Python,因为我主要使用 C++,而且我发现 Python 没有 case/switch,所以我正在尝试字典。当我制作字典时,代码似乎出于某种原因执行:

def random_cube(self):
scramble = { 0 : self.up_turn(),
1 : self.down_turn(),
2 : self.left_turn(),
3 : self.right_turn(),
4 : self.front_turn(),
5 : self.back_turn(),
6 : self.up_turn("inverted"),
7 : self.down_turn("inverted"),
8 : self.left_turn("inverted"),
9 : self.right_turn("inverted"),
10: self.front_turn("inverted"),
11: self.back_turn("inverted")
}
for x in range(50):
i = random.randint(0,11)
scramble[i]

所以当我制作这本词典时,它似乎出于某种原因(我认为)贯穿并执行了所有 11 个条目。我似乎找不到更好的方法,至少比一长串 if/elif 语句更优雅。

!编辑:实现这两个建议,函数的(“倒置”)标志没有被任何一个建议设置。例如,调用 1 和 7 都给我 down_turn,但输出显示标志没有设置,而它应该在编号 7 上。

有什么想法吗?

最佳答案

当你定义字典时,它实际上是在调用函数,并将返回值存储在字典中。要让字典存储对函数的引用,您需要删除尾随的括号。所以像这样:

scramble = {  0: self.up_turn,
1: self.down_turn,
etc.

然后,在底部,调用 scramble[i]()

这将调用不带参数的函数。要处理将“inverted”作为参数传递的情况,您可以定义单独的函数,如 up_turn_inverted() 等,或者您可以让字典存储一个由函数和参数组成的 2-ple,然后调用一些喜欢scramble[i][0](scramble[i][1])

根据评论中的建议更新:您还可以使用 lambda 表达式来定义函数,尤其是那些需要参数的函数。这基本上等同于定义一个 up_turn_inverted 函数,但作为匿名函数就地完成。它看起来像这样:

6: lambda: self.up_turn("inverted")
7: lambda: self.down_turn("inverted")

等等

关于python - 在 Python 中使用字典代替 Case/Switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com