《Python核心编程》第7章 映像和集合类型 练习

本文介绍了Python字典和集合在实际应用中的多种操作,包括字典合并、列表转字典、用户登录系统管理、股票投资数据系统、雇员信息管理以及集合运算。通过实例展示了如何实现用户登录记录、删除用户、图形界面、口令加密、数据排序、以及集合的并集、交集等操作。同时,提供了对输入数据的合法性检查,如用户名限制和排序注意事项。
摘要由CSDN通过智能技术生成

7–1. 字典方法。

哪个字典方法可以用来把两个字典合并到一起?

#update方法
7–2. 字典的键。我们知道字典的值可以是任意的Python 对象,那字典的键又如何呢?请试着将除数字和字符串以外的其他不同类型的对象作为字典的键,看一看,哪些类型可以,哪些不行?对那些不能作字典的键的对象类型,你认为是什么原因呢?

#字典的健必须是可哈希的对象,包括所有不可变类型,和实现了__hash__()特殊方法的类。对于列表之类的可变对象,不能作为字典的键。因为解释器调用哈希函数,来根据键值计算得到数据的存储位置,如果键是可变的,那么位置的计算就会不可靠。
7–3. 字典和列表的方法。
(a) 创建一个字典,并把这个字典中的键按照字母顺序显示出来。
(b) 现在根据已按照字母顺序排序好的键,显示出这个字典中的键和值。
(c)同(b),但这次是根据已按照字母顺序排序好的字典的值,显示出这个字典中的键和值。(注意:对字典和哈希表来说,这样做一般没有什么实际意义,因为大多数访问和排序(如果需要)都是基于字典的键,这里只把它作为一个练习。)
dc = {'hell': 'x', 'hello': 'tree', 'test': 'failed'}
for x in sorted(dc):
    print x,

for x in sorted(dc):
    print 'key=', x, 'value=', dc[x]

items = dc.items()
for value in sorted(dc.values()):
    for k, v in items:
        if value == v:
            print 'key=', k, 'value=', v
            items.remove((k, v))
            break

7-4. 建立字典。

给定两个长度相同的列表,比如说,列表[1, 2, 3,...]和['abc', 'def','ghi',...],用这两个列表里的所有数据组成一个字典,像这样:{1:'abc', 2: 'def', 3: 'ghi',...}

def build_dict(list1, list2):
    assert len(list1) == len(list2)
    return dict(zip(list1, list2))

if __name__ == '__main__':
    list1 = [1, 2, 3, 4]
    list2 = ['abc', 'def', 'ghi', 'jkl']
    print build_dict(list1, list2)
7–5. userpw2.py.

下面的问题和例题7.1 中管理名字-密码的键值对数据的程序有关。
(a)修改那个脚本,使它能记录用户上次的登录日期和时间(用time 模块),并与用户密码一起保存起来。程序的界面有要求用户输入用户名和密码的提示。无论户名是否成功登录,都应有提示,在户名成功登录后,应更新相应用户的上次登录时间戳。如果本次登录与上次登录在时间上相差不超过4 个小时,则通知该用户: “You already logged in at: <last_ login_timestamp>.”
(b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名字和他们的密码的清单。
(c) 口令目前没有加密。请添加一段对口令加密的代码(请参考crypt, rotor, 或其它加密模块)
(d) 为程序添加图形界面,例如,用Tkinter 写。
(e) 要求用户名不区分大小写。
(f) 加强对用户名的限制,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值