当前位置:   article > 正文

hnu计算机与人工智能概论答案3.29_计算与人工智能概论答案

计算与人工智能概论答案

这一次总体难度不大(除了最后一关),而且编程方式多种多样,欢迎大家在评论区分享自己的做法!

第1关:列表的增删改查

1.请在好友名单尾部添加一个好友'曾海洋'

2.请在好友名单开头添加一个好友'胡波'

3.请将首个王姓好友的名字修改为'王仁'

4.删除首个赵姓好友

第一关依旧是熟悉的热身环节,但是,值得注意的是在三四小问中,我们需要查找王姓好友。这时我们不能直接用nameList.indes('王'),因为“王”在列表中是不存在的,列表中的元素只有“王某”。所以,我们要将每个元素转化为字符串形式,再进行检索。

  1. #建立初始名单
  2. nameList=eval(input())
  3. ############begin###############
  4. #1.请在好友名单尾部添加一个好友'曾海洋'
  5. ############end#################
  6. nameList.append('曾海洋')
  7. ############begin############
  8. #2.请在好友名单开头添加一个好友'胡波'
  9. ##############end############
  10. nameList.insert(0,'胡波')
  11. #############begin###########
  12. #3.请将首个王姓好友的名字修改为'王仁'。
  13. #############end#############
  14. for i in nameList:
  15. a = str(i)
  16. if "王" in a:
  17. b=nameList.index(i)
  18. nameList[b]="王仁"
  19. break
  20. ############begin################
  21. #4.删除首个赵姓好友
  22. ###########end#################
  23. for i in nameList:
  24. a = str(i)
  25. if "赵" in a:
  26. b=nameList.index(i)
  27. nameList.pop(b)
  28. break
  29. print(nameList)

第2关:列表数据的统计与排序

第二关,个人认为第二关较第一关更为简单,牢记命令即可。

  1. scores=eval(input())#录入多名学生的成绩
  2. #########begin############
  3. #1. 请找出最高分并输出
  4. ##########end############
  5. print(max(scores))
  6. ###########begin###########
  7. #2. 请找出最低分并输出
  8. ###########end############
  9. print(min(scores))
  10. ###########begin############
  11. #3. 请求出班级平均分并输出(保留4位小数)
  12. ###########end##############
  13. b=(sum(scores)/len(scores))
  14. print('%.4f'% b)
  15. ############begin###########
  16. #4.对分数进行升序排序并输出排序后的结果
  17. ############end############
  18. print(sorted(scores))

第3关:列表索引切片

第三关,主要用到了列表的排序和切片。第一题可以像我一样直接降序排列,也可以先排列后倒序。第二三题用到切片,注意一下list[1,5]中第二位也就是1是能够取到的,而第六位取不到。

  1. #已录入的多名学生的成绩
  2. scores=eval(input())#录入多名学生的成绩
  3. ##########begin###########
  4. #1. 请对scores进行降序排序,并输出降序排列之后的结果
  5. ##########end#############
  6. scores.sort(reverse=True)
  7. print(scores)
  8. #########begin############
  9. #2.请找出前三名的成绩,并按降序输出
  10. ##########end############
  11. print(scores[:3])
  12. ###########begin###########
  13. #3. 请找出后三名的成绩,并按降序输出
  14. ###########end############
  15. print(scores[-3:])
  16. ###########begin############
  17. #4.请求出去掉一个最高分以及去掉一个最低分之后的成绩均值,并输出该均值(保留4位小数)
  18. ###########end##############
  19. scores.pop()
  20. scores.pop(0)
  21. a=sum(scores)/len(scores)
  22. print('%.4f'%a)

第4关:嵌套列表

​​​​​​​

第1题:求矩阵中所有数据的最大值,并输出该最大值

第2题:求出矩阵对角线元素(行号等于列号的元素)的和,并输出该和值

第3题:将矩阵上三角元素(列号大于等于行号的元素)全变为0值, 并输出该矩阵

第4题:取出矩阵的最后两行,并输出这两行

第5题:删除矩阵的最后一行,并输出删除最后一行之后的矩阵

