在Python 3中的列表中连续计算四个

用户掷出五个骰子.如果连续四个,则用户将获得30分,否则,将不会获得30分.当我有代表骰子的5个数字列表时,如何搜索该列表以查看它是否连续包含四个数字?目前,我的代码如下:

diceList = sorted(diceList)
elif letterChoice == "J" and diceCombinations[9] == False:
    diceList = list(set(diceList))
    print (diceList)
    if diceList in [[1,2,3,4], [2,3,4,5], [3,4,5,6]]:
        score = score + 30
        diceCombinations[9] = True

这在大多数情况下都有效,但是如果例如我滚动1,2,3,4,6就会失败.谢谢你的帮助

最佳答案

使用any反转测试,并将diceList设置为一组:

diceList = set(diceList)
if any(match <= diceList for match in (
        {1, 2, 3, 4},
        {2, 3, 4, 5},
        {3, 4, 5, 6},
    )):
    # do something

说明:

集合仅保留一个唯一元素的一个副本,因此{1、1、1、3、2、6}最终为{1、3、6、2}(不保留顺序),因此通过将diceList转换为集合我们会丢失任何重复项.

然后,我们遍历“连续四个”的可能解决方案,例如{1、2、3、4},以查看diceList是否为匹配项.该部分通过使用< =表示法工作,这对于集合意味着LHS(左侧)的元素少于RHS(右侧)的元素(> {1,2}是< {1,2,3}.
> {1,2,3} = = {1,2,3}
> {1,2,5}不是注意:这称为部分排序,因为一个集合有可能不是=,不是.另一套.