检查列表中的值是否相等会返回错误的结果

时间:2014-02-26 19:34:52

标签: python

我正在尝试编写一个程序,我可以在其中输入一个列表,如果列表中的所有值都相等,则返回布尔值Yahtzee为True。当我运行它时,它可以在99%的时间内运行。但是,索引3可能与列表中的其他值不同,isYahtzee()仍然会将Yahtzee返回为True。有人可以帮我调试吗?

#Determine whether all of them are the same and returns a Boolean.
def isYahtzee(aList):
    #This tells the program to look down the entire length of the list        
    for i in range (0,len(aList)):
    #Since I will be working with a list with no more than 5 numbers, I se
        #This equal to 5 indexs (0-4)
        if aList[0] == aList[1] and aList[1] and aList[2] and aList[3] and aList[4]:
            #If all of them are equal, the boolean Yahtzee = True
            Yahtzee = True

        #If they are not all equal to eachother    
        if aList[0] != aList[i]:
            #The Boolean Yahtzee = False
            Yahtzee = False

    #Return the value of the Boolean        
    return Yahtzee 

2 个答案:

答案 0 :(得分:2)

您可以检查列表的长度是否为5,列表的set是否为长度为1。

#Determine whether all of them are the same and returns a Boolean.
def isYahtzee(aList):
    return (len(aList) == 5 and len(set(aList)) == 1)

话虽如此,你的问题是你只测试aList[0] == aList[1]的相等性 - and aList[1] and aList[2] and aList[3] and aList[4]段仅检查以确保其他值存在,而不是它们等于aList[0]

如果你想让它更严格,你也可以添加and all(isinstance(item, int) for item in aList)以检查所有值是否为整数,并and max(aList) <= 6 and min(aList) >= 1以检查所有值是否有效(标准)死亡。

答案 1 :(得分:0)

我会采取稍微不同的方法,以避免在您不需要时构建昂贵的set

def isYahtzee(aList):
    return all(item==aList[0] for item in aList)

这将要求两个项目在它们实际上不相同时不测试True的等效性,但除非您为骰子构建自定义类并包括那些(而不是它们生成的模具卷)在你的list中,它不应该是这个实现中的问题。