1. 程式人生 > >Day16--作業(內建函式和函式的遞迴)

Day16--作業(內建函式和函式的遞迴)

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)