1. 小天收集了浙江省某年各地市年龄段数据,保存在“T14.xlsx”文件中,如图a所示。为统计分析各地市不同年龄段人口占比,编写Python程序,输出结果如图b所示。

请回答下列问题:

(1) 为统计分析各地市不同年龄段人口占本地市人口比例,编写 Python 代码如下,划线处①应填入的代码为(单选,填字母),划线处②应填入的代码为

A.df.groupby("地市",as_index=False).count()

B.df.groupby("地市",as_index=False).sum()

C.df.groupby("地市",as_index=True).mean()

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_excel("T14.xlsx")

df1 =   ①         # 计算各地市不同年龄段的人数

print ("地 市17 岁以下    18-34 岁   35-59 岁   60 岁及以上")

#“df1.values.tolist()”实现将 df1 转换为二维列表。列表中每个元素包含 5 个数

#据项,分别对应地市名称和该地市 4 个年龄段人数总计,如['丽水市', 501421, ...]

df2=df1.values.tolist()

x,y = [],[]

for area in df2:

    for c in range(len(area)):

        if c == 0:

            x.append(area[0])

            print(area[0], end=" ?")

        else:

            sm = sum(area[1:])     #sum 函数实现对序列求和

            t=   ②   

            print('%.2f' %(t), end="% ?")     #按设置格式输出

            if c == 4:

                y.append(t)

print()

plt.title("浙江省各地市 60 岁以上人数占本地市总人口比例", fontsize=24)

plt.bar(x, y)

#绘制 60 岁及以上人数占本地市总人口比例柱形图

#设置绘图参数,显示如图 c 所示,代码略。

(2) 由图c可知,60岁及以上人数占本地市人口比例超过25%的地市有个。
(3) 小天编写mygroupby函数模拟实现上述分类汇总功能,计算各地市不同年龄段的人数,结果以列表形式返回。函数代码如下,请在划线处填入合适的代码。

#df1为二维列表,列表中每个元素包含6个数据项,内容如图a所示;函数返回值dfs格式同题(1)二维列表 df2

def mygroupby(df1):

    dfs=[]     #创建一个空列表 dfs

    for row in df1:

        

        if n>0:

            for j in range(n):

                if row[0]==dfs[j][0]:

                    break

        if n==0 or row[0] != dfs[j][0]:

            dfs.append([row[0],0,0,0,0])

            j=n

        for k in range(2,len(row)):

           

return dfs

【考点】
常见数据类型、数组; 过程与自定义函数; 编程处理数据与可视化; 数据分析;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 五子棋游戏规则:⒈对局双方各执一色棋子(黑和白);⒉每局黑方先下:⒊双方交替下子,每次只能下一子:⒋当一方棋子先连成五子即获胜(即横、竖或斜任意一个方向均可)。编写一个VB程序,单击“读取”按钮Command1读取五子棋某个状态的棋盘数据,单击“判断”按钮Command2,显示判断结果。运行界面如图所示:

●若双方已经分出胜负,则显示胜方及连成五子的第一颗棋子的位置(行号及列号)。

●若双方未分出胜负,则显示当前状态下将下棋的一方。

(1) 若棋盘上的黑白棋子数量不相等时,则将下子的一方是
(2) 编写如下VB程序,请在划线处填入合适的代码。

Constn= 10

Dim s(1 To 400) As String

Private Sub Command1_ Click)

‘读取棋盘数据存储在数组s中,●表示黑子,o表示白子,o表示空位,代码略

End Sub

Private Sub Command2_ Click()

    Dim i As Integer, j As Integer, fag As Boolean

    flag= False:i= 1

    Do While i <= n And flag = False

        For j= 1 Ton

            If Then flag = True: Exit For

        Next j

        i=i+ 1

    Loop

    i=i- 1

    If flag Then

        If (i-1)*n+j) = "o" Then

            Label1.Caption = "白方胜" + Str(i) + Str(j)

        Else

            Label1.Caption = "黑方胜" + St(i) + Str(j)

        End If

    Else

        If counts() Then Label1.Caption="黑方下" Else Label1.Caption ="白方下"

    End If

End Sub

Function judge(x As Integer, y As Integer) As Boolean

    Dim dx(1 To 4) As Integer, dy(1 To 4) As Integer

    Dim flag As Boolean,j As Integer, i As Integer, ux As Integer, uy As Integer

    dx(1)= 1: dx(2)= 1: dx(3)= 1:dx(4)= 0

    dy(1)= 1: dy(2)= 0: dy(3)=-1: dy(4)= I

    flag = False:i= 1

    If s((x-1)*n+y) <> "o" Then

        Do While i<= 4 And flag = False

            flag = True

            For j= 1 To 4

                ux= dx(i)*j+x

                uy=dy(i)*j+y

                If Not (ux>= 1 And ux <= nAnd uy>= I And uy <= n) Then flag = False: Exit For

                If  Then flag = False: Exit For

            Next j

            i=i+ 1

        Loop

    End If

    judge = flag

End Function

