Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能做些什么使这段代码工作?(python)_Python_Python 3.x - Fatal编程技术网

我能做些什么使这段代码工作?(python)

我能做些什么使这段代码工作?(python),python,python-3.x,Python,Python 3.x,这是任务: '69年夏季:返回数组中数字的总和,但忽略以6和开头的数字部分除外'\ 扩展到下一个9(每6个后面至少有一个9)。返回0表示没有数字 这是我的代码: def summer_69(arr): a = len(arr) sum = 0 for i in range(0,a): if arr[i]!=6: sum+=arr[i] continue if (arr[i]==6): for

这是任务:

'69年夏季:返回数组中数字的总和,但忽略以6和开头的数字部分除外'\ 扩展到下一个9(每6个后面至少有一个9)。返回0表示没有数字

这是我的代码:

def summer_69(arr):
    a = len(arr)
    sum = 0

    for i in range(0,a):

      if arr[i]!=6:
        sum+=arr[i]
        continue

      if (arr[i]==6):
          for i in range(i+1,a):
              if i==9:
                  sum+=0
                  i+=1
                  break

    return sum
当我的输入是:

d = summer_69([4, 5, 6, 7, 8, 9])
print(d)
输出是33而不是9

有什么问题吗?
我在课程解决方案中看到了一种不同的方法来解决这个问题,但我想知道这段代码的具体错误是什么。

即使您重新分配
I
(例如,使用一个内循环),外循环仍然会从
范围
中获得下一个值,因此分配不会产生任何影响(例如,对您的外循环)。
您可以删除内部循环,只需设置一个标志,让您知道是否应该使用或跳过当前编号。

使用生成器实际上更容易

def gen_summer_69(arr):
    arr_i = iter(arr)
    while 1:
        n = next(arr_i)
        if n == 6:
            while next(arr_i) != 9:
                pass
        else:
            yield n
这将根据您提到的条件过滤结果,因此您可以对结果求和

sum(gen_summer_69([4, 5, 6, 7, 8, 9]))
因此,作为一项功能,它将是:

def summer_69(arr):
    return sum(gen_summer_69(arr))
这可以被称为你想要的:

summer_69([4, 5, 6, 7, 8, 9])
编辑:我将避免使用生成器,因为你问得很好

def summer_69(arr):
    arr_len = len(arr)
    arr_sum = 0
    skip = False
    for i in range(arr_len):
        n = arr[i]
        if skip:
            if n == 9:
                skip = False
            continue
        if n == 6:
            skip = True
        else:
            arr_sum += n
    return arr_sum

内部循环中的
i+=1
不会更改从外部循环中的
range
获得的
i
的下一个值。明白了。。仍然不起作用,救命啊?:)def summer_69(arr):范围(0,a)内i的a=len(arr)sum=0:如果arr[i]=6:sum+=arr[i]if(arr[i]==6):对于范围内的i(i+1,a):如果i==9:break-return-sum,我建议进行一些实际的调试,也许至少可以添加一些打印。事实上,我正在学习我的课程,我们还没有学习生成器。。你能帮我解决问题吗?好的,谢谢你的帮助。。我想以我目前的知识,我无论如何也不能用我的方式解决这个问题。。(我没有学习标志或生成器)通过“标志”,我只是指一个布尔变量。