python—文件操作,函數練習題


練習題

文件處理相關

  1. 編碼問題

    1. 請說明python2 與python3中的默認編碼是什么?
    2. 為什么會出現中文亂碼?你能列舉出現亂碼的情況有哪幾種?
    3. 如何進行編碼轉換?
    4. #-*-coding:utf-8-*- 的作用是什么?

    5. 解釋py2 bytes vs py3 bytes的區別

  2. 文件處理

    1. r和rb的區別是什么?
    2. 解釋一下以下三個參數的分別作用
     open(f_name,'r',encoding="utf-8")  
#    1.編碼問題
#1.python2中的文件默認編碼是GBK,字符串的默認編碼是Unicode;
#   pyrhon3中的文件默認編碼是utf-8,字符串的默認編碼是utf-8

#2.轉碼出現問題,decode解碼和encode編碼的過程中出現錯誤。
      
#3.先把文件進行decode解碼成Unicode,再encode編碼成utf-8

#4.告訴python解釋器,編碼是以utf-8

#5.python3中bytes就是字節
     python2中

#      2.文件處理
#1.‘r’是只讀模式,只能讀出來
#   ‘rb’是追加模式,可以讀可以追加元素

#2. f_name是文件名,‘r’是打開文件的模式是只讀模式, encoding=‘utf-8’,是以utf-8編碼的方式打開

 

 

函數基礎:

  1. 寫函數,計算傳入數字參數的和。(動態傳參)
  2. 寫函數,用戶傳入修改的文件名,與要修改的內容,執行函數,完成整個文件的批量修改操作
  3. 寫函數,檢查用戶傳入的對象(字符串、列表、元組)的每一個元素是否含有空內容。
  4. 寫函數,檢查傳入字典的每一個value的長度,如果大於2,那么僅保留前兩個長度的內容,並將新內容返回給調用者。

    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    PS:字典中的value只能是字符串或列表
    

      

  5. 解釋閉包的概念

#1. 
value_one = int(input('輸入值 : '))
value_two = int(input('輸入值 : '))
def calc(x, y):
    res = x + y
    print('res', res)
calc(value_one, value_two)

輸入值 : 2
輸入值 : 3
res 5   # 執行結果

#2.
import os
file_name = 'saz.txt'
file_new_name = '%s.new' % file_name

old_str = 'alex'
new_str = 'rain'

f_old = open(file_name, 'r', encoding='utf-8')
f_new = open(file_new_name, 'w+', encoding='utf-8')
for line in f_old:
    if old_str in line:
        line = line.replace('alex', 'rain')
        f_new.write(line)
f_old.close()
f_new.close()
os.replace(file_new_name, file_name)

#3.
def check_str(a):  # a為傳過來的參數
    calc = False  # 空格統計默認False沒有
    for line in a:
        if line.isspace():
            calc = True
    return calc


a = '123 132 456 7489 456'
res = check_str(a)
print(res)

#4.
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
def value(a):
    li = []
    for i in dic.values():
        long = len(i)
        if long > 2:
            li.append(i[:2])
        else:
            continue
    return li
a = value(dic)
print(a)

#5.
閉包:函數里面嵌套了一個子函數,當外部函數執行的時候,內部函數被返回了,返回了內存地址,然后內部函數在外面被執行的時候,調用了外部函數的變量。。

  

函數進階:

  1. 寫函數,返回一個撲克牌列表,里面有52項,每一項是一個元組
    1. 例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃A’)]
  2. 寫函數,傳入n個數,返回字典{‘max’:最大值,’min’:最小值}

    例如:min_max(2,5,7,8,4)
    返回:{‘max’:8,’min’:2}
    

      

  3. 寫函數,專門計算圖形的面積

    • 其中嵌套函數,計算圓的面積,正方形的面積和長方形的面積
    • 調用函數area(‘圓形’,圓半徑) 返回圓的面積
    • 調用函數area(‘正方形’,邊長) 返回正方形的面積
    • 調用函數area(‘長方形’,長,寬) 返回長方形的面積
    def area():
        def 計算長方形面積():
            pass
    
        def 計算正方形面積():
            pass
    
        def 計算圓形面積():
            pass
    

      

  4. 寫函數,傳入一個參數n,返回n的階乘

    例如:cal(7)
    計算7*6*5*4*3*2*1
    

      

  5. 編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,后續的函數都無需再輸入用戶名和密碼