第四关可以理解为我们所学的行列式。这里row指的是行,而temp指的是保存这行数据的临时文件。  第一题的思路是找到每一行的最大值,再将这些最大值进行比较。   第二题需要注意的是列表的序号是从0开始,所以在循环时一定要弄清楚自己所取的序号是第几行第几列。  第三题用到了一个循环嵌套,一个循环对应列,一个循环对应行。这里要注意一下,如果你直接打出list2D则会以列表形式呈现,所以在每一行结束时加上一个print(list2D[i])才能输出矩阵。

  1. row=eval(input())#矩阵行数
  2. list2D=[]#嵌套列表,用来存放一个矩阵数据
  3. for i in range(row):#得到每行数据列表
  4. temp=eval(input())
  5. list2D.append(temp)
  6. #第1题:请对矩阵list2D中的数据求最大值,并输出该最大值
  7. print(max(max(list2D[0]),max(list2D[1]),max(list2D[2])))
  8. print('##########')
  9. #第2题:求出矩阵对角线元素的和,并输出该和值
  10. s=0
  11. for i in range(1,row+1):
  12. s += list2D[i-1][i-1]
  13. print (s)
  14. print('##########')
  15. #第3题:将矩阵上三角元素全变为0值, 并输出该矩阵
  16. for i in range(0,row):
  17. for j in range(0,len(temp)):
  18. if j>=i:
  19. list2D[i][j]=0
  20. print(list2D[i])
  21. print('##########')
  22. #第4题:取出矩阵的最后两行,并输出这两行
  23. print(list2D[-2])
  24. print(list2D[-1])
  25. print('##########')
  26. #第5题:删除矩阵的最后一行,并输出删除最后一行之后的矩阵
  27. list2D.pop()
  28. for i in range(0,len(list2D)):
  29. 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,输出出圈的序号。

 第五关,难度较高,这里我给大家提供两种方法:

第一种,每一行之间采用递归的方法,每写完一行,就输出一行,然后作为上一行服务于下一行。

  1. def printYanghui(num):
  2. list1=[1] #定义一个列表用来储存上一行
  3. print(1) #输出第一行1
  4. for i in range(2,num+1): #循环输出2~num行
  5. row=[1] #定义列表行
  6. # print(1,end=' ') #输出每行第一个1
  7. for j in range(0,i-2): #第i行应有i个元素,中间有i-2个元素
  8. row.append(list1[j]+list1[j+1]) #插入上一行的两两元素和
  9. row.append(1) #补上末尾的1
  10. print(row)
  11. list1=row
  12. printYanghui(int(input()))

第二种,将lis1变为n阶的列表,两次循环,每一行都保存在列表之中。

第二问的思路是,围成一圈也可以看作是排成一队,每次报完数就排到队伍末尾,报到m的整数倍就出列,一直到没人为止。

  1. #列表综合案例1:输出杨辉三角形(列表的嵌套)
  2. num = eval(input()) #num为杨辉三角的行数
  3. #########begin##############
  4. lis1=[]
  5. for n in range(1,num+1):
  6. row=[]
  7. if n ==1:
  8. row.append(1)
  9. else:
  10. m=1
  11. row.append(1)
  12. while m<n-1:
  13. row.append(lis1[n-2][m-1]+lis1[n-2][m])
  14. m+=1
  15. row.append(1)
  16. lis1.append(row)
  17. for i in range(0,num):
  18. print(lis1[i])
  19. #########ends##############
  20. #列表综合案例2:约瑟夫问题
  21. #n代表总人数,m代表出圈间隔序号数
  22. n,m=eval(input())
  23. result=[] #出圈列表
  24. #########begin##############
  25. lis=[]
  26. for i in range (1,n+1):
  27. lis.append(i)
  28. result=[]
  29. s=1
  30. while len(lis)!=0:
  31. if s%m!=0:
  32. b=lis.pop(0)
  33. lis.append(b)
  34. s+=1
  35. else:
  36. b=lis.pop(0)
  37. result.append(b)
  38. s+=1
  39. #########ends##############
  40. ####下面的代码不能修改######
  41. print("出圈列表:")
  42. print(result)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/324533?site
推荐阅读
相关标签
  

闽ICP备14008679号

        
cppcmd=keepalive&