当Python遇上高考,会发生什么?

延期一个月之后,今天,1071万考生终于走入考场。

 

这届高考太难了,不仅考学生,更是考验疫情的防控能力。

 

但是说到难,2018年浙江省教育厅的一个决定,让不少人感叹真难!

 

原来早在2017年底,就有消息称浙江省信息技术课程改革方案已经出台,确定将Python纳入浙江省信息技术高考!

当Python遇上高考,会发生什么?

纳尼?Python纳入高考?为什么?怎么考?想想都很难!

 

经了解,才明白,原来是纳入高考选考!

 

虽然是选考,但是看看现在市面上涌现了那么多少儿编程培训机构,可见编程越来越向低龄人群进军。

 

可以预见,编程正像当年的英语,是顺应了时代需求发展起来的,未来全民必备的能力!

 

我们不妨思考一下,当Python遇上高考后,会发生什么?

 

当Python遇上高考,会发生什么?

考题会是什么样?

 

未来,Python全面被纳入高考的那一天,我们的考题也会变成这样:

 

问题1:下面代码中func1(a)的结果是:

 

def func1(a):
   sums = sum(map(lambda x: x + 1, a[-3:]))
   return sums

a = [1,2,3,5,4,1,5]
func1(a)

A 9
B 13
C 10

 

问题2:有如下两个列表:

 

list1 = [(2),(0),(1),(8) ]
list2 = [(2,),(0,),(1,),(8,)]

那么,type(list1[0])和type(list2[0])分别是:

 

A int tuple
B int int
C tuple tuple

 

问题3:下面代码中func2(a)的结果是:

 

def func2(a):
   b = {}
   b = b.fromkeys(a)
   return (len(b.keys()))

a = [1,2,4,2,4,1,6,5,2,3,1]
print (func2(a))

A 11
B 6
C 5

 

问题4:定义如下的字符串和列表:

 

a = 'I love PythonSomething!'
b = 'I love PythonSomething!'
c = [1, 2, 3]
d = [1, 2, 3]

那么,a is b和c is d的结果分别是:

 

A False True
B True True
C True False

 

问题5:下面代码的输出结果为:

 

import copy
a = [2,[0,1],8]
b = copy.copy(a)
a[1].append(3)
print(b)
c = copy.deepcopy(a)
a[1].append(4)
print (c)

A [2, [0, 1, 3], 8]
 [2, [0, 1, 3], 8]
B [2, [0, 1, 3], 8]
 [2, [0, 1, 4], 8]
C [2, [0, 1, 4], 8]
 [2, [0, 1, 4], 8]

 

问题6:下面代码中f3的输出结果为:

 

def append_list(val, list=[]):
   list.append(val)
   return list

f1 = append_list(1)
f2 = append_list(2, [])
f3 = append_list('Python')

A [1, 'Python']
B ['Python']
C [1, 2, 'Python']

 

问题7:下面代码中 func3() + func4()的结果为:

 

x = 10

def func3():
   x = 3
   return x**2

def func4():
   return x + 5

func3() + func4()

A 24
B 21
C 115

 

问题8:下面代码中stu2.score的结果为:

 

class Student:
   score = []

stu1 = Student()
stu2 = Student()
stu1.score.append(99)
stu1.score.append(96)
stu2.score.append(98)

A [99, 96, 98]
B [98]
C [99, 98]

 

问题9:二分查找是非常经典的算法。已经有如下定义,请完善代码,实现二分查找算法:

 

def binary_search(list, item):
   '''
   :param list: 列表
   :param item: 要查找的元素
   :return: item在list中的索引,若不在list中返回None
   '''

 

问题10:爬虫是Python的一大应用方向。请通过Python抓取猫眼电影或者豆瓣电影评分前100的电影信息。

 

怎么样?这些考题你是否能Hold住? 

 

当Python遇上高考,会发生什么?

预测分数和录取情况

 

就手上有的数据,以本次山东模拟考的成绩进行深入数据分析,用python可视化带大家模拟一下2020高考分数和录取情况。

(代码较长,故只展示部分)

不同考生成绩分布图:

首先对山东新高考模拟考的成绩进行总体描述:

 

fig = make_subplots(rows=4,cols=2, #4行2列
                    subplot_titles=('所有考生',"物理", "历史", "化学", "地理", "生物", "政治"),
                   specs=[[{'colspan': 2},None],[{},{}],[{},{}],[{},{}],
                         ])  #specs参数定义了如何分配视图区间, 本案例中的“specs=[[{}, {}],[{'colspan': 2},None]]”表示其他行的两个子图平均分配区间, 第一行的第一个子图占据 2列的区间, 并且不存在第二个子图

