当前位置:   article > 正文

Python第六章作业

python第六章作业

目录

第1关 列表的属性与方法

第2关 推导式与生成器

第3关 列表的合并与排序

第4关 二维列表排序

第5关 动物重量排序

第6关 身份证号升位

第7关 完美立方数

第8关 约瑟夫环问题

第9关 文本分析(2)——统计英文文件中的单词数


第1关 列表的属性与方法

初始化一个空列表,输入一个正整数 n。 接下来,你将被要求输入 n 个指令,每得到一个指令后,根据指令的字符串进行对应的功能操作。 指令形式及对应功能如下:

  1. insert i e: # 在第 i 个位置插入整数 e。
  2. print: # 输出列表
  3. remove e: # 删除第一次出现的整数 e .
  4. append e: # 在列表的末尾插入整数 e.
  5. sort: # 按默认规则排序.
  6. pop: # 弹出列表最后一一个元素
  7. reverse: # 列表元素逆序
  1. list = []
  2. n = int(input())
  3. for i in range(n):
  4. a = input().split()
  5. if a[0] == 'insert':
  6. list.insert(int(a[1]),int(a[2]))
  7. elif a[0] =='append':
  8. list.append(int(a[1]))
  9. elif a[0] =='remove':
  10. list.remove(int(a[1]))
  11. elif a[0] =='sort':
  12. list.sort()
  13. elif a[0] =='pop':
  14. list.pop()
  15. elif a[0] =='reverse':
  16. list = list[::-1]
  17. elif a[0] =='print':
  18. print(list)

第2关 推导式与生成器

推导式可以从一个数据序列构建另一个新的数据序列的结构体。本质上可以将其理解成一种集合了变换和筛选功能的函数,通过这个函数把一个序列转换成另一个序列。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

  1. ls = ['the lord of the rings','anaconda','legally blonde','gone with the wind']
  2. s = input() # 输入一个字符
  3. # 当输入为"1"时,输出元素为0-9的3次方的列表 [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
  4. if s == '1':
  5. print([x**3 for x in range(10)])
  6. # 当输入为"2"时,输出元素为0-9中偶数的3次方的列表 [0, 8, 64, 216, 512]
  7. elif s == '2':
  8. list =[]
  9. for i in range(10):
  10. if i%2==0:
  11. x= i**3
  12. list.append(x)
  13. print(list)
  14. # 当输入为"3"时,输出元素为元组的列表,元组中元素依次是0-9中的奇数和该数的3次方[(1, 1), (3, 27), (5, 125), (7, 343), (9, 729)]
  15. elif s == '3':
  16. list =[]
  17. for i in range(10):
  18. if i%2!=0:
  19. x=tuple((i,i**3))
  20. list.append(x)
  21. print(list)
  22. # 当输入为"4"时,将ls中每个元素单词首字母大写输出['The lord of the rings', 'Anaconda', 'Legally blonde', 'Gone with the wind']
  23. elif s == '4':
  24. print([list.strip().capitalize() for list in ls])
  25. # 当输入为其他字符时,执行以下语句
  26. else:
  27. print('结束程序')

第3关 列表的合并与排序

读入两行,两行的格式一样,都是用空格分隔的若干个整数,将这些数合并到一个列表中,降序排列后输出整个列表。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

提示: list1 = list(map(int,input().split())) #读入一行由空格分隔的整数,将其存入list1列表中

  1. list1 = list(map(int,input().split()))
  2. list2 = list(map(int,input().split()))
  3. list3 = list1 + list2
  4. list3.sort(reverse = True)
  5. print(list3)

第4关 二维列表排序

有以下两个二维列表。 第一个列表的元素是元组,请对其按列表元素的第 2 个元素值从小到大进行排序输出,输出其前 m 项;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

列表一: [('dungeon',7),('winterfell',4),('bran',9),('meelo',6)]‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第二个列表的元素仍是列表,请对其分别按每个元素的第 1 和第 3 个元素值从小到大进行排序,输出其前 n 项。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

列表二: [[ 'Angle', '0121701100106',99], [ 'Jack', '0121701100107',86], [ 'Tom', '0121701100109',65], [ 'Smith', '0121701100111', 100], ['Bob', '0121701100115',77], ['Lily', '0121701100117', 59]]

m 和 n 是由用户输入的非负整数,当 m 或 n 大于列表长度时,对整个列表进行排序输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

  1. list1 = [('dungeon',7),('winterfell',4),('bran',9),('meelo',6)]
  2. list2 = [['Angle', '0121701100106',99], ['Jack', '0121701100107',86], ['Tom', '0121701100109',65], ['Smith', '0121701100111', 100], ['Bob', '0121701100115',77], ['Lily', '0121701100117', 59]]
  3. list3 = sorted(list1,key = lambda x: x[1])
  4. list4 = sorted(list2,key = lambda x: x[0])
  5. list5 = sorted(list2,key = lambda x: x[2])
  6. m = int(input())
  7. n = int(input())
  8. print(list3[:m])
  9. print(list4[:n])
  10. print(list5[:n])

第5关 动物重量排序

