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

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

第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<n-1:
            row.append(lis1[n-2][m-1]+lis1[n-2][m])
            m+=1
        row.append(1)
    lis1.append(row)
for i in range(0,num):
    print(lis1[i])
#########ends##############  

  
#列表综合案例2:约瑟夫问题
#n代表总人数,m代表出圈间隔序号数
n,m=eval(input())
result=[] #出圈列表
#########begin############## 
lis=[]
for i in range (1,n+1):
    lis.append(i)
result=[]
s=1
while len(lis)!=0:
    if s%m!=0:
        b=lis.pop(0)
        lis.append(b)
        s+=1
    else:
        b=lis.pop(0)
        result.append(b)
        s+=1
    
 
#########ends##############
####下面的代码不能修改######       
print("出圈列表:")
print(result)  

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年11月10日
下一篇 2023年11月10日

相关推荐