我能做些什么使这段代码工作?(python)
这是任务: '69年夏季:返回数组中数字的总和,但忽略以6和开头的数字部分除外'\ 扩展到下一个9(每6个后面至少有一个9)。返回0表示没有数字 这是我的代码:我能做些什么使这段代码工作?(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
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,我建议进行一些实际的调试,也许至少可以添加一些打印。事实上,我正在学习我的课程,我们还没有学习生成器。。你能帮我解决问题吗?好的,谢谢你的帮助。。我想以我目前的知识,我无论如何也不能用我的方式解决这个问题。。(我没有学习标志或生成器)通过“标志”,我只是指一个布尔变量。