一次山东省级Python“编程大赛”经历几感悟
锋芒初露,大家见谅。有幸代表学校参加山东省科技馆(省青少年科技活动中心)和山东省青少年科技教育协会举办的“第三届山东省青少年创意编程与智能设计大赛“,下面是于此最真实、最全面的经历,抑或是全网关于此次比赛最详细的描述了。
先介绍一下自己,一名民办私立寄宿制学校的初二学生,学校年级千余人,我成绩只一般,年纪前五十(实际上这次期中考了51名,以前都是前10或20)。我们学校每年考入当地重点高中四五百,升学率常是我们市第一。这里学生包括我大多数都是农村孩子,学校管理特别严格。万没想到的是这样一个传统的教学”机器“能有心让学生不学习却干这种事,万没想到的是我还能干出花来。
那是2021年寒假前一周临期末的一个下午,我们全班同学都在站着背诵政治,我们班主任(才28岁但孩子都2岁多了,长相相比其他简直是最帅的。而且不常大人,还经常跟我们聊生活,谈国防,看新闻)拍拍我的肩膀问我:”咱们班有谁会编程吗?“我当然有自知之明,把睡我上铺的兄弟举荐了出去。老师问他”python“,结果这人结结巴巴说不出来了,断送了这个机会。老师看这不行,在前面比了个”stop“的手势,示意我们停下来:”咱们班有没有编程特别好的同学啊?“下面的就应该知道了,同学们一致喊我,我只能找班主任命去见了微机老师。讽刺的是微机老师看见我说:”我记得16班编程好的不是你啊?“不过她还是向我介绍了比赛的相关事项。不过我现在也不明白我怎么会被阴差阳错的选出去
过几天,学校里开会,集合了十几个(三千多人才十几个)”精英“,除了我都是校外补习机构学习python的,商讨政策。比赛在寒假期间进行,会议决定组建微信群共同商讨相关事务。我看那十几个同学,特别是有个哥们儿缠着我说”都是志同道合的人好不容易聚一块,你们怎么不说话啊?欸,我打算写个pygame,你呢?“其实我都听不懂这些,加上内向,哪里说的出话呢?
寒假里,学校又组织网课,更没时间搞这些了。我一度把这件事忘了,微信群老师各种催我也不看。临作品上交前一天网上十点多,亲切的班主任问我要手机号,说信息老师要,我装没看见。但过一会信息老师突然打过电话来,说许多同学都因为网课的原因而放弃,这恰是一个很好的机会。最后说”帮“我写一个程序,用它参赛,并且给我明日的学习请三小时假,我明天只需要按着剧本把程序介绍演下来就行了。但我可不是这样的人,横竖睡不着觉,就在脑子里构想。第二天,老师把程序发给我,我看了,感觉不行,决定另谋出路(其实我看不懂那几行代码,只知道太简陋)。我回复老师说不要了,自己开始写程序。边上课边敲打着键盘,3个小时我完成了所有的任务,创造出了一个可以实现交互,循环运行,思路独特,独具创意的实用工具。这个三小时前还不可能,4小时前还想着放弃的难题就这样迎刃而解了。
当时的参赛资料还保存着,代码放到最后了,初中水平有限,理性看待。
代码图片
运行结果显示
程序流程图
作品上交后,就没了音讯。我像扔出漂流瓶般把苦心孤诣的杰作上交了,任它在海浪与波涛中披荆斩棘。新学期开学几周,信息老师告诉我作品获奖了,还是一等奖,并被推荐参加省赛。我这才明白那才只是初赛,仅此而已。不过,根据老师的反应来看,应该是全校只有我一个参加省赛的一等奖,其他要么放弃样么用了老师的程序勉强的获得安慰奖。
之后,信息老师给我一本python的书籍,就不再过问了。那日常学习,只不过睡前看几眼,没有多少压力而言。五一前,一个周三,信息老师突然找到我说比赛就在段的话周六,长的话周日才能回来,周五就要去济南报道,简直一个晴天霹雳打在我头上。周五,简单收拾了行囊。因为学校的规章也没有手机,时间紧迫也不容我回家取手机,因而下面的行程都没有留下照片,是为可惜。上午课程上到一半就提前到餐厅就餐。尤为最清晰的是平日只能抢到几块排骨的我那午吞了一整碗。
乘高铁去济南西站。尽管没有听见奔腾的泉,但看罢四围的连山,确实到了老舍笔下的《济南的春天》。这里属于济南城郊,离城区还有老远。后来换乘了在空中行驶的地铁二号线,不想首次独自离开家乡竟以这种方式。随我同去的老师很有时间观念,准时到了目的地。比赛在一所高中举行,大人一律不准陪同,剩下的路必须由我来走了。不过,直到最后我才知道我去的正是时候。报道后,我们安排了住宿,看了赛程的安排,两天排得满满的。规划好明天如何去参赛地点,最终决定乘坐25路公交车(请记住这一辆公交车)。初到济南,唯一改善的是吃食。每天同去的老师都会带我去外”下馆子“,我比较腼腆,不说吃什么,他就点最贵的(反正也是学校报销)。这里也许是老龄化最不突出的地方,因为许多大学坐落于此,加上周五的缘故,我眼中所见都是青年。我在人群中穿着”老土的“校服,简直鹤立鸡群。
吃饱了,也逛的心满意足了,剩下的就是比赛了。为了对付明天的比赛,我把那本书重温了一遍,并做了笔记,不过早已丢失了。也用老师带的笔记本电脑操作了一下。事实上,我先前学习的知识几乎为零,所有的东西都是这一下午乃至晚上所学得的。不过,相比以前,我已经精通许多,也有了足够的底气在这济南参赛。周五十一点多,我想也学累了,干脆弄些有趣的。于是开始学如何用python绘图,主要是利用turtle来实现。最后简单洗漱了些,就去睡觉了,至少酒店的床很软,不记得有没有做梦,梦见了什么。
第二日早,吃了早饭,根据昨天的规划,等待公交车。不过,眼看时间过去,公交车就是不来。”大费周折来到济南,总不能回去给同学说迟到错过比赛吧?“我最坏地想。比赛规定7点50开始点报人数,过时不至为弃权。但公交车知道43才缓缓开过来,速度只是像昨天学的”turtle“(乌龟)一样,我开始抱怨昨天不应该学它。上了车,好在人少站少,很快到了比赛场地--济南大学城实验高级中学。等我找到我的项目的位置,爬上5楼,已经51分了,理论上我一上场就被淘汰了。不过经过惊心动魄,我最终就位了。第一环节是主观题,用机器操作,根据题目编写符合要求的程序。我看看题,傻了眼:......请你利用python内置标准库如turtle完成一副绘图作品,表达对网络的畅想。要求能实现交互、循环、运用数学相关知识、提现编程技巧......这正是昨天所拓展的。真是无心插柳柳成荫。八点到十二点半,三十七名选手,一刻不停地敲击键盘。不断的定位,调整方向,寻找坐标,一个细微的改变可能就会前功尽弃,全盘皆输。赛后在场地进行了简单的午餐。下午是主观题答辩,说白了就是你在台上自说自话,下面评委捡你的毛病。我比较内向,声音不大,而且因为自学的缘故,知识点当让不能精深。惋惜的刚开始就粗心把导入库放在了while循环里,导致程序在演示的机器上卡死无法运行,勉强能够交互。因为编写时直接复制,加上那台机器性能高,没能及时发现问题,加上我本身并不知道到入库不能循环,让我后悔莫及。次日,考验的是客观题,及30道不定向选择,10道判断。题目的难度简直比数学、物理还深,因为他不仅考察编程,更考察数学逻辑力,记忆力,以及英语水平和理解能力。最终有些题目因为我还没有涉及到答案不清。不过最后我提前交卷,本想将试题带出,无奈草稿纸也被收了。下面的流程是参观全国青少年航天馆,从万户飞天道加加林,简单了解了人类探索太空的历史。尽管不清楚与比赛有何关联。
比赛就此打住,最后的是颁奖典礼。典礼在学校会堂里举行,毕竟这是所建校5年的现代化高校,首先感觉是十分壮阔,前台的三块巨型显示器、悬在空中的音响左右各一,没见过世面的我当然惊叹不已。首先循环播放了赛程回顾视频,正因为之前报道时时间正好,第一个映入眼帘的图像竟是一身黑色校服的我,顿时我感到光荣无比。后面相继颁布了python,C++,图形化编程,智能设计的小学,初中,高中组一等奖。很遗憾。没有我。而二、三等奖则一个月内公布。不过我依然参与了领奖:有一位C++高中组同学获奖却人不见了(大概率是时间紧提前离开了),工作人员万人之中就选了我去领奖(我当时还坐在里面不方便出来,不知道为什么选我)。在众目睽睽之下,我和山东大学教授握手,并领到了奖项。不过最后奖项只是拍张照,全部回收了。听罢教授的一番演讲,时间不早,我和许多选手一样中途离开了。多亏了这个明智的选择,否则高铁赶不上,当天就回不去了。
回到学校已经是第一节晚自习了,我一进教室,同学们掌声不断,夹道欢迎。不几天,老师告诉我我获得了二等奖第二名,37人中的第13名,去掉根本不是一个重量级的高中组排行第6名。试想如果把主观题的循环错误修改,客观题认真思考一点,一等奖其实手到擒来。下次再有,我绝对代表学校那个一等奖。不过今天的名次属实来之不易。首先不像其他人的课外神来之笔的辅导,我全然是自己专研,甚至信息老师全程只是做了帮我报名、给我买书、送我参赛、管我吃饭这几件事;其次,那这次比赛我的项目组本应110人,实际到的37人绝对是有实力有信心的,不然就像其他73人一样放弃了,高手过招,却不易。闻校长说,这是考试要加分的。
想想在学校初赛时那几位天方夜谭的兄弟,那些来自全省各地的青少年编程届的精英,也不过如此。
山东这样的一个儒家文化的传统大省,近些年搞起来青少年编程比赛,确实是改变了大方向。在这个中国企业被美国到处卡脖子的今天,我希望全国各地也能重视起高新技术产业,培养青少年人才。如果有可能,我也愿意为祖国事业贡献自己的力量,尽管他无不足道。最后,愿中国青年都能摆脱冷气,只是向上走,有一份热,发一份光!
解压查看初赛参赛作品,复赛的作品不可能再重制一遍了。
代码如下
# 定义函数
def add(x, y):
"""相加"""
return x + y
def subtract(x, y):
"""相减"""
return x - y
def multiply(x, y):
"""相乘"""
return x * y
def divide(x, y):
"""相除"""
return x / y
def opposite(x, y):
"""相反数"""
return - x
def remainder(x,y):
"""求余"""
return x % y
print("选择运算:")
print("1.相加")
print("2.相减")
print("3.相乘")
print("4.相除")
print("5.乘方")
print("6.相反数")
print("7.绝对值")
print("8.取余")
choice = input("输入你的选择(1/2/3/4/5/6/7/8):")
print("请输入进行运算的两个数字(求同一个数相反数和绝对值输入同一数字即可)")
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
if choice == '1':
print(num1,"+",num2,"=", add(num1,num2))
elif choice == '2':
print(num1,"-",num2,"=", subtract(num1,num2))
elif choice == '3':
print(num1,"*",num2,"=", multiply(num1,num2))
elif choice == '4':
print(num1,"/",num2,"=", divide(num1,num2))
elif choice == '5':
print(num1,"的",num2,"次方=", pow(num1,num2))
elif choice == '6':
print(num1,"的",num2,"相反数=", opposite(num1,num2))
elif choice == '7':
print(num1,"的绝对值=",abs(num1))
elif choice == '8':
print(num1,"除以",num2,"的","余数=", remainder(num1,num2))
else:
print("非法输入")
choice2 = input("是否继续运行,选择T或F :")
while choice2 == "T":
def add(x, y):
"""相加"""
return x + y
def subtract(x, y):
"""相减"""
return x - y
def multiply(x, y):
"""相乘"""
return x * y
def divide(x, y):
"""相除"""
return x / y
def opposite(x, y):
"""相反数"""
return - x
def remainder(x,y):
"""求余"""
return x % y
print("选择运算:")
print("1、相加")
print("2、相减")
print("3、相乘")
print("4、相除")
print("5、乘方")
print("6、相反数")
print("7、绝对值")
print("8、取余")
choice = input("输入你的选择(1/2/3/4/5/6/7/8):")
print("请输入进行运算的两个数字(求同一个数相反数和绝对值输入同一数字即可)")
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
if choice == '1':
print(num1,"+",num2,"=", add(num1,num2))
elif choice == '2':
print(num1,"-",num2,"=", subtract(num1,num2))
elif choice == '3':
print(num1,"*",num2,"=", multiply(num1,num2))
elif choice == '4':
print(num1,"/",num2,"=", divide(num1,num2))
elif choice == '5':
print(num1,"的",num2,"次方=", pow(num1,num2))
elif choice == '6':
print(num1,"的",num2,"相反数=", opposite(num1,num2))
elif choice == '7':
print(num1,"的绝对值=",abs(num1))
elif choice == '8':
print(num1,"除以",num2,"的","余数=", remainder(num1,num2))
else:
print("非法输入")
choice2 = input("是否继续循环运行,选择T或F :")
if choice2 == "F":
import sys
sys.exit(0)
else:
print("非法输入")
if choice2 == "F":
import sys
sys.exit(0)
else:
print("非法输入") 本帖最后由 sun2night 于 2021-6-7 23:35 编辑
中华有望,少年努力吧!
我孩子过几天中考,等中考结束,我打算自己认真教她python和C语言。不教她具体的,只教她编程思维和创意。
外面实习班老师教的不靠谱,那是为了挣钱,花架子。
编程到了深处,付出的努力,真的超越那些重体力劳力,就它所解放的社会生产力来说,拿高薪是理所当然的。
现在初中高中孩子学这些时间太短,不敢占用,因为高考中考的独木桥太内卷,太残酷,没办法太多分心!
国民教育在这个方面,其实应该有一些特殊的选择,有些孩子,确实有编程的天赋与创意!但等成年了,被生活重担一压,可能就不会再做这行了。
items = {
'1': ['加', '+'],
'2': ['减', '-'],
'3': ['乘', '*'],
'4': ['除', '/']
}
while True:
print('\n'.join(}' for k,v in items.items()]))
choice = input("输入你的选择(1/2/3/4/):")
if choice not in items:
print('大聪明计算器暂时不会!请重新选择')
continue
# 此处应当限制输入数据类型,此处不再赘述
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
item = items
if choice == '4' and not num2:
print('大聪明计算器暂时不会被除数为0!请重新选择计算')
continue
ev = f'{num1}{item[-1]}{num2}'
num3 = eval(ev)
print(f'{ev}={num3}'),超级精简版,加油吧~ 山东学长发来贺电,少年强则国强 有潜力,继续加油! 少年强则国家强 初二能知晓开关机其实已经很不错了,我们那个年代。。。 借用你的代码改了一下:lol
def add(x, y):
"""相加"""
return x + y
def subtract(x, y):
"""相减"""
return x - y
def multiply(x, y):
"""相乘"""
return x * y
def divide(x, y):
"""相除"""
return x / y
def opposite(x, y):
"""相反数"""
return - x
def remainder(x,y):
"""求余"""
return x % y
while True:
print("选择运算:")
print("1.相加")
print("2.相减")
print("3.相乘")
print("4.相除")
print("5.乘方")
print("6.相反数")
print("7.绝对值")
print("8.取余")
s = ['1','2','3','4','5','6','7','8']
choice = input("输入你的选择(1/2/3/4/5/6/7/8):")
if choice not in s:
print("请输入正确的数字")
continue
else:
print("请输入进行运算的两个数字(求同一个数相反数和绝对值输入同一数字即可)")
try:
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
except ValueError:
print("请输入正确的数字")
else:
if choice == '1':
print(num1,"+",num2,"=", add(num1,num2))
elif choice == '2':
print(num1,"-",num2,"=", subtract(num1,num2))
elif choice == '3':
print(num1,"*",num2,"=", multiply(num1,num2))
elif choice == '4':
print(num1,"/",num2,"=", divide(num1,num2))
elif choice == '5':
print(num1,"的",num2,"次方=", pow(num1,num2))
elif choice == '6':
print(num1,"的",num2,"相反数=", opposite(num1,num2))
elif choice == '7':
print(num1,"的绝对值=",abs(num1))
elif choice == '8':
print(num1,"除以",num2,"的","余数=", remainder(num1,num2))
jixu = input("是否继续 输入任意键继续 输入q退出")
if jixu.lower() == 'q':
break
给你点赞,加油 一个初二的学生都那么强了,惭愧惭愧 支持下,少年强国 我初中关DOS,每次都要问微机老师,关机命令是啥