零基础学习Python 作业 第26章

本文探讨了Python字典的多个方面,包括是否支持一键多值、为不存在的键赋值的效果、成员资格运算符的效率对比、键与值的类型限制、特定代码执行后的字典内容预测、以及字典的复制方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

============ CH26 homework ============

0 Python的字典是否支持一键(Key)多值(Vaule)?

Answer: 不支持,见后测试代码

>>> a = dict(one = 1, two = 2, three = 3)
>>> b = dict(one = 1, two = 2, three = 3, one = 4)
SyntaxError: keyword argument repeated

1 在字典中,如果试图为一个不存在的键(Key)赋值会怎么样?

Answer: 会加入字典中(也就是创建一个Key)

>>> a['four'] = 4
>>> a
{'four': 4, 'one': 1, 'two': 2, 'three': 3}

2 成员资格运算符(in 和 not in)可以检查一个元素是否在列表中,也可以检查一个键
(Key)是否存在字典中,哪种检查效率更高?为什么?

Answer: 我认为检查Key更快,因为列表中先检查index再核对的值
小甲鱼的答案: 在字典中检查Key是否存在比在序列中检查指定元素是否存在更高效。
原因:字典的原理是使用哈希算法存储,一步到位,不需要使用查找算法进行匹配,因此时间
复杂度是O(1),效率非常高。(关于如何使用如何使用哈希算法存储的具体原理参考[1])
哈希学习

3 Python对键(Key)和值(Vaule)有没有类型限制?

Answer: 哈希对象
小甲鱼的答案: Python对键的要求相对严格一些,要求他们必须是可哈希的对象,不能是可变
类型(包括变量、列表、字典本身等)

但是Python对值是没有任何限制的,他们可以是任意的python对象。

4 请目测下面代码执行后,字典dict1的内容是什么?

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

Answer: {1 : ‘数字’, 3 : ‘数字’}
备注:fromkeys()是创建新的字典,不能用来修改字典!

5 如果你需要将字典dict1 = {1 : ‘one’, 2 : ‘two’, 3 : ‘three’}拷贝到dict2,
你该怎么做?

Answer:

# dict1 = {1 : 'one', 2 : 'two', 3 : 'three'}
# dict2 = dict1.copy()
>>> dict1 = {1 : 'one', 2 : 'two', 3 : 'three'}
>>> dict2 = dict1.copy()
>>> dict2
{1: 'one', 2: 'two', 3: 'three'}

Practice

0 尝试编写一个用户登录程序(这次尝试将功能封装成函数),程序实现如图:

code
# Analysis
# 拆分功能:
# 1、新建用户模块
# 2、登录模块
# 3、显示模块
# 4、字典一个

user_data = {}

def new_user():
    idea = '请输入用户名: '
    while True:
        name = input(idea)
        if name in user_data:
            idea = '此用户名已经被占用,请重新输入: '
            continue
        else:
            break

    passwd = input('请输入密码: ')
    user_data[name] = passwd
    print('注册成功, 快试试登录吧')

def login():
    idea = '请输入用户名: '
    while True:
        name = input(idea)
        if name not in user_data:
            idea = '此用户名未注册,请重新输入: '
            continue
        else:
            break

    passwd = input('请输入密码: ')
    pwd = user_data.get(name)
    if passwd == pwd:
        print('欢迎进入系统,退出点击右上角的 x !')
    else:
        print('密码错误!')


def showmenu():
    idea = '''
    |---- 新建用户(N/n) ----|
    |---- 登录账号(E/e) ----|
    |---- 退出系统(Q/q) ----|
    |---- 输入指令代码:  '''

    while True:
        chosen = False
        while not chosen:
            choice = input(idea)
            if choice not in 'NnEeQq':
                print('你输入的指令代码错误,请重新输入!')
                continue
            else:
                chosen = True

        if choice == 'q' or choice == 'Q':
            break
        if choice == 'n' or choice == 'N':
            new_user()
        if choice == 'e' or choice == 'E':
            login()

showmenu()

# Result

    |---- 新建用户(N/n) ----|
    |---- 登录账号(E/e) ----|
    |---- 退出系统(Q/q) ----|
    |---- 输入指令代码:  N
请输入用户名: Jay
请输入密码: 123456
注册成功, 快试试登录吧

    |---- 新建用户(N/n) ----|
    |---- 登录账号(E/e) ----|
    |---- 退出系统(Q/q) ----|
    |---- 输入指令代码:  N
请输入用户名: Lisa
请输入密码: 123456
注册成功, 快试试登录吧

    |---- 新建用户(N/n) ----|
    |---- 登录账号(E/e) ----|
    |---- 退出系统(Q/q) ----|
    |---- 输入指令代码:  S
你输入的指令代码错误,请重新输入!

    |---- 新建用户(N/n) ----|
    |---- 登录账号(E/e) ----|
    |---- 退出系统(Q/q) ----|
    |---- 输入指令代码:  n
请输入用户名: JJ
请输入密码: 123456
注册成功, 快试试登录吧

    |---- 新建用户(N/n) ----|
    |---- 登录账号(E/e) ----|
    |---- 退出系统(Q/q) ----|
    |---- 输入指令代码:  E
请输入用户名: Jay
请输入密码: 123456
欢迎进入系统,退出点击右上角的 x !

    |---- 新建用户(N/n) ----|
    |---- 登录账号(E/e) ----|
    |---- 退出系统(Q/q) ----|
    |---- 输入指令代码:  q
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值