我正在制作一个扑克模拟器,并试图定义一个能识别直线并给它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
答案 0 :(得分:2)
首先,你试图迭代一个整数,这个整数不能(也不应该)完成。在使用for
时,您的两个嵌套for
循环似乎应该只有一个for i in range(len(playerHand) - 1)
,例如-1
,这样您就不会尝试访问{{1} }}
此外,由于您在每次迭代中都将playerHand[len(playerHand)]
设置为straight
或True
,因此只会计算您的上次迭代次数,因此您会得到误报。
最后,我不确定您的函数是否需要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