检查数组连续5个数字

时间:2015-10-18 16:52:50

标签: python arrays python-3.x

我正在制作一个扑克模拟器,并试图定义一个能识别直线并给它handstrength值为5的函数。

def straightCheck(playerHand):
    playerHand.sort()
    print(playerHand)
    for playerHand in range(len(playerHand)):
        for i in playerHand:
            if playerHand[i] == playerHand [i+1] -1:
                straight = True
            else:
                straight = False
    if straight == True:
        handstrength = 5

x = [1,3,5,4,2]
straightCheck(x)

我无法弄清楚它有什么问题,但它一直会返回此错误消息:

for i in playerHand:   
TypeError: 'int' object is not iterable

2 个答案:

答案 0 :(得分:2)

首先,你试图迭代一个整数,这个整数不能(也不应该)完成。在使用for时,您的两个嵌套for循环似乎应该只有一个for i in range(len(playerHand) - 1),例如-1,这样您就不会尝试访问{{1} }}

此外,由于您在每次迭代中都将playerHand[len(playerHand)]设置为straightTrue,因此只会计算您的上次迭代次数,因此您会得到误报。

最后,我不确定您的函数是否需要False一个值,但目前您的函数return没有数据(除非returns是全局变量)。此外,请注意,目前,使用handstrength您实际上正在排序.sort(),从而在功能中更改它 - 这可能不是您想要的。

检查手是否笔直的可能功能,类似于您的代码,是:

playerHand

如果def is_straight(playerHand): playerHand.sort() for i in range(len(playerHand) - 1): if playerHand[i] != playerHand [i+1] - 1: return False return True 是直的,则此函数返回True,否则返回playerHand

答案 1 :(得分:0)

这个怎么样?您对列表进行排序,然后将其转换为集合并返回到列表,这使其独一无二。那么长度必须是5,如果是这样,5个连续数字的最大值和最小值之间的差值必须是4.我不能在这里用数学证明这一点,但它应该是。 ;)

>>> x=[2,1,5,3,4]
>>> y=sorted(x)
>>> y=list(set(y))
>>> if len(y) == 5 and y[4]-y[0] == 4: 
...     print "straight"
... 
straight

另见:Check for consecutive numbers