Function counts() As Boolean

    Dim iAs Integer, j As Integer, white As Integer, black As Integer

    counts = False:white = 0: black= 0

    For i=1 To n

        For j= 1 Ton

           If(i-1)* n+j)= "o" Then white = white+ 1

           If((i-1)*n+j)= "●" Then black = black + 1

       Next j

    Next i

    If  Then counts = True

End Function

综合题 困难
2. 有n个小组(编号1至n),每个小组有m个成员,每个成员都有一个大于等于0的得分。现要求按下列规则计算每个小组的成绩,并找出成绩最高的小组。

小组成绩的计算规则是:若小组成员中得分最高的前k人得分都不低于k,且其他成员得分都不超过k,则该小组成绩为k。例如,第1小组共有8个成员,得分依次为“5,2,7,11,8,6,5,1”,由此可知最高的前5人得分为“11,8,7,6,5”,其他3人得分为“5,2,1”,因此该小组成绩为5。

按上述要求,编写VB程序,功能如下:在列表框List1中显示各小组每个成员的得分,单击“计算”按钮Command1,在列表框List2中显示成绩最高的小组编号及成绩(如果有多个小组并列最高,则全部显示)。

(1) 若第2小组各成员得分依次为“0,4,12,1,5,9,3,9”,则该小组的成绩是
(2) 请在划线处填入合适的代码。

Const n = 6

Const m = 8

Dim a(n * m)As Integer

Dim c(m)As Integer,ans(n)As Integer

Private Sub Form_Load( )

    ‘读取n个小组每个成员的得分,按组别从小到大依次存入数组a,并显示在List1中

     ‘n(1)到a(m)存储第1小组m个成员的得分

     ‘a(m+1)到a(2*m)存储第2小组m个成员的得分

     ‘以此类推,代码略

End Sub

Private Sub Cummand1_Click( )

    Dim i As Integer,p As Integer,g As Integer,maxg As Integer

    maxg = -1

    For i = 1 To n

        g = GroupScore(i)

        If g > maxg Then

            maxg = g: p=1

           

        ElseIf g = maxg Then

            p=p+1

            ans(p)=i

        End If

    Next i

    For i = 1 To p

        List2. AddItcm“第”+Str(ans(i))+“组,成绩:”+Str(maxg)

    Next i

End Sulb

‘函数返回第w小组的成绩

Function GroupScone(w As Integer)As Integer

    Dim i As Integer,k As Inteser

    For i = 0 To m

        c(i)=0

    Next i

    For i=(w-1)*m+1 To w *m

        k=a(i)

        If k > m Then

        c(k)=c(k)+1

    Next i

    k=m

    Do White c(k)< k And k>0

        k=k-1

       

    Loop

    GroupScore=k

End Function

综合题 困难
3. IPv6是英文“Internet Protocol Version6”(互联网协议第6版)的缩写。IPv6的地址长度为128位,采用十六进制表示。为了便于人工阅读和输入,IPv6 地址可划分成8个块,每块4位,块与块之间用“:” 隔开,如: ABCD:F010000:000:ABCD:EF01 :000:6789。同时,对于多个地址块为0的情况时,可以使用“: :”号,进行化简。化简原则如~ F:

①全0块“0000”,可以化简为“0”

②连续多个全0块,可以化简为“: :”

③一个IPv6地址中只能出现一个“: :”,出现多个全0块时,“: :” 要化简最长的一段,没有最长的就将最左侧的一段化简为“: :”

④“: :”可以出现在地址开头或结尾

如:数据“FBCD:EF01:6789”在化简前为“FBCD:EF01:0000:0000:0000:0000:0000:6789”。

小李根据上述化简算法设计了一个IP化简地址还原的VB程序,功能如下:在文本框Text1中输入已经化简的IP地址,单击“还原”按钮Command1,在文本框Text2中输出其化简前的IP地址。运行界面如图所示。

(1) 运行程序,若在文本框Text1中输入“12::” (引号内数据),还原后,数组元素ip(1)的值为
(2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

Function ipv6(s As String) As String

    Dim i As Integer

    For i= Len(s) + 1 To4

        s= "0"+s

    Next i

   

End Function

Private Sub Command1_Click( )

    Dim ip(1 To 8) As String

    Dim st As String

    Dim f As Integer, k As Integer

    Dim s As String, n As Integer

    f= 0

    s = Text1.Text

    n= Len(s)

    For i= 1 To n

        c1 = Mid(s, i, 1)

        If c1 <> "." Then

            ip(k)= ip(k) +c1

        End If

        If c1= ":" Or i= n Then

            

            If c2 =":" Then

                f= k

            Else

                ip(k) = ipv6(ip(k))

                k=k+ 1

            End If

        End If

    Next i

    k=k- 1

    x=8-k

    For i=k To f+ 1 Step-1

        

    Next i

    For i=f+ 1 To f+x

        ip(i) = "0000"

    Next i

    Text2.Text= ip(1)

    For i=2 To 8

        Text2.Text = Text2.Text + ":" + ip(i)

    Next i

End Sub

综合题 困难