一些关于自己学习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
网友评论