zoukankan      html  css  js  c++  java
  • 字典&函数(小甲鱼课后题)python超级入门

    0.尝试利用字典的特性编写一个通讯录程序

    print('|--- 欢迎进入通讯录程序 ---|')
    print('|--- 1:查询联系人资料 ---|')
    print('|--- 2:插入新的联系人 ---|')
    print('|--- 3:删除已有的联系人 ---|')
    print('|--- 4:查看所有通讯录 ---|')
    print('|--- 5:退出通讯录程序 ---|')
    
    contacts = dict()
    
    while True:
        instr = input('
    请输入指令编号:')
    
        if instr.isdigit():
            instr = int(instr)
        else:
            print('对不起,输入错误!请重新输入:')
    #查询联系人
        if instr == 1:
            name = input('请输入要查询的联系人姓名:')
            if name in contacts:
                print(name + ':' + contacts[name])
            else:
                print('对不起,您查找的联系人不在通讯录中!')
    #插入新的联系人
        if instr == 2:
            name = input('请输入联系人姓名:')
            if name in contacts:
                print('您输入的联系人已存在!')
                print(name + ':' + contacts[name])
                if input('是否修改用户资料(YES/NO):').upper() == 'YES':
                    contacts[name] = input('请输入用户联系电话:')
                    print('修改成功!')
            else:
                contacts[name] = input('请输入联系人电话:')
                print('添加成功!')
    #删除已有的联系人
        if instr == 3:
            name = input('请输入要删除的联系人姓名:')
            if name in contacts:
                del(contacts[name])
                #contacts.clear()    清空通讯录
                print('已删除!')
            else:
                print('对不起,您要删除的联系人不在通讯录中')
    #查看所有通讯录
        if instr == 4:
            print('Name	PhoneNum')
            if len(contacts):
                for key,value in contacts.items():
                    print(key,value)
            else:
                print('对不起,通讯录没有联系人!')
    #退出通讯录程序
        if instr == 5:
            break
    print('感谢使用通讯录')

     1.尝试编写一个用户登录程序(这次尝试将功能封装成函数)

    #注册
    def enroll():
        name = input('请输入用户名:')
        while name in logon:
            name = input('用户名已被使用!请重新输入用户名:')
        logon[name] = input('请输入密码:')
        print('恭喜注册成功!')
    #登录
    def log():
        name = input('请输入用户名:')
        while name not in logon:
            name = input('对不起,用户名不存在!请重新输入:')
        pwd = input('请输入密码:')
        while pwd != logon[name]:
            pwd = input('对不起密码错误!请重新输入密码:')
        print('欢迎成功进入程序!')
            
    
    
    print('|--- 欢迎进入程序 ---|')
    print('|--- N/n:注册账号 ---|')
    print('|--- E/e:登录账号 ---|')
    print('|--- Q/q:退出程序 ---|')   
    
    logon = dict()
    
    while True:
        inchar = input('
    请输入指令代码:')
        if inchar.upper() == 'N':
            enroll()
        elif inchar.upper() == 'E':
            log()
        elif inchar.upper() == 'Q':
            print('欢迎下次登录!')
            break
        else:
            print('输入错误!')

    这里小甲鱼的意图应该是把整个过程封装起来,我先定义了登录和注册的函数,后面部分也尝试了定义一个loan函数从目录到分支结束,最后直接调用一个loan()函数,但是报错,关于logon这个字典的定义,决定后面再进行加工修改了。

    后面可以改进的地方:1、修改密码功能;2、不能无限次输入密码

     

    字典  {key:value}  所以字典是一种映射类型,如果没有映射关系有{  }也只是集合

    >>> dict1 = {'李宁':'一切皆有可能','耐克':'Just do it'}   

    >>> print('耐克的口号是:',dict1['耐克'])

    耐克的口号是: Just do it

    >>> dict2 = dict((('F',70),('i',105),('C',67)))  #可以是元组

    >>> dict2

    {'F': 70, 'i': 105, 'C': 67}

    >>> dict3 = dict(小甲鱼='让编程改变世界')   #小甲鱼加了’’会报错

    >>> dict3

    {'小甲鱼': '让编程改变世界'}

    >>> dict3['小甲鱼']='记得做课后练习'   #可以修改(覆盖),不支持一键key多值value

    >>> dict3

    {'小甲鱼': '记得做课后练习'}

    >>> dict3['Lucky']='苟且偷生'   #可以直接增加,给一个不存在的键赋值,自动添加进字典

    >>> dict3

    {'小甲鱼': '记得做课后练习', 'Lucky': '苟且偷生'}

    >>> dict1 = {}

    fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉。

    >>> dict1.fromkeys((1,2,3)) 

    {1: None, 2: None, 3: None}

    >>> dict1.fromkeys((1,2,3),'number')

    {1: 'number', 2: 'number', 3: 'number'}

    >>> dict1.fromkeys((1,2,3),('one','two','three'))

    {1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}   #以上情查询dict1实际其仍为空{}

    >>> dict1.fromkeys((1,3),'sum')   #重新创建,非单独修改13参数的值

    {1: 'sum', 3: 'sum'}

    访问KEY

    >>> dict1 = dict1.fromkeys(range(10),'ha')

    >>> dict1   #确保dict1被重新复制,不是空才能查看

    {0: 'ha', 1: 'ha', 2: 'ha', 3: 'ha', 4: 'ha', 5: 'ha', 6: 'ha', 7: 'ha', 8: 'ha', 9: 'ha'}

    >>> for eachkey in dict1.keys():
        print(eachkey)
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for eachvalue in dict1.values():
        print(eachvalue)
    ha
    ha
    ha
    ha
    ha
    ha
    ha
    ha
    ha
    ha
    >>> for eachitem in dict1.items():
        print(eachitem)    
    (0, 'ha')
    (1, 'ha')
    (2, 'ha')
    (3, 'ha')
    (4, 'ha')
    (5, 'ha')
    (6, 'ha')
    (7, 'ha')
    (8, 'ha')
    (9, 'ha')
    
    >>> print(dict1[9])  #访问第10位
    ha
    >>> print(dict1[10])   #不存在会报错
    Traceback (most recent call last):
      File "<pyshell#25>", line 1, in <module>
        print(dict1[10])
    KeyError: 10
    >>> dict1.get(10)     #实际上返回None
    >>> print(dict1.get(10))
    None
    >>> dict1.get(10,'没有值')
    '没有值'
    >>> 17 in dict1  #当不知道一个值是否在字典里
    False
    >>>dict1.clear()  #清除字典
    >>>dict1
    {}
    >>> dict1.pop(4) 
    'ha'
    >>> dict1.popitem()
    (9, 'ha')
    >>> dict1.setdefault(88)
    >>> dict1
    {0: 'ha', 1: 'ha', 2: 'ha', 3: 'ha', 5: 'ha', 6: 'ha', 7: 'ha', 8: 'ha', 88: None}
    >>> dict1.setdefault(5)
    'ha'
    >>> dict2 = {27:'huohuo'}  #update
    >>> dict1.update(dict2)
    >>> dict1
    {0: 'ha', 1: 'ha', 2: 'ha', 3: 'ha', 5: 'ha', 6: 'ha', 7: 'ha', 8: 'ha', 88: None, 27: 'huohuo'}
  • 相关阅读:
    十四、内存泄露和强软弱虚引用
    十五、对象的内存布局
    Android Service全解(三)之 Foreground Service(转)
    android中不同activity的传参调用和返回
    Android Service全解(一)之 startService(转)
    Android Service全解(二)之 bindService(转)
    android单点、多点触控之MotionEvent
    关于创建进程函数CreateProcess()字符串参数的说明
    sql中连接两个不同的数据库(A在同一个服务器,B不在一个服务器)
    asp.net小数点四舍五入的方法
  • 原文地址:https://www.cnblogs.com/mumulucky/p/13526789.html
Copyright © 2011-2022 走看看