Day16--作業(內建函式和函式的遞迴)
阿新 • • 發佈:2018-12-14
1.將names = ['egon','alex_sb','wupeiqi','yuanhao']中的名字全部變大寫
names = ['egon','alex_sb','wupeiqi','yuanhao'] 第一種 手動 new_name = [] for name in names: new_name.append(name.upper()) print(new_name) 第二種:列表生成式 new_name = [name.upper() for name in names ] print(new_name) 第三種:使用map+匿名函式 res = map(lambda x:x.upper(),names) print(list(res))
2.將names = ['egon','alex_sb','wupeiqi','yuanhao']中以sb結尾的名字過濾掉,然後儲存剩下的名字長度
names = ['egon','alex_sb','wupeiqi','yuanhao'] new_name = [] 手動 for name in names: if name.endswith('sb'): pass else: new_name.append(name) print(new_name) 列表生成式 new_name = [name for name in names if not name.endswith('sb')] print(new_name) 使用filter函式 res = filter(lambda name:not name.endswith('sb'),names) print(list(res))
3.求檔案a.txt中最長的行的長度(長度按字元個數計算,需要使用max函式)
with open('a.txt')as f:
res = []
for line in f:
res.append(len(line))
print(max(res))
4.求檔案a.txt中總共包含的字元個數?思考為何在第一次之後的n次sun求和得到的結果為0?(需要使用sum函式)
with open('a.txt')as f: res = [] for line in f: res.append(len(line)) print(sum(res))
5.思考題 with open('a.txt')as f: g = (len(line) for line in f ) print(sum(g)) # 為何會報錯? 答:g不是一個可迭代物件
6.檔案shopping.txt內容如下 6.1求總共花了多少錢?
with open('shopping.txt') as f:
cost = []
for line in f:
line = line.strip('\n')
line = line.split(',')
cost.append(int(line[1]))
print(sum(cost))
6.2打印出所有商品的資訊,格式為[{'name':'xxx','price':333,'count':3}]
with open('shopping.txt')as f:
goods_info = []
for line in f :
line =line.strip('\n')
line = line.split(',')
good_info ={'name':line[0],
'price':line[1],
'count':line[2]
}
goods_info.append(good_info)
print(goods_info)
6.3求單價大於10000的商品資訊格式同上
with open('shopping.txt')as f:
goods_info = []
for line in f :
line =line.strip('\n')
line = line.split(',')
if int(line[1])>10000:
good_info ={'name':line[0],
'price':line[1],
'count':line[2]
}
goods_info.append(good_info)
print(goods_info)
7.想從一個按照從小到大排列的數字列表中找到指定的數字,遍歷的效率太低,用二分法(演算法的一種,演算法是解決問題的方法)可以極大的縮小問題規模
7.1實現類似於in的效果
nums = [1,2,4,5,6,7,8,9,8,11,17,18,19,46,47,58,69]
find_num = 3
這才是真的in方法哈哈哈
if find_num in nums:
print('find it')
else:
print('Not exsit')
=========================================
# 好吧
def func(find_num,nums):
print(nums)
if len(nums) == 0:
print('Not exsit')
return
mid_num = len(nums)//2
if find_num>nums[mid_num]:
# in the right
nums = nums[mid_num+1:]
func(find_num,nums)
elif find_num<nums[mid_num]:
# in the left
nums = nums[:mid_num]
func(find_num,nums)
else:
print('Find it')
func(find_num,nums)
7.2實現類似於l.index(30)的效果
def func(find_num,nums,start = 0,stop = len(nums)-1):
if start<=stop:
mid_num = start+(stop-start)//2
if find_num>nums[mid_num]:
start = mid_num+1
elif find_num<nums[mid_num]:
stop = mid_num-1
else:
print('find it')
return
func(find_num,nums,start,stop)
else:
print('not exist')
func(3,nums)