首页 > 编程语言 > 详细

python 练习题(16-20)

时间:2019-06-11 10:59:55      阅读:282      评论:0      收藏:0      [点我收藏+]

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

 



 

python 练习题(16-20)

原文:https://www.cnblogs.com/chenhongl/p/10659006.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!