Python 学习笔记

2020-07-03 Python学习笔记14关 列表复习

2020-07-03  本文已影响0人  建渐升辉

一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习。

声明:本人学习是在扇贝编程通过网络学习的,相关的知识、案例来源于扇贝编程。如果使用请说明来源。

第十四关 列表复习

练习:截取部分列表

现在有两个列表:letters1 和 letters2,它们中间各藏着一句七言诗。

补全 print_center 函数,使下列代码打印出 letters1 列表和 letters2 列表里中间位置的七个元素组成的新列表,这样我们就能看出其中包含的七言诗是什么了。

提示:

截取中间 7 个元素的分片,代码可以写成 letters1[n:n+7]。问题就变成求 n 的值,我们需要得知截取片段的第一个元素索引 n。

由于是从中间截取,原列表首尾都要丢掉相同数目的元素,易知该数目便是 n。可以通过这个线索求 n。

letters1 = ['天', '前', '我', '最', '是', '人', '间', '留', '不', '住', '去', '日', '台']

letters2 = ['而', '红', '的', '朱', '颜', '辞', '镜', '花', '辞', '树', '他', '轩', '徐']

def print_center(letters):

  # 算出首尾要去掉的元素个数 n,再对列表分片

  # 你可能会用到除法 / 运算符

  # 由于 / 运算结果为浮点数,要用 int() 函数转换为整数

  length = len(letters)  # 求出列表中元素的个数,这个没有专门学过,忘记了

  n = int((length - 7) / 2)  #去掉要截取的7个,其他分为首位两个部分,除以2之后结果可能是小数,就是float型的数据,所以转化成整型用int函数,这个开始也是忘记了。

  print(letters[n:n+7])  #前面去掉n个,去掉的最后一个元素的索引是n-1,留下的第一个元素的索引就是n,留下的最后一个元素的索引是n+6,由于结束索引要在最后一个元素的索引上+1,所以截取的时候,结束索引就是n+7。

print_center(letters1)

print_center(letters2)

刚好13个元素,多一个是14个元素,都不影响结果,因为取整之后,n都是3,再多的话,就影响到结果过了

练习:成绩排名与统计

宝玉最近学习格外认真,想要当学习委员,于是你让他帮你分担了一些教务上的工作。

这次又了来次模拟考,分数记录在了列表 test_scores 中。

test_scores = [100, 97, 76, 84, 93, 98, 86, 92, 76, 88, 95, 90, 95, 93]

你交给了宝玉一个任务,给这次的分数从高到低排序。出于同学们的隐私,你没有把同学们的姓名提供给宝玉,但告诉宝玉他这次考了 95 分,表现相当不错了。宝玉的胜负心也被激发了,打起了小算盘,想看看自己排名多少,有多少人和他考一样的分。

你能帮宝玉完成代码吗?

要求:

打印出分数从高到低的 test_scores 列表;

计算宝玉的排名,以及和宝玉分数一样的人数,并打印出:

宝玉的排名是 xxx

一共有 xxx 名同学考 95 分

提示:xxx 要替换成对应的结果。

test_scores = [100, 97, 76, 84, 93, 98, 86, 92, 76, 88, 95, 90, 95, 93]

# 处理列表,让列表元素从高到低排序

test_scores.sort()  先排序,默认由低到高,括号必须有,且不写内容

test_scores.reverse()  再反转,由高到低,括号必须有,且不写内容

# 打印处理后的列表

print(test_scores())  打印的时候,直接写出列表名称,不要需要后面的括号

# 计算 95 分的排名

rank = test_scores.reverse(95) + 1  应该用索引加1,这个写错了,应该用index,元素外用圆括号

# 答案用baoyu_rank

print('宝玉的排名是', rank)

# 统计 95 分在列表中出现的次数

n = test_scores.coount(95)  单词拼写错误 count。元素外用圆括号

答案用num_95

print('一共有', n, '名同学考 95 分')

练习:被3整除的数

修改下列代码中 range() 函数中的 ???,使其运行结果打印出 100 以内所有可以被 3 整除的自然数。

three_divided = list(range(100, 3))

print(three_divided)

因为默认是从0开始起步的,于是我没有写起步数字。结果是[],一个空列表

后来才明白,如果步长为1,且0是起步,可以省略0和步长。现在3是步长。如果省略0,则系统把100看成是起点,3看成是终点,而步长为默认的1,这样结构自然是空,没有这样的数字存在。

three_divided = list(range(0, 100, 3))

print(three_divided)

加上起点数字0,就能正确了。

要么只省去步长(为1时),要么同时省去起点(为0时)和步长(为1时),不能在步长不为1时,只省略起点0,因为系统会误会。

在实际运用中,我们直接调用 sort() 方法来给列表中的元素排序,用 reverse() 直接倒转原列表,不必重新赋值。

