组卷题库 > 高中信息技术试卷库

浙江省镇海中学2022年12月信息技术考前适应性考试题

作者UID:7189882
日期: 2024-05-04
高考模拟
选择题(本大题共13小题,每小题2分,共26分,在每小题给出的四个选项中,只有一个符合题目要求)
非选择题(本大题共3题,7+8+9,共24分)
小明利用Python对“足球世界杯历史进球前20名(图a)”数据进行分析,他先按国家分类,统计出各个国家的球员人数,并把球员人数最多国家的球员,按“场均进球”数进行排序,并用图形显示(图b)。请在划线处填入合适的代码。

图 a

图 b

列表 a 内容

字典 country 内容

import csv

import pandas as pd

import matplotlib.pyplot as plt

plt.rcParams[ 'font.sans-serif ']=[ 'SimHei']     #用来正常显示中文标签

plt.rcParams[ 'axes.unicode_minus ']=False      #用来正常显示负号

=open("历史进球 .csv", 'r')

reader=csv.reader(csvfile)

a=list(reader); country={}

for i in range(1,len(a)):      #按国家分类

    if a[i][1] not in country:

       

    else:

        country[a[i][1]].append(i)

max=0 ; country_max=""

for i in country.keys():  #找出前 20 名中人员最多的国家,country.keys()表示字典的键

    if  :

        max=len(country[i])

        country_max=i

df=pd.DataFrame(data=[ ],columns=["姓名","进球个数","出场次数"])

for i in country[country_max]:

    df=df.append({"姓名":a[i][0],"进球个数":int(a[i][2]),"出场次数":int(a[i][3])},ignore_index=True)  =df["进球个数"]/df["出场次数"]  #df 最后插入 1 列”场均进球”

df=df.sort_values( )  #按“场均进球”排序

plt. (df["姓名"],df["场均进球"],label="场均进球")

plt.title("前 20 名中人数最多国家球员场均进球情况")

plt.legend()

plt.xlim(0,1.2)

plt.show()

csvfile.close()

学校教室后方放有物品柜,柜子有n层,每层有m个格子,从上到下一次是第0层,第1层,…,第n-1层,从左到右依次是第0个格子,第1个格子,…,第m-1个格子。有k组物品(组号为0~k-1),每组至少有2个物品,物品总数不超过n*m个:将k组物品按组号由小到大依次放入柜中,放置方式有两种:

整体放置。按格子编号由小到大的次序查找第一个可放置该组全部物品的空区域(空区域是指从某个空格子开始的同层连续的所有空格子) ,若找到,则在该空区域居中、连续放置该组全部物品,如下图所示。

零散放置。若所有空区域格子数都小于该组物品数,即找不到连续放置的空区域,则将该组每个物品按照从上到下,从左到右的顺序,依次放置到柜中的空格子中,具体次序如下图所示。

小明编写了一个Python程序实现上述功能,程序依次输入n、m代表柜子层数和柜子每层格子数,第三行输入物品组数k,接下来一行输入k个整数代表每组物品个数。程序运行后输出n*m的矩阵代表物品的放置情况,1表示当前格子放置物品,0表示当前格子没有放置物品,运行结果如下图所示。

编写函数init(),功能为预处理i层j列格子开始的同层连续的所有空格子数,保存在数组v中。v[i][j]=0表示i层j列格子不是空格子,v[i][j]=x代表i层j列格子开始的同层连续的所有空格子数为x,代码如下

def init():

    for i in range(n):

        for j in range(m):

            if q[i][j]==0:

                k=j+1

                while k<m and q[i][k] !=1:

                    k+=1

                  ①   

        else:

            v[i][j]=0

编写函数getpos(L),功能为寻找查找空格子数>=L的第一个空区域,若找到,返回该空区域的起始坐标[x,y],表示第x层,第y个格子开始的连续空格子的数量大于等于L,否则返回-1

def getpos(L):

    ret=-1

    for i in range(n):

        for j in range(m):

            if     ②     :

                ret=[i,j]

                return ret

return ret

解决问题的主程序如下:

n=int(input())    #输入层数

m=int(input())    #输入列数

k=int(input())     #输入物品组数

q=[[0 for i in range(m)]

for j in range(n)]     # q 保存柜子的放置情况

    v=[[0 for i in range(m)]

for j in range(n)]      # v 的含义参考 init 函数 init() #预处理

    s=input()      #输入每组物品数量

    a=s.split()

for i in range(k):

    a[i]=int(a[i])

start=0

for i in range(k):

    p=getpos(a[i])

    if p!=-1:

        row=p[0]

        col=p[1]

        k=       ③      

        k=k//2

        t=col

        for j in range(k, 0, -1):

            v[row][t]=j   #更新 v 数组

            t=t+1

        for j in range(t,t+a[i]):

            q[row][j]=1

            v[row][j]=0

    else:

        cnt=0         

        while  :

            row=start//m

            col=start%m

            if q[row][col]==0:

                q[row][col]=1

                v[row][col]=0

                cnt+=1

            start+=1

#输出放置情况

for i in range(n):

    for j in range(m):

        print(q[i][j], end=" ")

print( )

试卷列表
教育网站链接