python練習題----函數、內置函數、遞歸等


1. 列舉布爾值為False的值
  { }、‘ ’、0、()、[ ]、False、None

2.
根據范圍獲取其中3和7整除的所有數的和,並返回調用者;符合條件的數字個數以及符合條件數字的總和
#自答
from functools import reduce

def zhengchu(num):
    a = []
    for i in range(num):
        if i%3 == 0 or i%7 == 0:
            a.append(i)
    print(len(a)-1)
    print(reduce(lambda x, y: x+y, a))
reslut = zhengchu(100)

#參答
def func(start_num,stop_number):
   res = []
   for i in range(start_num, stop_number):
      if i % 3 == 0 or i % 7 == 0:
         res.append(i)
   return res, sum(res), len(res)

test = func(1,100)
print(test)
 
        
3. 函數的默認返回值是 None

4. break、contiune、return的區別
  break:結束當前整個循環
  continue:結束本次循環進入下一次循環
return:結束函數,並返回結果,默認為None

5. 使用set集合獲取兩個列表l1 = [11, 22, 33],l2 = [22, 33, 44]中的相同元素
l1 = [11,22,33]
l2 = [22,33,44]
set1 = set(l1)
set2 = set(l2)
same = set1 & set2
print(same)

 


6.
定義函數統計一個字符串中大寫字母、小寫字母、數字的個數,並以字典為結果返回給調用者
#自答
li= 'areyou23HHH'

def con(li):
    num = 0
    al = 0
    AL = 0
    for i in li:
        if 48 <= ord(i) <= 57:
            num +=1
        if 97 <= ord(i) <= 122:
            al +=1
        if 97 <= ord(i) <= 122:
            AL +=1
    print({'數字': num})
    print({'小寫字母': al})
    print({'數字': AL})

con(li)

#參答
def func(st):
   dic = {}
   count_num = 0
   count_cap = 0
   count_low = 0
   for i in st:
      if i.isdigit():
         count_num += 1
      elif i.isupper():
         count_cap += 1
      elif i.islower():
         count_low += 1 dic['數字'] = count_num dic['大寫字母'] = count_cap dic['小寫字母'] = count_low return dic
test_str = func('ASD-+xcf123')
print(test_str)

 

 
7. 函數的位置參數、關鍵字參數、默認參數、可變長參數
位置參數:按形參的位置傳入較位置參數,即普通參數
關鍵字參數:傳入實參時指定形參的值
默認參數:形參直接指定默認值得參數
可變長參數:*args **kwargs,前者只能接收沒有位置參數的實參或傳入的列表、元組,后者可以接收關鍵字參數,和字典格式。
有位置參數時,位置參數必須在關鍵字參數的前面,但關鍵字參數之間不存在先后順序的

8. 字符串“你好”轉為以 utf-8 編碼形式轉換為字節
#自答
a = '你好'
b = a.encode('utf-8')
print(b)

#參答
s = '你好'
b_s1 = bytes(s,'utf-8')
print(b_s1)

 

 

9. 利用內置函數zip(),實現如下功能:

l1 = ['alex',11,22,33]
l2 = ['is',11,22,33]
l3 = ['good',11,22,33]
l4 = ['boy',11,22,33]
請獲取字符串s = 'alex_is_good_boy'
#自答
l1 = ['alex', '11', '22', '33']
l2 = ['is', '11', '22', '33']
l3 = ['good', '11', '22', '33']
l4 = ['boy', '11', '22', '33']
t = '_'
l1_index = l1.index('alex')
l2_index = l2.index('is')
l3_index = l3.index('good')
l4_index = l4.index('boy')
s = l1[l1_index]+t+l2[l2_index]+t+l3[l3_index]+t+l4[l4_index]
print(s)


#參答
l1 = ['alex', '11', '22', '33']
l2 = ['is', '11', '22', '33']
l3 = ['good', '11', '22', '33']
l4 = ['boy', '11', '22', '33']
print('_'.join(list(zip(l1,l2,l3,l4))[0]))    *.join()可以連接元組中的字符串元素

 

 
9. 利用遞歸實現 1*2*3*4*5*6*7 = 5040
#自答
def multi(num,su = 1):
    if num > 7:
        return su
    su *= num
    return multi(num+1,su)

f = multi(1)
print(f)


#參答
def multi(num,su = 1):
    if num > 7:
        return su
    su *= num
    return multi(num+1,su)

f = multi(1)
print(f)

from functools import reduce res = reduce(lambda x,y:y*x,range(1,8)) print(res)

 

 
10、利用with實現同時打開兩個文件(一讀,一寫,並將讀取的內突寫入到寫入模式的文件中)
with open('scores', 'r', encoding='utf-8') as f1, open('copy', 'w', encoding='utf-8') as f2:
    f2.write(f1.read())

 



11. 有如下兩個列表,第一個列表中的數字無序不重復排列,第二個為空列表
需求:
取出列表1的最小值放到列表2的首個位置
取出列表1的最小值(僅大於上次一的最小值)放到列表2的首個位置
取出列表1的最小值(僅大於上次一的最小值)放到列表2的首個位置...
以此類推,從而獲取一個有序的列表2,並將其返回給函數調用者
li_unorder = [6, 1, 7, 8, 2, 9, 3, 5]
li_order = []
for i in range(len(li_unorder)):
    li_order.append(min(li_unorder))
    li_unorder.remove(min(li_unorder))
print(li_order)

12.猴子吃桃:猴子第一天摘下若干個桃子,當即吃了一半,不過癮就多吃了一個。第二天又將剩下的桃子吃了一半,不過癮多吃了一個。
以后每天都吃前一天剩下的一般再加一個。到第10天剛好剩下
。問猴子第一天摘了多少個桃子?
#自答
def taozi(day, num):
    if day == 10:
        return num
    num = num*2 + 1 + 1
    return taozi(day+1, num)
print(taozi(1, 1))


#參答
def f(x,day):
   day -= 1
   if day == 0:
      return x
   x = (x+1) * 2
   return f(x,day)
res = f(1,10)
print(res)
 
        

 

13. a.利用filter函數、自定義函數獲取l1中元素大於33的所有元素,l1 = [11,22,33,44,55]
#匿名函數
l1 = [11,22,33,44,55] print(list(filter(lambda x:x>33, l1))) #自定義函數
l1 = [11,22,33,44,55] def f(x): return x > 33 new_list = list(filter(f,l1)) print(new_list)
b. 利用map、自定義函數將所有是奇數的元素加100
#匿名函數
l1 = [11,22,33,44,55] print(list(map(lambda x: (x+100 if x % 2 else x), l1))) #自定義函數
def num(x): if x % 2: return x+100
    else: return x print(list(map(num,l1)))

 

14. 簡述python3 中的 range 函數和 python2 中的range 函數有什么區別

  3. range 不會生成值,只有用的時候才會生成

  2.7 range 會直接生成一個列表,值已經生成

 

15. 

mvp = 'lebron james'

def lbj(func):
    mvp = 'kevin durant'
    func()

def kd():
    print(mvp)

lbj(kd)


#執行結果:
leborn james

 

 

 

 

 

 
        




 



 
 
        

 

 
        
 
        
 
 














 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM