【问题标题】:python last number repeat more than oncepython最后一个数字重复不止一次
【发布时间】:2020-03-28 16:46:11
【问题描述】:

我的问题是我没有得到我想要的输出。列表编号和列表大小可以更改。

任务: 完成该方法,以便它将搜索作为参数传递的列表,以查看列表中的最后一个值是否多次出现。如果最后一个值出现不止一次,则返回 True(不要打印“True”)。否则,返回 False(不要打印“False”)。如果列表为空,则返回 False。从 main 方法调用你的方法,发送一个列表,然后打印结果。

def last_repeats(list):
  last_number = list[-1]
  lenght = len(list)
  for x in range (0,lenght-1):
    if list[x] == last_number:
      return True
    else:
      return False
def main():
  list = [0,0,5,5]
  print(last_repeats(list))


############################################
### Don't edit anything below this line. ###
############################################

if __name__ == '__main__':
  main()

我需要的输出:

True

我得到的输出:

False

【问题讨论】:

  • 考虑添加一个关于这应该做什么的句子——为什么它应该返回True?另外,不要命名变量 list 它会覆盖内置变量。
  • 你到底想达到什么目的?
  • 你需要将return false语句放在for循环之外。
  • @ThomasWeller len(x) > 1 && x[-2] == x[-1]
  • @肯尼。不,它没有。它只检查第一个字符

标签: python


【解决方案1】:

您在检查第一个后返回,即使它可能是错误的。考虑您的数组 [0, 0, 5, 5]。第一个元素 0 != 5,所以它立即返回 False。

要解决这个问题,请在函数结束后返回 False

def last_repeats(lis): # 'list' is a keyword in python
  if len(lis) == 0: return False # Task requirement
  last_number = lis[-1]
  length = len(list) # typo?
  for x in range(length): # range(0, n) == range(n)
    if lis[x] == last_number:
      return True
  return False # So now you have checked every element in the list
def main():
  lis = [0, 0, 5, 5]
  print(last_repeats(lis))


############################################
### Don't edit anything below this line. ###
############################################

if __name__ == '__main__':
  main()

另外我刚刚读到如果列表为空,它应该返回 False。目前,代码给出“IndexError”。尝试自己修复它!

玩得开心!

【讨论】:

  • 谢谢@Gareth Ma,我搞定了。我在想这是问题所在,但我不知道如何正确解决它!
  • @DaniilKharlashko 你解决了空列表问题吗? :)
  • 我知道我只是想先解决这个问题。我现在正在努力。
  • 我试图解决这个问题,但它不起作用。我试过用 len 和 IF 检查它的 0 是否返回 false 并且不起作用。
  • 所以你是说我无法检查它是否在 last_number 之后为空,因为当我搜索列表中的最后一个数字时,它会给我一个错误,这就是它不能正常工作的原因?
【解决方案2】:

您得到 False 输出,因为您的 if 语句在第一次出现不等于 last_number 的值(即列表中的第一个元素)的数字时返回 False,这是因为此处不需要“else”块。

您应该将 if 语句更改为仅在循环内返回 True。循环外返回 False:

for x in range (lenght):
    if list[x] == last_number:
      return True
    return False

【讨论】:

    【解决方案3】:
    def last_repeats(lis): # 'list' is a keyword in python
      last_number = lis[-1]
      length = len(list) # typo?
      for x in range(length): # range(0, n) == range(n)
        if lis[x] == last_number:
          return True
      return False # So now you have checked every element in the list
    def main():
      lis = [0, 0, 5, 5]
      print(last_repeats(lis))
    
    
    ############################################
    ### Don't edit anything below this line. ###
    ############################################
    
    if __name__ == '__main__':
      main()
    

    【讨论】:

      【解决方案4】:

      您需要将 return false 语句放在 for 循环之外。

      def last_repeats(list):
        last_number = list[-1]
        lenght = len(list)
        for x in range (0,lenght-1):
          if list[x] == last_number:
            return True
        return False
      def main():
        list = [0,0,5,5]
        print(last_repeats(list))
      
      
      ############################################
      ### Don't edit anything below this line. ###
      ############################################
      
      if __name__ == '__main__':
        main()
      

      你也不需要 else 情况。此编辑应该达到您正在尝试的目的。目前,您的函数在查询不匹配的元素时立即返回 false。仅在您检查倒数第二个元素后才应返回 false。

      【讨论】:

        【解决方案5】:

        你可以使用:

        def last_repeats(my_list):
            return my_list and my_list[-1] in my_list[:-1]
        
        def main():
            my_list = [0, 0, 5, 5]
            print(last_repeats(my_list))
        
        ############################################
        ### Don't edit anything below this line. ###
        ############################################
        
        if __name__ == '__main__':
            main()
        

        输出:

        True
        

        【讨论】:

          【解决方案6】:

          range(start, stop, \[step\]) 的值范围由公式r[i] = start + step*i 确定,其中i >= 0r[i] < stop。所以for x in range(0, lenght - 1) 将一直持续到倒数第二个 项。应该是range(0, lenght):

          def last_repeats(list):
            last_number = list[-1]
            lenght = len(list)
            vreturn = False
            for x in range (0,lenght):
              if list[x] == last_number:
                vreturn = True
            return vreturn
          

          【讨论】:

          • 只有代码的答案几乎总是可以通过添加一些关于它们的工作方式和原因的解释来改进。
          猜你喜欢
          • 2016-05-31
          • 1970-01-01
          • 1970-01-01
          • 2016-05-26
          • 1970-01-01
          • 2019-12-16
          • 1970-01-01
          • 2021-12-07
          • 1970-01-01
          相关资源
          最近更新 更多