文件操作和函數
阿新 • • 發佈:2018-05-26
所有 最大值 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 計算圓形面積():
pass
(4)寫函數,傳入一個參數n,返回n的階乘
例如:cal(7)
計算7*6*5*4*3*2*1
(5)編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,後續的函數都無需再輸入用戶名和密碼
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.以上每條語名執行完畢後,要顯示這條語句影響了多少條紀錄。 比如查詢語句 就顯示 查詢出了多少條、修改語句就顯示修改了多少條等。
文件操作和函數