python 练习题(16-20)

16、现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

17、实现两个字典的相加,不同的key对应的值保留,相同的key对应的值相加后保留,如果是字符串就拼接

18、斐波那契数列1,2,3,5,8,13,21.....根据这样的规律,编程求出400万以内最大的斐波那契数,并求出他是第几个斐波那契数。

19、随意写一个20行以上的文件。运行程序,先将内容读到内存中,用列表存储。接收用户输入页码,每页5条,仅输出当前页的内容。

20、三级菜单

 

 16、现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

t1 = (('a'),('b'))
t2 = (('c'),('d'))
#不使用lambda 列表推导式+zip l = [{i:j} for i,j in zip(t1,t2)] print(l) #[{'a': 'c'}, {'b': 'd'}] #使用map+lambda +zip res = list(map(lambda t:{t[0]:t[1]},zip(t1,t2))) print(res)

 

17、

dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"}
dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"}
要求:实现两个字典的相加,不同的key对应的值保留,相同的key对应的值相加后保留,如果是字符串就拼接
如上例得到结果为:dictc = {"a":1,"b":5,"c":3,"d":9,"e":7,"m":9,"f":"hello","k":"world"}

dic = {}
dicta = {'a':1,'b':2,'c':3,'d':4,'f':'hello'}
dictb = {'b':3,'d':5,'e':7,'m':9,'k':'world'}
for a in dicta:
     if a in dictb:
          dic[a] = dicta[a] + dictb[a]
     else:
          dic[a] = dicta[a]
for b in dictb:
     if b not in dicta:
          dic[b] = dictb[b]
print(dic)

#或者
dictc = dicta
for key in dictb:
    if key in dictc:
        dictc[key] = dictc[key]+dictb[key]
    else:
        dictc[key] = dictb[key]

print(dictc)

 18、斐波那契数列1,2,3,5,8,13,21.....根据这样的规律,编程求出400万以内最大的斐波那契数,并求出他是第几个斐波那契数。

count = 2 #第几个数
a,b = 1,2 #起始两个数
while a+b < 4000000:
    c = a+b
    a = b
    b = c
    count += 1
print(c) 
print(count)

 

19、随意写一个20行以上的文件。运行程序,先将内容读到内存中,用列表存储。

接收用户输入页码,每页5条,仅输出当前页的内容。
with open('file',encoding='utf-8') as f:
     content = f.readlines()

page_num = input('请输入页码:').strip()
page_num = int(page_num)
pages,mod = divmod(len(content),5)  #总页数,有没有剩余的行
if mod: #余数不为0(比如有21条)
     pages += 1  #页码加1

if page_num>pages or page_num<1: #输入的页码必须小于总页数
     print('输入有误')
elif page_num==pages and mod!=0:  #输入的页码刚好是最后一页,且余数不为0
     for i in range(mod): #每次读5条数据(不用切片,切片占内存)
          print(content[(page_num - 1) * 5 + i].strip()) #(3-1)*5
else:
     for i in range(5):   #每次读5条数据
          print(content[(page_num - 1) * 5 + i].strip()) #(2-1)*5 + 0,1,3,4

 

20、三级菜单

# 1、递归的方式
dic = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}
def threeMenu(dic):
    while True:
        for k in dic:
            print(k)        #打印城市:北京 上海 山东
        key = input('输入城市(b返回上一层,q退出):')  #key='北京'
        if key=='b' or key=='q': #
            return key
        elif key in dic.keys() and dic[key]:   #查询的key存在和dic['北京']有内容
            ret = threeMenu(dic[key])    #调用一次函数dic = dic['北京']
            if ret=='q':   #if ret='b',什么都不做,if结束,继续循环
                return 'q' #if ret=q,逐层返回上一次调用的函数,直到没有调用
        elif (not dic.get(key)) or (not dic[key]): #key不存在或value为空
            print('\033[31;1m查询的城市不存在或没有下级城市,请重新输入\033[0m')
            continue #重新循环

threeMenu(dic)


#2、堆栈的方式
menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}
l = [menu]  #先有一个栈
while l:  #如果l不为空
    for key in l[-1]:
        print(key) #展示城市列表
    k = input('请输入城市【b 返回上一级,q 退出】:').strip()
    if k in l[-1].keys() and l[-1][k]: #如果key存在或key的值不为空
        l.append(l[-1][k]) #将这级城市加入字典
    elif k=='b': #b退出,删除这个key下面的所有
        l.pop()
    elif k=='q':
        break
    else:
        print('\033[31;1m查询的城市不存在或没有下级城市,请重新输入\033[0m')
        continue

 



 

猜你喜欢

转载自www.cnblogs.com/chenhongl/p/10659006.html