練習題
文件處理相關
-
編碼問題
- 請說明python2 與python3中的默認編碼是什么?
- 為什么會出現中文亂碼?你能列舉出現亂碼的情況有哪幾種?
- 如何進行編碼轉換?
-
#-*-coding:utf-8-*-
的作用是什么? -
解釋py2 bytes vs py3 bytes的區別
-
文件處理
- r和rb的區別是什么?
- 解釋一下以下三個參數的分別作用
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編碼的方式打開
函數基礎:
- 寫函數,計算傳入數字參數的和。(動態傳參)
- 寫函數,用戶傳入修改的文件名,與要修改的內容,執行函數,完成整個文件的批量修改操作
- 寫函數,檢查用戶傳入的對象(字符串、列表、元組)的每一個元素是否含有空內容。
-
寫函數,檢查傳入字典的每一個value的長度,如果大於2,那么僅保留前兩個長度的內容,並將新內容返回給調用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]} PS:字典中的value只能是字符串或列表
-
解釋閉包的概念
#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. 閉包:函數里面嵌套了一個子函數,當外部函數執行的時候,內部函數被返回了,返回了內存地址,然后內部函數在外面被執行的時候,調用了外部函數的變量。。
函數進階:
- 寫函數,返回一個撲克牌列表,里面有52項,每一項是一個元組
- 例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃A’)]
-
寫函數,傳入n個數,返回字典{‘max’:最大值,’min’:最小值}
例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}
-
寫函數,專門計算圖形的面積
- 其中嵌套函數,計算圓的面積,正方形的面積和長方形的面積
- 調用函數area(‘圓形’,圓半徑) 返回圓的面積
- 調用函數area(‘正方形’,邊長) 返回正方形的面積
- 調用函數area(‘長方形’,長,寬) 返回長方形的面積
def area(): def 計算長方形面積(): pass def 計算正方形面積(): pass def 計算圓形面積(): pass
-
寫函數,傳入一個參數n,返回n的階乘
例如:cal(7) 計算7*6*5*4*3*2*1
-
編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,后續的函數都無需再輸入用戶名和密碼
生成器和迭代器
- 生成器和迭代器的區別?
- 生成器有幾種方式獲取value?
-
通過生成器寫一個日志調用方法, 支持以下功能
- 根據指令向屏幕輸出日志
- 根據指令向文件輸出日志
- 根據指令同時向文件&屏幕輸出日志
-
以上日志格式如下
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')
內置函數
-
用map來處理字符串列表,把列表中所有人都變成sb,比方alex_sb
name=['alex','wupeiqi','yuanhao','nezha']
-
用filter函數處理數字列表,將列表中所有的偶數篩選出來
num = [1,3,5,6,7,8]
-
如下,每個小字典的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、題目:寫一個搖骰子游戲,要求用戶壓大小,賠率一賠一。
要求:三個骰子,搖大小,每次打印搖骰子數。