Python练习题详解之字典的内置方法(小白友好)

Python练习题详解之字典的内置方法(小白友好)

你好!欢迎来到Python练习题详解系列。为了让小白(也就是我本人)更好的理解代码,打好编程基础,我决定仔细地解说一些练习题。欢迎阅读!

首先,我们来看看字典的各种内置方法~

1. fromkeys()

fromkeys()方法用于创建并返回一个新的字典,它有两个参数:第一个参数是字典的键;第二个参数是可选的,是传入键对应的值。如果不能提供,那么默认是None。

Python练习题详解之字典的内置方法(小白友好)

如图,fromkeys()方法并不会把'one', 'two', 'three'分别赋值给 1、2 和 3,因为fromkeys()把('one', 'two', 'three')当成一个值了。

2. keys()、values()、items()

keys()用于返回字典中的键 key

values()用于返回字典中的所有值 value

items()用于返回字典中的所有的键和值 key + value

举个栗子:

Python练习题详解之字典的内置方法(小白友好)

3. get(),clear()

get()方法提供了更宽松的方式去访问字典项获取对应的值,第一个参数是一个key,当key不存在的时候,get()方法并不会报错,只是默默地返回了一个None,表示啥也没找到, 如果希望找不到数据时返回指定的值,那么可以在第二个参数设置对应的默认返回值:

Python练习题详解之字典的内置方法(小白友好)

如果不知道一个键是否在字典中,也可以使用成员资格操作符(in或not in)来判断。

如果需要清空一个字典,则使用clear()方法:

Python练习题详解之字典的内置方法(小白友好)

4. copy()

copy和赋值不一样,copy是一个浅拷贝,只拷贝表面的内容,而赋值是完完全全一样的。如下面例子所示:

Python练习题详解之字典的内置方法(小白友好)

5. pop()和popitem()

pop()是给定键弹出对应的值,而popitem()是弹出一个随机的项,没有顺序,因为字典是没有顺序的。

弹出来之后原来字典里的项就会消失啦。

如图:

Python练习题详解之字典的内置方法(小白友好)

6. setdefault()

这个关键字和get() 有点像,但是如果他找不到对应的key,不像gets一样返回一个none,而是自动把它添加进去。

Python练习题详解之字典的内置方法(小白友好)

7.update()

update可以用来替换旧的value,如图所示:

Python练习题详解之字典的内置方法(小白友好)

题目:

又到了紧张刺激的动手环节!

这次我们的要求是用函数实现一个登录的系统,run出来的结果如下:

part1:

Python练习题详解之字典的内置方法(小白友好)

part2:

Python练习题详解之字典的内置方法(小白友好)

part3:

Python练习题详解之字典的内置方法(小白友好)

思路:如果要用到函数的形式来写,那么我们可以把一个指令作为一个函数,初步构想应该是有3个函数,最下面的可以调用上面两个函数。

那么最下面的函数应该是print出前面的三行字,分别是新建用户,登录账号和退出程序。在最下面的函数中,让用户输入指令,如果指令为1,调用1对应的函数,如果为2,调用2对应的函数,如果为3,可以直接结束程序。

为什么要把print三行字的函数放在最后呢,因为函数调用的过程是从下往上寻找,如果交换了位置,就会报错啦。

那么现在来到了我们的前面两个函数,第一个我们就做一个新建账户的函数,在这个函数中,我们首先用成员资格操作符来判断是否有重复的用户名,语法为:如果用户输入的用户名 in 我们的字典,那么我们要说,这个用户名已经被注册了。如果没有重复的,那么我们就让用户输入密码,然后把这个用户名和密码塞进我们的字典里面。可以用到我们的set default语法,活学活用啦~

第二个函数呢,我们来做一个登录函数,

当用户输入的用户名在我们的字典里(又用到成员资格操作符啦),我们就让用户输入密码。然后我们开始判断密码正不正确,怎么判断呢?我们看看这个password 是不是等于 字典.get(用户名),如果等于,那就说登录成功,如果不等于,那就要重新输入密码啦。

而当用户名不在字典里,我们就让用户重新输入用户名,重新开始判断

所以这里会用到分支和循环~会是一个很有趣的过程。

需要注意的是,如果在一个函数里想要结束函数,虽然后面还有代码但是你不想再继续运行,这时你就可以直接用 return这条语句来结束函数。

答案:

Python练习题详解之字典的内置方法(小白友好)

晚安~~ 小羊小兔也该休息啦~