d d*_*d d 8 python random dictionary rubiks-cube
我想随机化一个初始化为完整的rubik立方体(正确边上的所有颜色).我有移动旋转立方体的函数.我想连续随机选择50个函数来正确随机化它.
我做这个项目了解更多一点关于Python的,因为我主要是做C++,我看到有Python的任何情况下,/开关,所以我要把一本字典.当我创建字典时,代码似乎由于某种原因而执行:
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]
Run Code Online (Sandbox Code Playgroud)
因此,当我创建这个字典时,由于某种原因(我认为)它似乎贯穿并执行所有11个条目.我似乎无法找到更好的方法,至少比if/elif长语句更优雅.
!编辑:实现这两个建议,任何建议都没有设置函数的("倒")标志.例如,调用1和7都会给我down_turn,但是输出显示标志在它应该在7号时没有设置.
有任何想法吗?
hap*_*ave 16
当你定义dict时,它实际上调用了函数,并将返回值存储在字典中.要让字典存储对函数的引用,您需要删除尾随括号.所以类似于:
scramble = { 0: self.up_turn,
1: self.down_turn,
etc.
Run Code Online (Sandbox Code Playgroud)
然后,在底部,打电话scramble[i]().
这将调用没有参数的函数.要处理将"反向"作为参数传递的情况,您可以定义单独的函数,如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")
Run Code Online (Sandbox Code Playgroud)
等等