拓展:在前面方法复习小节图片中列表方法中,除了 copy()、index()、count() 和 pop() 四个方法会返回对应的结果,其它的方法都是遵照“仅处理原列表,不返回新值”的规则。

练习:破解黑客来信

你刚刚收到一封来署名黑客的信件,但是这封信看起来像天书:

而恰巧几天前你收到同一个地址寄来另一封信,这封信看起来是解密的提示:

1列表 letters 尾部追加 '!';

2取出列表 letters 中第 7 到 9 个元素(包含 7 和 9),存放在一个地方,比如 answer 变量里;

3列表 answer 尾部追加 letters 列表里字符 'x' 的次数(需要转换成字符串类型);

4列表 answer 尾部追加 letters 列表中最后一个元素;

5将列表 answer 和列表 letters 中最后的三个元素拼接在一起;

6使用 print(''.join(answer)) 将列表 answer 转为字符串并打印到屏幕上。

7拓展:join() 方法用于把列表中的所有元素拼接成一个字符串,在后面的关卡中我们将会学习其详细用法。

现在你需要按照上面的提示来破解这封密文,看看这位黑客想告诉你什么信息。

提示:如果按照 👆 上面的提示破解出的信息依旧不懂,你需要把屏幕旋转 180 度~

letters = [

  '7', 'u', 'b', 'u', 'r', 'l', 'n', ' ', '5', 'o',

  'j', 'c', '3', '7', '1', 'x', 'd', 'x', 'm', '8',

  'a', 'v', 'f', 'd', 'z', 'z', 'd', 'l', 'v', 'o',

  'q', 'j', 'u', '2', 'o', 'l', 'v', '6', 'i', 'o',

  'i', '5', '9', 'b', 'c', 'i', 's', 'a', 'i', '2',

  '!', '8', 's', 't', '9', 'r', 'x', 'w', 'j', '1',

  '5', '5', '3', 'm', '9', '6', 'r', 'w', '9', 'd',

  'd', 'r', 'y', '3', 'p', 'h', 'f', '9', '1', 'b',

  'w', 'u', 'c', 'e', 'r', '3', 'i', 'i', 'x', '7',

  'x', '2', 'n', 'p', 'a', '4', 'b', 'f', 'w', ' '

]

# 按照提示来动手破解信件吧!

# 1 列表 letters 尾部追加 '!'

letters.append('!')  增加的元素是串的话,用英文引号引起来

print(letters)

# 2 取出列表 letters 中第 7 到 9 个元素(包含 7 和 9)

answer = letters[6:9]  第7/8/9三个元素的索引分别是6/7/8

print(answer)

# 3 列表 answer 尾部追加 letters 列表里字符 'x' 的次数(需要转换成字符串类型)

n = letters.count('x')  统计letters列表中x的个数

answer.append(str(n))  把数字变成串增加到列表answer末尾

print(answer)

# 4 列表 answer 尾部追加 letters 列表中最后一个元素

answer.append(letters[-1])  最后一个元素的索引是-1

print(answer)

# 5 将列表 answer 和列表 letters 中最后的三个元素拼接在一起

answer = answer + letters[-3:]  拼接直接用列表加法就可以了

print(answer)

# 6 打印结果

print(''.join(answer))  join会把字母合成串,就是去掉引号和逗号等

其余全部争取,我以为拼接要用到join函数,拼接这一步写错了。误会了

最后一行打印的括号中,我以为引号中要写内容的,直接就一个引号即可。这个不懂,后面应该会学到

列表中的元素可以是空格

为了知道每一步操作的结果,我增加了依稀print

['7', 'u', 'b', 'u', 'r', 'l', 'n', ' ', '5', 'o', 'j', 'c', '3', '7', '1', 'x', 'd', 'x', 'm', '8', 'a', 'v', 'f', 'd', 'z', 'z', 'd', 'l', 'v', 'o', 'q', 'j', 'u', '2', 'o', 'l', 'v', '6', 'i', 'o', 'i', '5', '9', 'b', 'c', 'i', 's', 'a', 'i', '2', '!', '8', 's', 't', '9', 'r', 'x', 'w', 'j', '1', '5', '5', '3', 'm', '9', '6', 'r', 'w', '9', 'd', 'd', 'r', 'y', '3', 'p', 'h', 'f', '9', '1', 'b', 'w', 'u', 'c', 'e', 'r', '3', 'i', 'i', 'x', '7', 'x', '2', 'n', 'p', 'a', '4', 'b', 'f', 'w', ' ', '!']

['n', ' ', '5']  其中一个元素是空格哦

['n', ' ', '5', '5']

['n', ' ', '5', '5', '!']

['n', ' ', '5', '5', '!', 'w', ' ', '!']

n 55!w !  最后几个元素合成的串中也包含两个空格

电脑旋转180后,答案是i miss u

上一篇 下一篇

猜你喜欢

热点阅读