Python 编写函数sum13(nums)
编写一个函数sum13(nums),该函数接受整数nums列表并返回列表中的数字之和,空列表返回0。除此之外,数字13是非常不吉利的,所以它不算数,紧跟在13之后的数字也不算数Python 编写函数sum13(nums),python,Python,编写一个函数sum13(nums),该函数接受整数nums列表并返回列表中的数字之和,空列表返回0。除此之外,数字13是非常不吉利的,所以它不算数,紧跟在13之后的数字也不算数 Test Result print(sum13([1, 2, 2, 1, 13])) 6 print(sum13([13, 2, 2, 1])) 3 print(sum13([13, 13, 2, 13, 1, 5, 6, 13])) 11(EXPECTED) 13(GOT) 这是我的程序,我不知道为什么最后的测
Test Result
print(sum13([1, 2, 2, 1, 13]))
6
print(sum13([13, 2, 2, 1]))
3
print(sum13([13, 13, 2, 13, 1, 5, 6, 13]))
11(EXPECTED)
13(GOT)
这是我的程序,我不知道为什么最后的测试代码没有运行
def sum13(nums):
"""jdhdjkls"""
if len(nums) == 0:
return 0
for i in range(0, len(nums)):
if nums[i] == 13:
nums[i] = 0
if i+1 < len(nums):
nums[i+1] = 0
return sum(nums)
def sum13(nums):
“jdhdjkls”
如果len(nums)==0:
返回0
对于范围(0,len(nums))内的i:
如果nums[i]==13:
nums[i]=0
如果i+1
这将解决您的问题:
def sum13(nums):
"""jdhdjkls"""
if len(nums) == 0:
return 0
for i in range(0, len(nums)):
if nums[i] == 13:
nums[i] = 0
# problem arises when there are 2 consecutive 13 this if statement will rectify it.
if (i+1 < len(nums)) and (nums[i+1]!=13):
nums[i+1] = 0
return sum(nums)
def sum13(nums):
“jdhdjkls”
如果len(nums)==0:
返回0
对于范围(0,len(nums))内的i:
如果nums[i]==13:
nums[i]=0
#当有2个连续的13个if语句将对其进行纠正时,就会出现问题。
如果(i+1
您可以使用内置方法压缩两个倾斜的列表,如下所示:
[1, 2, 3, 4]
[1, 2, 3, 4]
到
并检查其中是否有13
以下是方法:
def sum13(nums):
s = 0 if nums[0] == 13 else nums[0]
for p in zip(nums, nums[1:]):
if all(n != 13 for n in p):
s += p[1]
return s
print(sum13([1, 2, 2, 1, 13]))
print(sum13([13, 2, 2, 1]))
print(sum13([13, 13, 2, 13, 1, 5, 6, 13]))
def sum13(nums):
s = 0 if nums[0] == 13 else nums[0]
for i, j in zip(nums, nums[1:]):
if i != 13 != j:
s += j
return s
print(sum13([1, 2, 2, 1, 13]))
print(sum13([13, 2, 2, 1]))
print(sum13([13, 13, 2, 13, 1, 5, 6, 13]))
输出:
6
3
11
您还可以解包这些对:
def sum13(nums):
s = 0 if nums[0] == 13 else nums[0]
for p in zip(nums, nums[1:]):
if all(n != 13 for n in p):
s += p[1]
return s
print(sum13([1, 2, 2, 1, 13]))
print(sum13([13, 2, 2, 1]))
print(sum13([13, 13, 2, 13, 1, 5, 6, 13]))
def sum13(nums):
s = 0 if nums[0] == 13 else nums[0]
for i, j in zip(nums, nums[1:]):
if i != 13 != j:
s += j
return s
print(sum13([1, 2, 2, 1, 13]))
print(sum13([13, 2, 2, 1]))
print(sum13([13, 13, 2, 13, 1, 5, 6, 13]))
您的脚本无法对应于
13 13 2
,因为它们是在第一步中生成的0 0 2
对于
和继续
对您的目标有效
def sum13(nums):
sums=0
after13=False
for num in nums:
if num == 13:
after13=True
continue
if not after13:
sums+=num
after13=False
return sums
我们可以尝试使用递归来解决此问题:
def sum13(numbers):
if not numbers: # base case
return 0
first, *rest = numbers
if first == 13:
first = 0
if rest and rest[0] != 13:
rest.pop(0)
return first + sum13(rest)
print(sum13([1, 2, 2, 1, 13]))
print(sum13([13, 2, 2, 1]))
print(sum13([13, 13, 2, 13, 1, 5, 6, 13]))
虽然不是您可能想要的回答方式,但我们也可以强制itertools.groupby
为我们完成以下工作:
from itertools import groupby
def sum13(numbers):
previous13 = False
def is_tainted(number):
nonlocal previous13
tainted = previous13
previous13 = number == 13
return True if tainted else previous13
total = 0
for tainted, subset in groupby(numbers, is_tainted):
if not tainted:
total += sum(subset)
return total
欢迎来到堆栈溢出!请阅读。您还可以使用它来帮助逐步可视化代码的执行。如果一行中有两个13,会发生什么情况?好的,每当您看到一个13,您就将其设置为零,并且立即将下面的数字设置为零-即使下面的数字是另一个13。因此,2不会被调零,因为它跟随的是0,而不是13,当您检查第二个元素时。对于
[13,2,2,1]
返回5,而不是OP规则所暗示的3。其他示例也一样。由于键入了num
vs.nums
。否则可以。第一次看到非本地!我会查的。我喜欢创造性的方法!;)第一个代码中有一个输入错误,你的意思是如果rest和rest[0]==13:
-或者你可以直接删除整个如果块,那么rest
中的任何13都将由下一个递归调用处理。第二个版本中有一个问题:sum13([13,13,3,3])
返回3
…@thierrylahuille,我在第一个示例中没有输入错误,这就是它的工作方式。至于第二个例子,3是正确的答案,正如说明所暗示的,并且所有其他张贴的答案返回。我看不出你的例子有什么不同。