函数和返回多个元素python

时间:2018-08-24 22:09:51

标签: python

我正在尝试编写一个有关扑克游戏的程序,对于比较部分,我为每个设置调用(返回)倍数值。

在这种情况下,我返回了一个数组,其中一个是布尔值,一个是整数。但是,当我尝试在其他函数中使用它们时,出现错误('bool'对象不可下标),我不知道为什么。我的整个代码接近150行,要运行它,您将需要额外的文件,因此我将共享其中的某些部分。

这些是每种组合的设置部分

def straight(n):
    F = converter(n)
    if consecutive(F) == True:
        return [True, F[0]]
    return False


def full_house(n):
    F = converter(n)
    if len(set(F)) == 2:
        for i in F:
            if F.count(i) == 3:
                return [True, i]
    return False

这是我将其排名的部分

def ranking(n, k):
    if n == "AKQJT" and flush(k) == True:
        return 9
    elif  straight(n)[0]== True and flush(k) == True:
        return [8,straight(n)[1]]

    elif four_kind(n)[0]== True:
        return [7,four_kind(n)[1]]

    elif (full_house(n))[0]== True:
        return [6,full_house(n)[1]]

    elif flush(k) == True:
        return 5

    elif (straight(n))[0]== True:
        return [4,straight(n)[1]]

例如,当我尝试

print(ranking("44447","DDDDD"))

我收到错误

 elif  straight(n)[0]== True and flush(k) == True: line ...
 TypeError: 'bool' object is not subscriptable

但是有趣的是,当我尝试同花顺时(第二个elif部分对其进行了测试)。例如,

print(ranking("23456","DDDDD")

我得到一个类似的答案

[8,6] 

这是真正的答案,但随后我再次遇到相同的错误。

2 个答案:

答案 0 :(得分:2)

在默认情况下,您不返回数组:

    return False

将其更改为类似

    return [False, None]

或其他适合您情况的信息。

答案 1 :(得分:1)

请通过直线(n)签出您要返回的内容。我相信在这种情况下,您尝试返回 False 。因此,布尔值不可下标。

如果得到,则直接得到(n)为False。您不能编写if-elif条件来验证其情况。对于Straight(n)为False和Straight(n)不等于False的情况,您需要设计嵌套循环。