1. 某地高中的技术选考数据,保存在“jsxk.xls”文件中,如图a所示。

图 a

图 b

请回答下列问题:

(1) 统计各学校技术选考人数占本校总人数的比例,找出占比最高的前 5 所学校并绘制柱形图,如图 b 所示。部分 Python程序如下,请在划线处填写合适的代码。

import pandas as pd

import matplotlib.pyplot as plt

#图表支持中文字体显示,代码略

df= pd.read_excel("jsxk.xls",dtype={'学校代码':'string'})           #学校代码列为字符串

df1 = df.groupby("  ", as_index=False).count()        #按学校统计人数

df1 = df1.rename(columns={'姓名':'学生总数'})#重命名列

df1['技术比例'] = round(/df1['学生总数']* 100,2)

df1 = df1.sort_values('技术比例',ascending=False).head(5)

plt.title('技术选考比例前 5 的学校')

plt.bar( )

plt.show()

(2) 在本问题的解决中,为了探究函数 groupby() ,某同学编写了自定义函数zdygroupby() ,其功能为统 计各校技术选考总人数,并以字典的形式返回。函数代码如下,请在划线处填写合适的代码。(注:代码中 lst 为二维列表,列表中每个元素包含3个数据项,格式如[['201901','顾筱扬',NaN],['201901','  俞凯睿', 1.0],['201901',' 陈丹祺', 1.0] … …])

def zdygroupby(1st):

    dic = {}

    for row in lst:

        if row[2] == 1:

            if  :

                dic[row[0]]=1

            else:

                dic[row[0]]+= 1

   

【考点】
过程与自定义函数; 表格数据的图表呈现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 有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

综合题 困难
2. 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

综合题 困难