生成器和迭代器

  1. 生成器和迭代器的區別?
  2. 生成器有幾種方式獲取value?
  3. 通過生成器寫一個日志調用方法, 支持以下功能

    • 根據指令向屏幕輸出日志
    • 根據指令向文件輸出日志
    • 根據指令同時向文件&屏幕輸出日志
    • 以上日志格式如下

      2017-10-19 22:07:38 [1] test log db backup 3
      2017-10-19 22:07:40 [2]    user alex login success 
      #注意:其中[1],[2]是指自日志方法第幾次調用,每調用一次輸出一條日志
      

        

    • 代碼結構如下

      def logger(filename,channel='file'):
          """
          日志方法
          :param filename: log filename
          :param channel: 輸出的目的地,屏幕(terminal),文件(file),屏幕+文件(both)
          :return:
          """
          ...your code...
      
       #調用
       log_obj = logger(filename="web.log",channel='both')
       log_obj.__next__()
       log_obj.send('user alex login success')
      

        

內置函數

  1. 用map來處理字符串列表,把列表中所有人都變成sb,比方alex_sb

    name=['alex','wupeiqi','yuanhao','nezha']
    

      

  2. 用filter函數處理數字列表,將列表中所有的偶數篩選出來

    num = [1,3,5,6,7,8]
    

      

  3. 如下,每個小字典的name對應股票名字,shares對應多少股,price對應股票的價格

    portfolio = [
        {'name': 'IBM', 'shares': 100, 'price': 91.1},
        {'name': 'AAPL', 'shares': 50, 'price': 543.22},
        {'name': 'FB', 'shares': 200, 'price': 21.09},
        {'name': 'HPQ', 'shares': 35, 'price': 31.75},
        {'name': 'YHOO', 'shares': 45, 'price': 16.35},
        {'name': 'ACME', 'shares': 75, 'price': 115.65}
    ]
    

      

    計算購買每支股票的總價

    用filter過濾出,單價大於100的股票有哪些

1、請分別介紹文件操作中不同的打開方式之間的區別:

模式 含義
r  
rb  
r+  
rb+  
w  
wb  
w+  
wb+  
a  
ab  
a+  
ab+

2、有列表 li = ['alex', 'egon', 'smith', 'pizza', 'alen'], 請將以字母“a”開頭的元素的首字母改為大寫字母;

3、有如下程序, 請給出兩次調用show_num函數的執行結果,並說明為什么:

 num = 20

   def show_num(x=num):
       print(x)

   show_num()

   num = 30

   show_num()

  

4、有列表 li = ['alex', 'egon', 'smith', 'pizza', 'alen'], 請以列表中每個元素的第二個字母倒序排序;

5、有名為poetry.txt的文件,其內容如下,請刪除第三行;

昔人已乘黃鶴去,此地空余黃鶴樓。

   黃鶴一去不復返,白雲千載空悠悠。

   晴川歷歷漢陽樹,芳草萋萋鸚鵡洲。

   日暮鄉關何處是?煙波江上使人愁。

  

6、有名為username.txt的文件,其內容格式如下,寫一個程序,判斷該文件中是否存在"alex", 如果沒有,則將字符串"alex"添加到該文件末尾,否則提示用戶該用戶已存在;

   pizza
   alex
   egon

  

7、有名為user_info.txt的文件,其內容格式如下,寫一個程序,刪除id為100003的行;

   pizza,100001
   alex, 100002
   egon, 100003

  

8、有名為user_info.txt的文件,其內容格式如下,寫一個程序,將id為100002的用戶名修改為alex li

   pizza,100001
   alex, 100002
   egon, 100003

  

9、寫一個計算每個程序執行時間的裝飾器;

10、lambda是什么?請說說你曾在什么場景下使用lambda?

11、題目:寫一個搖骰子游戲,要求用戶壓大小,賠率一賠一。

要求:三個骰子,搖大小,每次打印搖骰子數。


免責聲明!

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



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