def sum67(nums):
for i in range(0, len(nums)):
print nums[i]
if nums[i] == 6:
nums[i] = 0
for j in range(i+1, len(nums)):
print nums[j]
temp = nums[j]
nums[j] = 0
if temp == 7: break
i=j+1
return sum(nums)
我将列表中的所有数字与直接6到7块之间的数字相加。我的代码工作正常,但我很困惑为什么第一个循环似乎正在重置,即使我设置i = j + 1。
我想'跳过'对所有通过第二个'for'块的j执行第一个if语句,因为没有必要检查0 = 6。 我认为放i = j + 1会实现这一点,但是打印nums [i]语句仍然打印出0,对应于经过第二个'for'块的那些。这表明循环从它停止的地方继续而不是从j + 1开始。
例如,sum67([2,7,6,2,6,7,2,7])打印出对应于2,6,7的3个零。那么为什么循环不会从j + 1继续?
谢谢
答案 0 :(得分:0)
我认为这就是你要找的东西:
def sum67(nums):
include_next = True
included_nums = []
for i in nums:
if include_next and i not in (6, 7):
included_nums.append(i)
if i == 6:
include_next = False
if i == 7:
include_next = True
return sum(included_nums)
看来你过于复杂化了。不要害怕创建新的变量来跟踪状态,因为这些变量可以使代码更清晰,前提是你给出了解释其目的的名称(你应该总是这样做)。在循环遍历列表时修改列表通常也是一个非常糟糕的主意。
更简洁的解决方案是创建一个可重复使用的功能,现在你的功能有一个名称可以解释它的目的(你也应该总是这样做):
def sum_excluding(nums, start, end):
include_next = True
included_nums = []
for i in nums:
if include_next and i not in (start, end):
included_nums.append(i)
if i == start:
include_next = False
if i == end:
include_next = True
return sum(included_nums)
def sum_excluding_6_to_7(nums):
return sum_excluding(nums, 6, 7)