这一次总体难度不大(除了最后一关),而且编程方式多种多样,欢迎大家在评论区分享自己的做法!
第1关:列表的增删改查
1.请在好友名单尾部添加一个好友'曾海洋'
2.请在好友名单开头添加一个好友'胡波'
3.请将首个王姓好友的名字修改为'王仁'
4.删除首个赵姓好友
第一关依旧是熟悉的热身环节,但是,值得注意的是在三四小问中,我们需要查找王姓好友。这时我们不能直接用nameList.indes('王'),因为“王”在列表中是不存在的,列表中的元素只有“王某”。所以,我们要将每个元素转化为字符串形式,再进行检索。
#建立初始名单 nameList=eval(input()) ############begin############### #1.请在好友名单尾部添加一个好友'曾海洋' ############end################# nameList.append('曾海洋') ############begin############ #2.请在好友名单开头添加一个好友'胡波' ##############end############ nameList.insert(0,'胡波') #############begin########### #3.请将首个王姓好友的名字修改为'王仁'。 #############end############# for i in nameList: a = str(i) if "王" in a: b=nameList.index(i) nameList[b]="王仁" break ############begin################ #4.删除首个赵姓好友 ###########end################# for i in nameList: a = str(i) if "赵" in a: b=nameList.index(i) nameList.pop(b) break print(nameList)
第2关:列表数据的统计与排序
第二关,个人认为第二关较第一关更为简单,牢记命令即可。
scores=eval(input())#录入多名学生的成绩 #########begin############ #1. 请找出最高分并输出 ##########end############ print(max(scores)) ###########begin########### #2. 请找出最低分并输出 ###########end############ print(min(scores)) ###########begin############ #3. 请求出班级平均分并输出(保留4位小数) ###########end############## b=(sum(scores)/len(scores)) print('%.4f'% b) ############begin########### #4.对分数进行升序排序并输出排序后的结果 ############end############ print(sorted(scores))
第3关:列表索引切片
第三关,主要用到了列表的排序和切片。第一题可以像我一样直接降序排列,也可以先排列后倒序。第二三题用到切片,注意一下list[1,5]中第二位也就是1是能够取到的,而第六位取不到。
#已录入的多名学生的成绩 scores=eval(input())#录入多名学生的成绩 ##########begin########### #1. 请对scores进行降序排序,并输出降序排列之后的结果 ##########end############# scores.sort(reverse=True) print(scores) #########begin############ #2.请找出前三名的成绩,并按降序输出 ##########end############ print(scores[:3]) ###########begin########### #3. 请找出后三名的成绩,并按降序输出 ###########end############ print(scores[-3:]) ###########begin############ #4.请求出去掉一个最高分以及去掉一个最低分之后的成绩均值,并输出该均值(保留4位小数) ###########end############## scores.pop() scores.pop(0) a=sum(scores)/len(scores) print('%.4f'%a)
第4关:嵌套列表
第1题:求矩阵中所有数据的最大值,并输出该最大值
第2题:求出矩阵对角线元素(行号等于列号的元素)的和,并输出该和值
第3题:将矩阵上三角元素(列号大于等于行号的元素)全变为0值, 并输出该矩阵
第4题:取出矩阵的最后两行,并输出这两行
第5题:删除矩阵的最后一行,并输出删除最后一行之后的矩阵
第四关可以理解为我们所学的行列式。这里row指的是行,而temp指的是保存这行数据的临时文件。 第一题的思路是找到每一行的最大值,再将这些最大值进行比较。 第二题需要注意的是列表的序号是从0开始,所以在循环时一定要弄清楚自己所取的序号是第几行第几列。 第三题用到了一个循环嵌套,一个循环对应列,一个循环对应行。这里要注意一下,如果你直接打出list2D则会以列表形式呈现,所以在每一行结束时加上一个print(list2D[i])才能输出矩阵。
row=eval(input())#矩阵行数 list2D=[]#嵌套列表,用来存放一个矩阵数据 for i in range(row):#得到每行数据列表 temp=eval(input()) list2D.append(temp) #第1题:请对矩阵list2D中的数据求最大值,并输出该最大值 print(max(max(list2D[0]),max(list2D[1]),max(list2D[2]))) print('##########') #第2题:求出矩阵对角线元素的和,并输出该和值 s=0 for i in range(1,row+1): s += list2D[i-1][i-1] print (s) print('##########') #第3题:将矩阵上三角元素全变为0值, 并输出该矩阵 for i in range(0,row): for j in range(0,len(temp)): if j>=i: list2D[i][j]=0 print(list2D[i]) print('##########') #第4题:取出矩阵的最后两行,并输出这两行 print(list2D[-2]) print(list2D[-1]) print('##########') #第5题:删除矩阵的最后一行,并输出删除最后一行之后的矩阵 list2D.pop() for i in range(0,len(list2D)): print(list2D[i])
第5关:列表综合应用
第一题:编程实现:在屏幕上输出杨辉三角形图形 例如 输入 6 输出结果为:
提示:每行数据就是一个单列表,多行数据构成列表的嵌套
第二题:约瑟夫问题 n个人按1,2,3,… ,n编号,并顺序围坐一圈。开始按照1,2,3,… ,m 报数,凡报到 m 的出列,直到所有人出列为止。 算法如下: 1)建立一个列表lb存放n个值 2)遍历该列表,从1开始计数,到第m个值将其从列表删除。然后从当前位置继续从1开始计数,数到第m个值将其从列表删除。 3)以此类推,直到列表中没有元素为止 编写程序,输入人数n和序号m,输出出圈的序号。
第五关,难度较高,这里我给大家提供两种方法:
第一种,每一行之间采用递归的方法,每写完一行,就输出一行,然后作为上一行服务于下一行。
def printYanghui(num): list1=[1] #定义一个列表用来储存上一行 print(1) #输出第一行1 for i in range(2,num+1): #循环输出2~num行 row=[1] #定义列表行 # print(1,end=' ') #输出每行第一个1 for j in range(0,i-2): #第i行应有i个元素,中间有i-2个元素 row.append(list1[j]+list1[j+1]) #插入上一行的两两元素和 row.append(1) #补上末尾的1 print(row) list1=row printYanghui(int(input()))
第二种,将lis1变为n阶的列表,两次循环,每一行都保存在列表之中。
第二问的思路是,围成一圈也可以看作是排成一队,每次报完数就排到队伍末尾,报到m的整数倍就出列,一直到没人为止。
#列表综合案例1:输出杨辉三角形(列表的嵌套) num = eval(input()) #num为杨辉三角的行数 #########begin############## lis1=[] for n in range(1,num+1): row=[] if n ==1: row.append(1) else: m=1 row.append(1) while m