【问题标题】:I am getting a compile error: 6 not in list我收到一个编译错误:6 不在列表中
【发布时间】:2017-10-14 13:52:59
【问题描述】:

我正在codingbat 上尝试这个小问题列表。这是问题的链接:http://codingbat.com/prob/p108886 我必须计算列表的总和,除了忽略以 6 开头并以 7 结尾的子列表。我正在分享我编写的代码,任何人都可以在我犯错误的地方帮助我。

def sum67(nums):
  def c6(six):
    if len(six) > 0:
      if 6 not in six:
        return six
      else:
        count= 0
        for a in six:
          if a== 6:
            count = count + 1

        for b in range(count):
          in1= six.index(6)
          in2= six.index(7)

          six= six[0:in1]+six[in2+1:]
        return six
    else:
      return 0

  a= c6(nums)
  return sum(nums)

【问题讨论】:

  • 请编辑您的问题以包含 Python 的 fullcomplete 输出。
  • 如果嵌套六七序列会怎样。喜欢[6,6,3,7,7]。第一个将删除后六个。
  • @someprogrammerdude:我认为 OP 没有 秘密测试输入
  • 感谢威廉的编辑。我没有考虑这种情况,我现在会考虑那个帐户
  • @WillemVanOnsem Python (通常)编译,只是不编译为本机代码。

标签: python list loops


【解决方案1】:

您看到的错误消息实际上不是编译器错误。它是index 在找不到参数时引发的异常的值:

>>> [1,2,3].index(6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 6 is not in list

您需要捕获错误并做出适当的响应:

try:
    in1 = six.index(6)
except ValueError:
    # What should you do if there is no 6 in the list?
    # Do it here.

【讨论】:

    【解决方案2】:

    在这里我发现列表的错误 = [6,6,1, 2, 2, 6, 99, 99, 7]

    我在 tests.py 中编写了相同的代码并运行了一些示例。

    我也发现sum(nums)需要改成sum(a)

    def sum67(nums):
        def c6(six):
            if len(six) > 0:
                if 6 not in six:
                    return six
                else:
                    count = 0
                    for a in six:
                        if a == 6:
                            count = count + 1
    
                    for b in range(count):
                        in1 = six.index(6)
                        in2 = six.index(7)
    
                        six = six[0:in1] + six[in2 + 1:]
                    return six
            else:
                return 0
    
        a = c6(nums)
        return sum(a)
    
    
    numbers = [6,6,1, 2, 2, 6, 99, 99, 7]
    sum1 = sum67(numbers)
    
    
    
    
    Traceback (most recent call last):
      File "tests.py", line 26, in <module>
        sum1 = sum67(numbers)
      File "tests.py", line 21, in sum67
        a = c6(nums)
      File "tests.py", line 13, in c6
        in1 = six.index(6)
    ValueError: 6 is not in list
    

    如果我错了,请告诉我。

    我在控制台中尝试了以下代码。它对我所有的输入都有效。

    def sum67(nums):
        def c6(six):
            if len(six) > 0:
                if 6 not in six:
                    return six
                else:
                    count = 0
                    for a in six:
                        if a == 6:
                            count = count + 1
                    for b in range(count):
                        if six and six.__contains__(6) and six.__contains__(7):
                            in1 = six.index(6)
                            in2 = six.index(7)
                            six = six[0:in1] + six[in2 + 1:]
                    return six
            else:
                return 0
        a = c6(nums)
        return sum(a)
    
    
    numbers = [6, 6, 1, 2, 2, 6, 99, 99, 7, 1, 2, 6, 1, 2, 7, 1, 2,6,7]
    sum1 = sum67(numbers)
    print("Sum value = %s" % sum1)
    Sum value = 6
    

    但我在主要描述中提供的 URL(http://codingbat.com/prob/p108886) 中遇到错误

    Line 12: __contains__ is an invalid attribute name because it starts with "_".
    

    所以我不知道这个错误的原因。

    【讨论】:

    • 错误的原因(6不在列表中)是当有一个列表在第一个位置有6个在最后一个位置有7个并且包含一个更多的6之间,然后计数变为 2 并且第一次六个变量包含空列表并尝试在下一次迭代中找到空列表中的 6
    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多