输入一系列动物名和其重量,重量单位可能是kg,也可能是t,动物名、与重量间空格分隔,重量数值与单位间无分隔。 按重量由小到大排序以二维列表形式输出。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

每次输入一个动物名,以及其重量和单位,动物名与重量间用空格分隔,直接输入回车时结束输入(此时输入的字符为空字符串)。

提示:判断输入是否为''空字符串,为True则结束输入。

  1. list1 = []
  2. while True:
  3. a = input().split()
  4. if len(a) == 0:
  5. break
  6. else:
  7. list1.append(a)
  8. list2 = sorted(list1,key = lambda x: float(x[1][:-1])*1000 if x[1][-1]=="t" else float(x[1][:-2]))
  9. print(list2)

第6关 身份证号升位

第二代居民身份证是依据2003年6月28日第十届全国人大常委会第3次会议通过的《中华人民共和国居民身份证法》实施的。第一代身份证十五位数升为第二代身份证十八位数的一般规则是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第一步,在原十五位数身份证的第六位数后面插入19 (1905年1月1日以后出生)或20(2000.1.1-2004.12.31出生),这样身份证号码即为十七位数; 第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身份证的尾号。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

校验码计算方法:将身份证前十七位数分别乘以不同系数并求和 S = Sum(Ai * Wi) Ai:表示第i位置上的身份证号码数字值, i = 0, ... , 16 Wi:表示第i位置上的加权因子, Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 S对11取模得到余数0-10,对应的校验码如下: 余数 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

题目假设所有人均出生于1905年1月1日以后,2005年1月1日以前

  1. n = input()
  2. list1 = list(n)
  3. Wi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
  4. if int(list1[6])+int(list1[7]) >= 5:
  5. list1.insert(6,9)
  6. list1.insert(6,1)
  7. else:
  8. list1.insert(6,0)
  9. list1.insert(6,2)
  10. s = 0
  11. for i in range(17):
  12. s += int(list1[i]) * int(Wi[i])
  13. m = s % 11
  14. list2 = [1,0,'X',9,8,7,6,5,4,3,2]
  15. list1.append(list2[m])
  16. for x in list1:
  17. print(*str(x),end = '')

第7关 完美立方数

费马大定理断言,当整数 n > 2时,关于 a,b,c 的方程an= bn + cn 没有正整数解。 该定理被提出来后,历经三百多年,经历多人猜想辩证,最终在 1995 年被英国数学家安德鲁.怀尔斯证明。 不过,可以找到大于 1 的 4 个整数满足完美立方等式: a3 = b3 + c3 + d3 (例如 123 = 63 + 83 + 103) 编写一个程序,对于任意给定的正整数 N(N<=100),寻找所有的四元组(a,b,c,d),满足 a3 = b3 + c3 + d3 (其中 1 < a,b,c,d <=N)

  1. N = int(input())
  2. for a in range(2,N+1):
  3. for b in range(2,a):
  4. for c in range(b,a):
  5. for d in range(c,a):
  6. if a**3 == b**3+c**3+d**3:
  7. print(f'Cube = {a},Triple = ({b},{c},{d})')

第8关 约瑟夫环问题

据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在第16个与第31个位置,成为最后剩下的人。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

扩展这个问题,当人数为n,每次报数为k时,求解最后的K-1个剩下的人的位置

  1. n,k =map(int,input().split())
  2. ls1 = [i for i in range(1,n+1)]
  3. num = 0
  4. if k < 2 or n < k :
  5. print('Data Error!')
  6. else:
  7. while len(ls1) >= k:
  8. num +=1
  9. count = ls1.pop(0)
  10. if num % k != 0:
  11. ls1.append(count)
  12. print(ls1)

第9关 文本分析(2)——统计英文文件中的单词数

提示:统计单词数量时,形如It’sLet'sdon't的缩写形式要按2个单词计数。另外为了处理方便,约定所有测试文件中没有's表示所有格的情况。

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:mySunshine.txt

输出:共有7个单词

  1. def read_file(file):
  2. """接收文件名为参数,读取文件中的数据到字符串中,返回这个字符串"""
  3. with open(file, 'r', encoding='utf-8') as text: # 创建文件对象
  4. txt =text.read() # 读文件为字符串
  5. return txt # 返回字符串
  6. def word_list(txt):
  7. """接收字符串为参数,用空格替换字符串中所有标点符号,根据空格将字符串切分为列表
  8. 返回值为元素为单词的列表"""
  9. for i in ",.!\'":
  10. txt = txt.replace(i, ' ')
  11. return txt.split()
  12. def number_of_words(ls):
  13. """接收一个以单词为元素的列表为参数,返回列表中单词数量,返回值为整型"""
  14. return len(ls)
  15. if __name__ == '__main__':
  16. filename = input() # 读入文件名
  17. text = read_file('step10/'+filename) # 读取'step10/'文件夹中用户输入的文件名得到文件内容,存入text
  18. words_list = word_list(text) # 处理text,得到单词的列表
  19. words_counts = number_of_words(words_list) #统计单词列表word_list里的单词数
  20. print(f'共有{words_counts}个单词')

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号