繁体   English   中英

Python:值的总和大于最后一个值

[英]Python: sum of values greater than last value

问题:

编写一个程序,该程序将遍历列表,并对所有大于列表中最后一个值的值求和。 如果没有大于列表的值,或者列表为空,则返回-1。

我的代码:

def go(list1):
    total = 0
    count = 0
    for i in range(0,len(list1)-1):
        if list1[i] < list1[i+1]:
            total+=list1[i+1]
            count += 1
        else:
            total += 0
        if count is 0:
            total = -1
        if len(list1) == 1:
            total = -1
    return total

print(go( [-99,1,2,3,4,5,6,7,8,9,10,5] ))
print(go( [10,9,8,7,6,5,4,3,2,1,-99] ))
print(go( [10,20,30,40,50,-11818,40,30,20,10] ))
print(go( [32767] ))
print(go( [255,255] ))
print(go( [9,10,-88,100,-555,2] ))
print(go( [10,10,10,11,456] ))
print(go( [-111,1,2,3,9,11,20,1] ))
print(go( [9,8,7,6,5,4,3,2,0,-2,6] ))
print(go( [12,15,18,21,23,1000] ))
print(go( [250,19,17,15,13,11,10,9,6,3,2,1,0] ))
print(go( [9,10,-8,10000,-5000,-3000] ))

我的输出:

55
-1
180
0
-1
112
466
46
5
1077
-1
7010

所需输出:

55
-1
180
-1
-1
112
466
46
5
1077
-1
7010

我究竟做错了什么? 为什么输出为0而不是-1?

当您放入的列表的长度为1时,您将循环for循环零次。

这意味着您放在那里检查条件的任何代码将永远不会执行。 我个人想尽快回来,所以我建议您:

def go(list1):
  if len(list1) == 1:
      return -1
  total = 0
  count = 0
  for i in range(0,len(list1)-1):
      if list1[i] < list1[i+1]:
          total+=list1[i+1]
          count += 1
  if count is 0:
      return -1
  return total

经验法则:始终先检查极端情况,然后再进行进一步处理

def go(list1):
    total = 0
    # no need for extra int variable, bool will do the job.
    greater_found = False

    # this condition will cover for list with single or no(empty list) element
    if len(list1) < 2:
        return -1

    for i in range(1, len(list1)):
        if list1[i] > list1[i-1]:
            total = total + list1[i]
            greater_found = True

    if not greater_found:
        return -1

    return total

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM