编写一个函数,该函数将名为aList的列表作为参数。如果列表只包含1到6之间的每个整数,则返回一个布尔值True,否则返回False。
这是家庭作业,我认为我做对了,但它现在告诉我它是不对的。这是我的代码。
def isItAStraight(aList):
count = 0
for i in set(aList):
count += 1
return aList.count(i) == 1
出于某种原因,即使一个数字出现不止一次,它仍然是真的,我无法弄清楚为什么它不会给我假,除非第一个或最后一个数字被改变。
每个号码只能出现一次,否则就是假的。
所以喜欢[1,2,3,4,5,6] 是真的。 但是[1,2,2,3,4,5] 会是假的。
另外,我无法导入像Counter或者集合这样的东西(尽管它更容易实现它并不是分配的。)
该列表是从1到6随机生成的。
答案 0 :(得分:3)
在循环中使用return
,您只检查一个值。您需要检查每个值。此外,您应该循环浏览您实际需要查找的项目,而不是遍历列表中的项目。这也有助于确保列表中的项目数量正确。
def isItAStraight(aList):
if len(aList) != 6:
return False
for i in range(1, 7):
if aList.count(i) != 1:
return False
return True
但最简单的方法是简单地对列表进行排序,并检查它是否是您正在寻找的内容:
def isItAStraight(aList):
return sorted(aList) == list(range(1, 7))
答案 1 :(得分:2)
您需要注意列表中的 内容。你所写的内容与下面的伪代码基本相同:
let count = 0
for every unique element in aList:
Add 1 to count
if count is now 1, return true.
如果aList
中至少有一个元素,那么总是会返回true,因为您要为计数添加1然后立即返回。
有两种方法可以考虑:
flags
的所有零的6元素列表。迭代aList
并将flags
中的相应元素设置为1
。如果flags
全部为1,则返回true。1, 2, 3, 4, 5, 6
。