在Python 3中计算列表中的四行

时间:2016-03-08 23:06:57

标签: python python-3.x

用户掷五个骰子。如果其中四个连续,那么用户被授予30分,如果没有,那么他们将被授予无分数。当我有5个数字的列表来表示骰子时,我如何能够搜索该列表以查看它是否包含连续的四个数字?我的代码目前如下:

malloc

这在很大程度上起作用但是如果我滚动1,2,3,4,6例如不足。谢谢你的帮助

1 个答案:

答案 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}}。