解决codingbat python列表切片问题

解决codingbat python列表切片问题,python,Python,卡在以下位置: 返回数组中数字的总和,空数组返回0。除此之外,数字13是非常不吉利的,所以它不算数,紧跟在13之后的数字也不算数 到目前为止,我写了: def sum13(nums): if 13 not in nums: return sum(nums) for i in range(len(nums)): if nums[i] == 13: return sum(nums[:i]) 当问题中第二次出现13时出现问题

卡在以下位置: 返回数组中数字的总和,空数组返回0。除此之外,数字13是非常不吉利的,所以它不算数,紧跟在13之后的数字也不算数

到目前为止,我写了:

def sum13(nums):
    if 13 not in nums:
        return sum(nums)

    for i in range(len(nums)):
        if nums[i] == 13:

            return sum(nums[:i])

当问题中第二次出现13时出现问题,并且没有立即计算之后的数字。感谢您的帮助。

一种与您开始时相同的方式是:

def sum13(nums):
    if 13 not in nums:
        return sum(nums)

    ret = 0
    count_next = True
    for num in nums:
        if num == 13:
            count_next = False
        elif count_next:
            ret += num
        else:
            count_next = True
    return ret

如果数字是13,记得不要数下一个数字。如果next为真(13不是最后一个数字),数一数。如果next不为true,数字也不为13,请记住计算下一个数字。

以与开始时相同的方式进行计算的方法如下:

def sum13(nums):
    if 13 not in nums:
        return sum(nums)

    ret = 0
    count_next = True
    for num in nums:
        if num == 13:
            count_next = False
        elif count_next:
            ret += num
        else:
            count_next = True
    return ret

如果数字是13,记得不要数下一个数字。如果next为真(13不是最后一个数字),数一数。如果next不为true,数字也不为13,请记住数数下一个数字。

当你说
返回和(nums[:i])
时,你将省略13后面的所有数字,而不仅仅是它后面的数字。您可以说
返回和(nums[:i])+sum13(nums[i+2:])
,但是在
sum13([4,6,13,13,4])
的情况下,4仍然会被计算。为了解决这个问题,你可以使用
returnsum(nums[:i])+sum13(nums[i+1+(nums[i+1:i+2]!=[13]):])
当你说
returnsum(nums[:i])
时,你将省略13后面的所有数字,而不仅仅是后面的数字。您可以说
返回和(nums[:i])+sum13(nums[i+2:])
,但是在
sum13([4,6,13,13,4])
的情况下,4仍然会被计算。要解决这个问题,您可以使用
返回和(nums[:i])+sum13(nums[i+1+(nums[i+1:i+2]!=[13]):])
下一步是Python中的内置关键字,所以尝试使用不同的变量名;我不认为它会让你写,如果它写了,它就不应该写。@dwanderson你说得对,我只是有一个普通的python shell要尝试,所以我没有想到它。
next
是python中的一个内置关键字,所以尝试使用不同的变量名;我不认为它会让你写,如果它写了,它就不应该写。@dwanderson你说得对,我只是有一个普通的python shell要尝试,所以我没有想到它。