本文是學習齊老師的《python全棧工程師》課程的筆記,歡迎學習交流。同時感謝齊老師的精彩傳授!
習題01.
編寫函數,對單詞中的字母實作如下操作:
– 根據參數位置,将單詞中的字母轉化為大寫或者小寫
– 傳回轉化之後的單詞
def convert(word, low=True):
if low:
return word.lower()
else:
return word.upper()
w = 'Physics'
print(convert(w))
print(convert(w, low=False))
運作效果圖:

習題02.
- 編寫函數,計算平面直角坐标系中兩點的距離,函數的參數是兩點的坐标。
- 編寫函數,判斷某字元串中是否含有指定集合中的字母。
def distance(pa, pb):
import math
lst = [(x-y)**2 for x, y in zip(pa, pb)]
# lst = map(lambda x, y: (x-y)**2, pa, pb)
d = math.sqrt(sum(lst))
return d
pa = (1, 2)
pb = (3, 4)
print('d= ', distance(pa, pb))
運作效果圖:
# 編寫函數,判斷某字元串中是否含有指定集合中的字母。
# 方法一:
def contain_any_1(seq, aset):
for c in seq:
if c in aset:
return True
return False
# 方法二:用filter函數
def contain_any_2(seq, aset):
for i in filter(aset.__contains__, seq):
return True
return False
# 方法三:用集合的交集
def contain_any_3(seq, aset):
return bool(aset.intersection(seq))
seq = 'apython'
aset = set(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'])
result1 = contain_any_1(seq, aset)
result2 = contain_any_2(seq, aset)
result3 = contain_any_3(seq, aset)
print(result1)
print(result2)
print(result3)
運作效果圖:
習題03.
- 在字典中有get方法,但是清單中沒有。編寫函數,對清單實作類似字典中get方法的功能。
# 方法一:下标可能會越界報錯,比如清單長度為3,i=-4就報錯了
def get_by_index_1(lst, i, value=None):
if i < len(lst):
return lst[i]
else:
return value
# 方法二:
def get_by_index_2(lst, i, value=None):
if -len(lst) <= i < len(lst):
return lst[i]
else:
return value
# 方法三:
def get_by_index_3(lst, i, value=None):
try:
return lst[i]
except IndexError:
return value
lst = [1, 2, 3]
while True:
try:
idx = int(input('input index of list: '))
except ValueError:
print('Index should be int.')
continue
value = input('input value: ')
if value != 'q':
r1 = get_by_index_1(lst, idx, value)
r2 = get_by_index_2(lst, idx, value)
r3 = get_by_index_3(lst, idx, value)
print(r1, r2, r3)
else:
break
運作效果圖:(這裡我故意輸入負數,讓方法一報錯。哈哈~)
習題04.
- 假設有檔案名:py10.py,py2.py,py1.py,py14.py,編寫對檔案名進行排序的函數
![]()
Python學習筆記:1.4.5 習題課04
import re
def select_numbers(s):
# 正規表達式:此處表示按照整數對字元串 s 進行分割
# re.compile(r'(\d+)') 建立一個正規表達式,表示找出所有的整數
# 相當于 re.split(r'(\d+)', s),以數字為分割符,對 s 進行分割
pieces = re.compile(r'(\d+)').split(s)
# 将數字字元串組成的清單,轉換成整數數字的清單
pieces[1::2] = map(int, pieces[1::2])
return pieces
def sort_filename(filename):
return sorted(filename, key=select_numbers)
files = ['py10.py', 'py2.py', 'py1.py', 'py14.py']
result = sort_filename(files)
print(files)
print(result)
運作效果圖:
補充知識:sorted函數
注意函數的另外一種寫法:
# 這裡的:int表示參數的類型,-> int表示函數傳回值的類型,
# 但是這些是給人看的,對python解析器來說,跟不寫沒什麼兩樣
def add(x:int, y:int) -> int:
return x + y
s = add(2, 3)
print(s) # 5
s2 = add('hello', 'world') # 雖然定義int類型,傳字元串依然可以。是以那樣寫沒啥用,哈哈
print(s2) # helloworld
# 以上函數跟下面函數相同
def add(x, y):
return x + y