统计每个元素出现在列表中的次数。然后从这个

问题描述:

中写出一个条件语句来写一个函数,该函数将一个名为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] 将是错误的。

而且,我无法导入之类的柜台或集合(虽然这将是这么容易做到这一点是没有拆开的分配。)

名单是随机产生1到6。

在循环内部有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)) 
+0

有人可以告诉我这个答案有什么问题,使它值得赞赏吗? – TigerhawkT3

+0

其实这个答案帮我解决了我的代码有问题。我不知道为什么它被拒绝投票。我没有意识到我只是检查一个元素。 (仍然是python的新手)因此,直到你说了些什么之后,我才发现它有什么问题。 – Wiggs

你需要注意什么里面的名单。什么你写的是基本相同下面的伪代码:

let count = 0 
for every unique element in aList: 
    Add 1 to count 
    if count is now 1, return true. 

这将总是返回true,如果有至少一个元素aList,因为你加1计数,然后立即返回。

几种方法可以考虑:

  1. 创建一个名为flags全零6元素列表。遍历aList并将flags中的对应元素设置为1。如果flags是全部,那么你返回true。
  2. 对列表进行排序,然后检查前六个数字是否为1, 2, 3, 4, 5, 6
+0

我忘了提列表中的内容。我已经改变了我的帖子,上面反映了它,但列表仅仅是一个从1到6的随机生成列表。 – Wiggs