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
来源: http://www.bubuko.com/infodetail-3088995.html