第四关 第四关课后习题都是列表和字典的数据提取相关 主要对于列表偏移量,字典键值对的知识巩固 做这类题目的时候,我们不用一次到位,可以把每一层拆分出来,一步步去取值 先看第一个题目 list1 = [{‘嫉妒’:’envy’},{‘恨’:’hatred’},{‘爱’:’love’}] 这里是一个大列表,套三个字典 题目要求我们把 love 取出来 因为 love 在列表的第三个元素中,所以第一步,我们可以取出列表中的第三个元素(list1[2]),第三个元素的偏移量为2 取出来的结果是 {‘爱’:’love’} 接下来我们可以用提取字典的值的格式,取出list1[2]中键’爱’所对应的值,即’love’ 最后将取出的结果打印出来,print(list1[2][‘爱’]) 第二题,同样要把love取出来,但这里的是字典套列表的一个变量dict1 = {1:[‘cake’,’scone’,’puff’],2:[‘London’,’Bristol’,’Bath’],3:[‘love’,’hatred’,’envy’]} love 在字典的键 3 的值里面,所以第一步,先把 键为3 的值取出来 dict1[3] 注意上面这里的3不是偏移量,而是字典的键 取出后结果为[‘love’,’hatred’,’envy’],是一个列表, love 是该列表的第一个元素 可以直接通过偏移量取出,并打印出来 print(dict1[3][0]) 列表第一个元素的偏移量为0 来看个升级版的,进阶练习 
这样一个列表,很复杂,看着就头晕,那我们可以先把各个元素的距离稍微拉开一点,这样看着比较舒服 
可以看到,在最大的列表中,套着6个元素 题目要求我们取出“狼”,那我们数一下,“狼”在大列表的第6个元素内 
第一步,townee[5] 取出后又是一个列表,[ {‘主角’:’小红帽’, ‘配角1’:’外婆’, ‘配角2’:’猎人’}, {‘反面角色’:’狼’} ] ,则可以根据偏移量再取一遍,townee[5][1] 取到最后是一个字典 {‘反面角色’:’狼’},在根据键’反面角色’把值取出来即可 print(townee[5][1][‘反面角色’]) 大家可以多试一下,去取出不同的值 多练才会熟悉熟练,这样才会进步 正所谓“好记性不如烂笔头”,学编程自然也离不开多实操写代码。 编程大神最开始也是在bug中成长的,第一次有问题,自己去搜索解决,没解决的再提问,遇到的问题多了,搜索次数多了,自然印象就加深了。 第五关: 第五关的必做练习,比较简单,我讲快一点。然后再仔细讲一下进阶练习 必做练习里,简化一下题目的要求,其实就是:打印数字1到7,但不打印4 既然要打印多个数字,那我们用到循环的方式,for 循环 和 while 循环 都可以 那要求不打印4,就需要进行一个条件的判断,用到if语句 那我们就确定了解题的思路,循环 条件判断 先来看for循环的代码 
for num in range(1,8): num的值分别为1,2,3,4,5,6,7 if num != 4: print(num) !=是不等于的意思,当num不等于4的时候,执行打印语句 当num等于4的时候,由于不符合if的条件,也没有其他语句需要执行,所以会直接跳过,进行下一次的循环 再来看一下while 循环 
用while循环,且要规定循环次数的时候,我们需要提前定义一个变量n,用来限制循环的次数 这里我们定义了n=0,其实也可以n=1,但是后面要调整循环的放行条件,同学们完成练习的时候可以自己去试 while n < 7: 当n满足小于7的时候,进入循环 n = n 1,因为我们要从1开始打印,而n的初始值是0,所以先加1 if n != 4: # 当num != 4,执行打印语句;等于4时不打印。 print(n) 同理,判断n的值是否为4 必做练习讲完了,我们继续讲讲进阶练习 那我继续讲阶练习的讲解啦 进阶练习是一个换座位的题目,大家看到这个题目的时候,先不从程序的角度去想,会觉得应该怎么去实现轮换位置这个效果呢? 
我们正常的轮换座位,就是要实现123,231,312这样的轮换 那回到代码中,students = [‘小明’,’小红’,’小刚’] 是一个列表,我们需要把第一个元素提取出来,再重新写入到这个列表最后 student1 = students[0],我们把偏移量为0,也就是第一个元素取出,暂时赋值给一个变量 然后,students = students[1:] 把原有的列表进行切片,只保留后两个元素 切片是第四关的知识哦,在这里就运用到了 最后,students.append(student1) 我们再把student1重新写入students这个列表里 append()也是第四关的知识哦,只对列表才可以这么用 最后,因为这个座位的轮换要重复三次,因为有三个同学,所以我们需要把上面的操作重复三遍 这时候就要用到:循环 
上面是for循环的用法 下面是while循环的用法 
因为有规定循环次数,所以同样需要先定义一个变量,用来控制循环的次数 其他都是一样的 第六关 囚徒困境有普通版和升级版,但是代码部分有重叠,那我就直接讲升级版的吧 首先看到这个题目,我们要想一下,这个囚徒困境,让两个人分别做两种选择,那么一共会出现4种情况 两个人都认罪、两个人都不认罪、A认B不认、A不认B认 对于这四个情况,我们大概有想法了,可以用四个条件语句去执行不同的操作 
这一个我觉得应该理解难度不大吧 不过这要注意一个细节的东西 
在升级版的题目中,有以下要求 
所以在代码中 
n 是用来记录循环的次数的,在题目中,n 是用来统计一共多少对实验者(一次循环为一对); list_answer=[] 是用来存放实验者选择的一个空列表 看回程序,n = 1用来记录循环的次数,也就是记录了达到最优解的时候,一共有多少对实验者 
每次A和B做了选择后,将两人的选择以小列表的方式 [a,b],再写入大列表中 直到循环结束后,我们用 print(‘第’ str(n) ‘对实验者选了最优解。’) 就可以打印出一共有多少对实验者了 最后一部分,我们需要把每个实验者的选择打印出来 既然是重复性的一些操作,那我们又需要用到循环 我们用 i 是用来遍历n的,也就是遍历每一对实验者; 问题:str(i 1) 是什么意思? i 遍历的是时候是从0开始的,要打印第几对实验者时,因为不能说说第0对实验者,所以就需要把 n 1,str()是转换数据类型; 问题:list_answer[i] 是什么意思? list_answer是用来存放实验者选择的一个列表,所以 list_answer[i] 就是通过偏移量将列表的元素取出来 
在最后一个练习中 movies是一个字典,而字典的值是表格,用来存放演员的名字 首先我们用 actor = input(‘你想查询哪个演员?’),去输入查询的演员名字 然后我们用 for movie in movies: # 用 for 遍历字典,这里遍历出来的movie,是字典的键,这个跟昨天学习循环的一个习题类似 然后使用 actors = movies[movie] # 读取各个字典的主演表 同样,movies[movie]是取出字典的值的固定格式 到这一步为止,我们就把字典的值,也就是存放演员的列表取出来了,我们可以通过 print(actors)去看看 由于actors是一个列表,那么我们要判断前面输入的actor,是否“在”列表里面呢 所以我们用 if actor in actors:,可以理解为 如果 要查询的actor 在 演员列表actors 里 如果actor在,那么就匹配上了,我们就可以把print(actor ‘出演了电影’ movie),演员名字跟对应的电影名字连接起来,打印出来 第六关的练习也讲解完成了哦,要记得学习呀✌️
|