ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

这道Python列表基础题目你确定会

2022-04-06 14:33:13  阅读:229  来源: 互联网

标签:summer arr 题目 index Python 列表 return 69 total


假期结束了,准备好开始学习了吗?今天给大家带来一道列表的题目,快来看看你会不会解。前几天有小伙伴问了一个Python列表的问题,这里拿出来给大家分享下,一起学习下。

在这里插入图片描述

题目如下:

Python学习交流Q群:903971231###
SUMMER OF '69: Return the sum of the numbers in the array, except ignore sections of numbers starting with a 6 and extending to the next 9 (every 6 will be followed by at least one 9). Return 0 for no numbers.
summer_69([1, 3, 5]) --> 9
summer_69([4, 5, 6, 7, 8, 9]) --> 9
summer_69([2, 1, 6, 9, 11]) --> 14

 

嗯,英文提问,看上去有点懵!

02
解决过程

这个题目一看上去还是有点难度的,思路方面是个问题,值得大家探讨了一发。

给出了几个可行的思路。

1.解答

这里给出了解答,如下所示:

def summer69(arr):   
 index_of_6 = arr.index(6)  
   index_of_9 = len(arr) - arr[::-1].index(9)  - 1   
    sum_of_arr = 0    
    for i, j in enumerate(arr):       
     if index_of_6 <= i <= index_of_9:            
     pass   
          else:           
           sum_of_arr += arr[i]    
           return sum_of_arr
print(summer69([6, 6, 7, 8, 9, 8, 9, 2, 4]))

 

思路也很简单,找到第一个6和最后一个9出现的位置,只要在6和9中间的就全部跳过,否则累加。乍一看,没啥问题,但是套用题目中的三个测试用例,发现第一个测试用例不能通过,summer_69([1, 3, 5])会出错。

在这里插入图片描述

整理上来看,还是符合要求的,已经非常不错了,毕竟题目还是有点绕的。

在这里插入图片描述

2.解答

这里给出的两份代码,第一个使用了flag标签做状态转换,理解起来更加容易一些:

def summer_69(arr):   
 total = 0   
  flag = 1  # 允许累计的标志符   
   for i in arr:      
     if i == 6:           
      flag = 0     
         elif i == 9:           
          flag = 1           
           continue       
            total = total + i * flag  
              return total

 

第二个方法代码如下:

def summer_69(arr):   
 total = 0  
   length = len(arr)   
    left = 0  
      while left < length:      
        if arr[left] == 6:          
          for i in range(left, length):               
           left = i               
            if arr[i] == 9:                  
              break       
               else:          
                 total += arr[left]     
                    left += 1    
                    return total

 

这两种方法,给的三个测试用例都通过了。

不得不承认这个*用的确实太赞了。

不过关于题意审核方面,关于9的理解有点歧义。

看看具体来理解了,起码从测试情况来看,还是可以满足要求的。

不过不慌,稍微优化下,

在这里插入图片描述

这样的话,歧义方面也得到了解答,完美解决。

在这里插入图片描述

这里给出了这道题目的参考答案,代码如下:

def summer_69(arr):   
 total = 0   
  add = True    
  for num in arr:       
   while add:         
      if num != 6:              
        total += num                
        break          
          else:                
          add = False     
             while not add:
  if num != 9:               
   break           
    else:               
     add = True              
       break    
       return total

 

看上去逻辑还是有点难理解的,分的情况比较多。

在这里插入图片描述

这里给出了一个递归的解法,代码如下:

def summer_69(arr, res=0):  
 if 6 in arr and 9 in arr:       
  b = arr.index(6)       
   e = arr.index(9)      
     if b < e:          
       del arr[b:e+1]     
          else:          
            res = res+9         
               del arr[e]       
                return summer_69(arr, res)  
                  else:        
                  res += sum(arr)      
                   return res

print(summer_69([1, 3, 5]))
print(summer_69([4, 5, 6, 7, 8, 9]))
print(summer_69([2, 1, 6, 9, 11]))

 

方法行之有效,运行结果如下:

在这里插入图片描述

不过他本人不推荐递归写法,也比较推荐下面的解法。

解法

这里继续补充了一个递归方法,代码如下:

def s69(arr, total=0, status=1):  
  if not arr:       
   return total  
     if arr[0] == 9 and status == 0:       
      return s69(arr[1:], total, status=1)   
       elif arr[0] == 6 or status == 0:       
       return s69(arr[1:], total, status=0)   
        else:       
         return arr[0] + s69(arr[1:], total, status)

 

最后

这道题到这里就结束了,你解出答案了吗?没解出来的告诉我,我看看有多少没有解答出来,这一篇的内容到这里就结束了,下一篇见。

在这里插入图片描述

标签:summer,arr,题目,index,Python,列表,return,69,total
来源: https://www.cnblogs.com/123456feng/p/16106174.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有