1. 程式人生 > >文件操作和函數

文件操作和函數

所有 最大值 portfolio 正方形 bubuko txt lam smi 例如

Part 1 文件處理

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")

Part 2 函數基礎

(1)寫函數,計算傳入數字參數的和。(動態傳參)
(
2)寫函數,用戶傳入修改的文件名,與要修改的內容,執行函數,完成整個(3)文件的批量修改操作 (4)寫函數,檢查用戶傳入的對象(字符串、列表、元組)的每一個元素是否含有空內容。 (4)寫函數,檢查傳入字典的每一個value的長度,如果大於2,那麽僅保留前兩個長度的內容,並將新內容返回給調用者。 dic = {"k1": "v1v1", "k2": [11,22,33,44]} PS:字典中的value只能是字符串或列表 (5)解釋閉包的概念

Part 3 函數進階

(1)寫函數,返回一個撲克牌列表,裏面有52項,每一項是一個元組
例如:[(‘紅心’,
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 計算圓形面積(): pass4)寫函數,傳入一個參數n,返回n的階乘 例如:cal(7) 計算7*6*5*4*3*2*15)編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,後續的函數都無需再輸入用戶名和密碼

Part 4 生成器和叠代器

(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)

Part 5 內置函數

(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的股票有哪些

Part 6

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、題目:寫一個搖骰子遊戲,要求用戶壓大小,賠率一賠一。

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

綜合作業:

  現要求你寫一個簡單的員工信息增刪改查程序,需求如下:

技術分享圖片

當然此表你在文件存儲時可以這樣表示

1,Alex Li,22,13651054608,IT,2013-04-01
2,Jack Wang,28,13451024608,HR,2015-01-07
3,Rain Wang,21,13451054608,IT,2017-04-01
4,Mack Qiao,44,15653354208,Sales,2016-02-01
5,Rachel Chen,23,13351024606,IT,2013-03-16
6,Eric Liu,19,18531054602,Marketing,2012-12-01
7,Chao Zhang,21,13235324334,Administration,2011-08-08
8,Kevin Chen,22,13151054603,Sales,2013-04-01
9,Shit Wen,20,13351024602,IT,2017-07-03
10,Shanshan Du,26,13698424612,Operation,2017-07-02

要求如下:

1.可進行模糊查詢,語法至少支持下面3種查詢語法:

    find name,age from staff_table where age > 22

    find * from staff_table where dept = "IT"

    find * from staff_table where enroll_date like "2013"
2.可創建新員工紀錄,以phone做唯一鍵(即不允許表裏有手機號重復的情況),staff_id需自增

    語法: add staff_table Alex Li,25,134435344,IT,2015-10-29
3.可刪除指定員工信息紀錄,輸入員工id,即可刪除

    語法: del from staff_table where  id=3
4.可修改員工信息,語法如下:

UPDATE staff_table SET dept="Market" WHERE  dept = "IT" 把所有dept=IT的紀錄的dept改成Market
UPDATE staff_table SET age=25 WHERE  name = "Alex Li"  把name=Alex Li的紀錄的年齡改成2
5.以上每條語名執行完畢後,要顯示這條語句影響了多少條紀錄。 比如查詢語句 就顯示 查詢出了多少條、修改語句就顯示修改了多少條等。

文件操作和函數