用户掷五个骰子。如果其中四个连续,那么用户被授予30分,如果没有,那么他们将被授予无分数。当我有5个数字的列表来表示骰子时,我如何能够搜索该列表以查看它是否包含连续的四个数字?我的代码目前如下:
malloc
这在很大程度上起作用但是如果我滚动1,2,3,4,6例如不足。谢谢你的帮助
答案 0 :(得分:4)
使用in
撤消any
测试,并将diceList
保留为set
:
diceList = set(diceList)
if any(match <= diceList for match in (
{1, 2, 3, 4},
{2, 3, 4, 5},
{3, 4, 5, 6},
)):
# do something
说明:
set
只保留一个唯一元素的副本,因此{1, 1, 1, 3, 2, 6}
最终为{1, 3, 6, 2}
(订单不会被保留),因此将diceList
投射到一个集合中我们失去了任何重复。
然后我们遍历“连续四个”的可能解决方案,例如{1, 2, 3, 4}
,以查看diceList
是否匹配。该部分使用<=
表示法,set
表示LHS(左侧)的元素少于RHS(右侧),(<
)或与RHS(=
)相同的元素,并且RHS中不存在任何元素。所以:
{1, 2}
是<
{1, 2, 3}
。{1, 2, 3}
是=
{1, 2, 3}
{1, 2, 5}
不是<
,也不是=
到{1, 2, 3}
注意:这称为部分排序,因为一个set
可能不是=
,不是<
,而不是>
另一个{{} 1}}。