检查数组中是否有5个连续的数字

2024-04-25 13:00:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我制作了一个扑克模拟器,并试图定义一个函数来识别一个直线并给它一个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)

我不知道is有什么问题,但它不断返回以下错误消息:

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

Tags: 函数intrueforif定义isdef
2条回答

首先,您尝试迭代一个整数,这不能(也不应该)完成。似乎您的两个嵌套的for循环应该是一个for,就像for i in range(len(playerHand) - 1),当使用-1时,这样您就不会试图访问playerHand[len(playerHand)]。你知道吗

另外,由于在每次迭代中都将straight设置为TrueFalse,因此只有最后一次迭代才算,因此会出现误报。你知道吗

最后,我不确定是否要函数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

如果playerHand是直的,则此函数返回True,否则返回False。你知道吗

这个怎么样。您可以对列表进行排序,然后将其转换为一个集合,然后再转换回一个列表,从而使其具有唯一性。那么长度必须是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

相关问题 更多 >