zoukankan      html  css  js  c++  java
  • 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('33[31;1m查询的城市不存在或没有下级城市,请重新输入33[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('33[31;1m查询的城市不存在或没有下级城市,请重新输入33[0m')
            continue

     



     

  • 相关阅读:
    requests模块
    爬虫基础
    forms组件
    分页器组件
    cookie与session组件
    Auth模块
    中间件组件
    git
    Ajax
    《Java程序设计》实验二 实验报告
  • 原文地址:https://www.cnblogs.com/chenhongl/p/10659006.html
Copyright © 2011-2022 走看看