fig.add_trace(go.Scatter(
    x = raw_data['分数段'], 
    y = raw_data['所有考生本段人数'],
    fill = 'tozeroy',
    mode = 'lines',    
    marker = dict(
        size = 8,
        color =   'rgb(88, 182, 192)'
     )),
    row=1, col=1,
    )

#保存图片
img_file = os.path.join(img_dir, 'img1.svg')
fig.write_image(img_file, scale=1)
fig.show()

当Python遇上高考,会发生什么?

选考物理、化学、生物的学生的成绩呈正态分布,大多数学生的成绩集中于中间,成绩两端学生的人数分布较少。

而选考文科类(历史、地理、政治)学科的学生的成绩呈偏态分布,一段线以下的人数占比较大,尤其历史和地理学科上这种趋势更加明显。

 

本科上线率:

当Python遇上高考,会发生什么?

通过计算各科所有选择的人中有多少人的总分在一段线以上,发现,选考物理的学生的上线率最高,达到了67%,而选考历史的学生的上线率较低,只有37%。

选考科目情况:

 

#所有考生的科目选择情况
sum_people = raw_data['所有考生累计人数'].iloc[-1]
subj_select = []
subj_name = ['物理','化学','生物','历史','地理','政治']
subj_select_percent = pd.DataFrame(index = subj_name,columns=['比例'])
for i in subj_name:
    singel_subj = raw_data['选考'+i+'累计人数'].iloc[-1]
    singel_percent = round(singel_subj/sum_people,4)*100
    subj_select.append(singel_percent)
    subj_select_percent.loc[i, '比例'] = singel_percent

在此次模拟考中,分数在150分以上的考生共有489567人,其中选考地理的人数最多,选考比率为63.6%,选考政治的人数最少,选考比率只有34.31%,而备受大家关注的选考物理的比率为41.59%。

当Python遇上高考,会发生什么?

需要注意的是,山东2020年高考的正式选科时间是5.25-29,而模拟考的时间在1月,因此上述数据只能作为学生选科的重要参考。

双一流高校录取情况分析:

当Python遇上高考,会发生什么?

我们统计了近三年双一流高校在山东的理工类专业录取最低分,位次靠前的依次是北京大学,复旦大学,上海交通大学,浙江大学,中国科学技术大学。

当Python遇上高考,会发生什么?

我们统计了近三年双一流高校在山东的文史类专业录取最低分,位次靠前的依次是清华大学,北京大学,上海交通大学,复旦大学,中国人民大学。

 

双一流高校专业录取情况分析:

 

#南丁格尔图
pie_Nightingale(sci_top10['专业'].values.tolist(),
                sci_top10['频数'].values.tolist(),
                '录取最低分排名\n前10的理工类专业', 
                '理科专业top10.html')

当Python遇上高考,会发生什么?

我们统计了双一流高校录取最低分所对应的专业频次,结果发现,理工类专业中工科实验班的出现频次最高,双一流高校中有25个学校的录取最低分所对应的专业是工科实验班。

当Python遇上高考,会发生什么?

我们同样统计了双一流高录取最低分所对应的文史类专业的频次,结果发现,文史类专业中日语出现的频次最高,双一流高校中有25个学校的录取最低分对应的专业是日语。

怎么样?是不是很有参考价值。

 

当Python遇上高考,会发生什么?

告诉你高考为什么这么难?

 

我们首先看下1977-2018年历年的录取人数和未录取(落榜)人数变化情况,本文数据均来自于网络公开高考数据:

当Python遇上高考,会发生什么?

可以看到1977年恢复高考之后的几年,由于种种原因,高考人数到达了一个比较高的点,随后有所下降。

到2000年之后,高考的人数有了进一步的提升,录取人数也随之大幅提升,2008、2009达到了顶峰(此时心疼自己1秒),2010年之后参与高考的人数趋于平稳。

通过上图也可以发现,早期的高考难度之高,未录取人数是录取人数的数倍之多,而且早期的高考实际上在开始之前有预选的过程,能够参加高考的考生实际上已经经过了一轮大浪淘沙的过程。

随着教育改革,越来越多的考生有机会通过高考接受更进一步的教育。

我们通过下面的百分比图,对于录取率的变化进一步加深认知:

当Python遇上高考,会发生什么?

看到这不禁对老爸发出由衷的赞叹,作者参与高考时的录取率已经是老爸参加时的数倍之多,相较于老爸那个时候的“千军万马过独木桥”,作者过的独木桥已经要宽敞了好多。

部分代码如下:

 
 
 

