我正在尝试编写一个程序,我可以在其中输入一个列表,如果列表中的所有值都相等,则返回布尔值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
答案 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
中,它不应该是这个实现中的问题。