setwd('D:/爬虫/高考')
data = read_excel('历年录取率.xlsx')
data_year = melt(data,id.vars = '年份',measure.vars = c('录取','未录取'),
variable.name='录取情况', value.name='人数(万)')
ggplot(data_year,aes(x=年份,y=`人数(万)`,fill=录取情况))+
      geom_area(position = 'stack')+
      ggtitle('历年高考人数统计(1977-2018)')+ theme_wsj()+ 
      theme(axis.text.x = element_text(size=15),
            axis.text.y = element_text(size=15),
            axis.title =element_text(size=15),
            plot.title = element_text(hjust=0.5,size=25,face='bold'),
            panel.grid = element_blank(),
            legend.position = 'top',
            legend.title = element_blank(),
            legend.text = element_text(size=15),
            panel.background = element_blank(),
            axis.line = element_blank(),
            axis.ticks = element_blank()
            )+xlim(1977,2018)

说到这,似乎大家会认为现在的高考并不困难,录取率已经到达了8成左右,通过高考已经成了家常便饭,如果你真的这样认为,想太多了。

我们下面就进一步去分析高考数据,为大家列举横亘在高考生面前的三座大山:

三座“大山”

名校录取率

前面我们提到的录取率有了显著的提升,然而录取率实际上是包括了所有的录取情况,同时包含了本科以及专科的录取情况。

真正的“211”,“985”名校的竞争实际上还是异常激烈的,特别是在一些处于“地狱模式”的高考省份(由于没有在网上找到海南省的相关数据,我们选取了其他三十个省份、直辖市的数据):

下面就为大家对比各个省份2018年的985、211录取率:

当Python遇上高考,会发生什么?

当Python遇上高考,会发生什么?

可以看到,不同省份的985和211录取率有着比较明显的差距,12个省份的985录取率低于1.5%,安徽,河南,江苏和贵州更是低于1.2%,作为山东考生的作者也不由得表示“自愧不如”。

即使是录取率最高的省份,985和211的录取率也只是5.8%和13.9%,结合现在各大企业在招人要求中对985和211的要求,高考真的并没有真的变得简单。

高考人数

除了名校录取率低之外,高考人数之多也是横亘在考生面前需要跨过的一个挑战。

由于参与高考人数非常多,对于考试精细度就有了非常高的要求,可能一个细节的失误就会在全省的排名中下降非常多。

同样,我们看下各省2018年参与高考的人数:

当Python遇上高考,会发生什么?

河南省2018年的高考人数达到了86.5万,86.5万这个数据也超过了世界上接近2/3的国家人口数量。广东、山东、四川三个省的高考人数也超过了50万。

由于参与高考的人数众多,这些省的高考几乎都是“肉搏战”。

高考题目难

除了名校录取率低,竞争人数多,另一个让广大考生为之“折服”的就是那些难度大到放飞自我的题目。

其中一个省份的题目难度几乎是所有考生公认的最高,那就是江苏省,包括小编所在山东省在内的很多其他省的老师,都会告诉学生不需要关注江苏的历年题目,因为本省的考试题目不会那么难。

除了题目难度大,江苏高考改革的力度和速度也是冠绝全国,我们整理了一份江苏省2000年以来的历年高考改革的路线图:

当Python遇上高考,会发生什么?

看到这些模式的名称,可能大家已经有些眩晕,也深切体会到能从江苏高考中杀出重围的都是勇士。

既然已经眩晕,不如就眩晕到底,下面是一道江苏省高考的真题,自行体验难度:

当Python遇上高考,会发生什么?

数学、物理这种大杀器都无需出场,只需一道作文题在作者这种“语文天残”看来就已经slay全场。

前面我们说了那么多高考的困难之处,是不是考生们真的就手足无措了呢,实际上并不是,只需要手握一些高考专属“杀器”就可以迎刃而解(以上纯属虚构)

高考“杀器”

五年高考三年模拟

当Python遇上高考,会发生什么?

此杀器的使用方法无需赘述,只需把其全部吃透,虽然这也不表示高考就一定会有好成绩。希望各位考生努力复习,切勿如同书名一样“五年高考,三年模拟”。

葛老师

葛老师乃高考中的超级大杀器,其威力可以参考下图,正所谓人不在江湖,但江湖上始终流传着他的传说:

当Python遇上高考,会发生什么?

由于葛老师过于强大,切勿幻想能将葛老师像“五年高考、三年模拟“那样吃透之后融会贯通,最好的方法就是“走为上计”,B站上的广大考生已经开始通过弹幕进行了实践:

当Python遇上高考,会发生什么?

 

虽然我们前面假想了各种Python与高考碰撞出的火花,但是实际上,不管是Python,还是高考,都是为我们的人生创造机遇的!

最后祝愿广大考生都能够放平心态,在高考中发挥所学,不留遗憾!

当Python遇上高考,会发生什么?

 

 

当Python遇上高考,会发生什么?

当Python遇上高考,会发生什么?

当Python遇上高考,会发生什么?

当Python遇上高考,会发生什么?

当Python遇上高考,会发生什么?

当Python遇上高考,会发生什么?