吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4459|回复: 38
收起左侧

[Python 转载] 一次山东省级Python“编程大赛”经历几感悟

  [复制链接]
廿不. 发表于 2021-6-5 15:40
  锋芒初露,大家见谅。  

有幸代表学校参加山东省科技馆(省青少年科技活动中心)和山东省青少年科技教育协会举办的
第三届山东省青少年创意编程与智能设计大赛“,下面是于此最真实、最全面的经历,抑或是全网关于此次比赛最详细的描述了。
  先介绍一下自己,一名民办私立寄宿制学校的初二学生,学校年级千余人,我成绩只一般,年纪前五十(实际上这次期中考了51名,以前都是前10或20)。我们学校每年考入当地重点高中四五百,升学率常是我们市第一。这里学生包括我大多数都是农村孩子,学校管理特别严格。万没想到的是这样一个传统的教学”机器“能有心让学生不学习却干这种事,万没想到的是我还能干出花来。

  那是2021年寒假前一周临期末的一个下午,我们全班同学都在站着背诵政治,我们班主任(才28岁但孩子都2岁多了,长相相比其他简直是最帅的。而且不常大人,还经常跟我们聊生活,谈国防,看新闻)拍拍我的肩膀问我:”咱们班有谁会编程吗?“我当然有自知之明,把睡我上铺的兄弟举荐了出去。老师问他”python“,结果这人结结巴巴说不出来了,断送了这个机会。老师看这不行,在前面比了个”stop“的手势,示意我们停下来:”咱们班有没有编程特别好的同学啊?“下面的就应该知道了,同学们一致喊我,我只能找班主任命去见了微机老师。讽刺的是微机老师看见我说:”我记得16班编程好的不是你啊?“不过她还是向我介绍了比赛的相关事项。不过我现在也不明白我怎么会被阴差阳错的选出去

  过几天,学校里开会,集合了十几个(三千多人才十几个)”精英“,除了我都是校外补习机构学习python的,商讨政策。比赛在寒假期间进行,会议决定组建微信群共同商讨相关事务。我看那十几个同学,特别是有个哥们儿缠着我说”都是志同道合的人好不容易聚一块,你们怎么不说话啊?欸,我打算写个pygame,你呢?“其实我都听不懂这些,加上内向,哪里说的出话呢?
  
  寒假里,学校又组织网课,更没时间搞这些了。我一度把这件事忘了,微信群老师各种催我也不看。临作品上交前一天网上十点多,亲切的班主任问我要手机号,说信息老师要,我装没看见。但过一会信息老师突然打过电话来,说许多同学都因为网课的原因而放弃,这恰是一个很好的机会。最后说”帮“我写一个程序,用它参赛,并且给我明日的学习请三小时假,我明天只需要按着剧本把程序介绍演下来就行了。但我可不是这样的人,横竖睡不着觉,就在脑子里构想。第二天,老师把程序发给我,我看了,感觉不行,决定另谋出路(其实我看不懂那几行代码,只知道太简陋)。我回复老师说不要了,自己开始写程序。边上课边敲打着键盘,3个小时我完成了所有的任务,创造出了一个可以实现交互,循环运行,思路独特,独具创意的实用工具。这个三小时前还不可能,4小时前还想着放弃的难题就这样迎刃而解了。



当时的参赛资料还保存着,代码放到最后了,初中水平有限,理性看待。


代码图片
1.png

2.png

   3.png



运行结果显示

程序运行.png

程序循环运行.png


程序流程图
程序运行流程图.png
  作品上交后,就没了音讯。我像扔出漂流瓶般把苦心孤诣的杰作上交了,任它在海浪与波涛中披荆斩棘。新学期开学几周,信息老师告诉我作品获奖了,还是一等奖,并被推荐参加省赛。我这才明白那才只是初赛,仅此而已。不过,根据老师的反应来看,应该是全校只有我一个参加省赛的一等奖,其他要么放弃样么用了老师的程序勉强的获得安慰奖。


  之后,信息老师给我一本python的书籍,就不再过问了。那日常学习,只不过睡前看几眼,没有多少压力而言。五一前,一个周三,信息老师突然找到我说比赛就在段的话周六,长的话周日才能回来,周五就要去济南报道,简直一个晴天霹雳打在我头上。周五,简单收拾了行囊。因为学校的规章也没有手机,时间紧迫也不容我回家取手机,因而下面的行程都没有留下照片,是为可惜。上午课程上到一半就提前到餐厅就餐。尤为最清晰的是平日只能抢到几块排骨的我那午吞了一整碗。
   1927324-20210427225615758-1961090691.jpg
  乘高铁去济南西站。尽管没有听见奔腾的泉,但看罢四围的连山,确实到了老舍笔下的《济南的春天》。这里属于济南城郊,离城区还有老远。后来换乘了在空中行驶的地铁二号线,不想首次独自离开家乡竟以这种方式。随我同去的老师很有时间观念,准时到了目的地。比赛在一所高中举行,大人一律不准陪同,剩下的路必须由我来走了。不过,直到最后我才知道我去的正是时候。报道后,我们安排了住宿,看了赛程的安排,两天排得满满的。规划好明天如何去参赛地点,最终决定乘坐25路公交车(请记住这一辆公交车)。初到济南,唯一改善的是吃食。每天同去的老师都会带我去外”下馆子“,我比较腼腆,不说吃什么,他就点最贵的(反正也是学校报销)。这里也许是老龄化最不突出的地方,因为许多大学坐落于此,加上周五的缘故,我眼中所见都是青年。我在人群中穿着”老土的“校服,简直鹤立鸡群。
1927324-20210427225608477-783807940.jpg
  吃饱了,也逛的心满意足了,剩下的就是比赛了。为了对付明天的比赛,我把那本书重温了一遍,并做了笔记,不过早已丢失了。也用老师带的笔记本电脑操作了一下。事实上,我先前学习的知识几乎为零,所有的东西都是这一下午乃至晚上所学得的。不过,相比以前,我已经精通许多,也有了足够的底气在这济南参赛。周五十一点多,我想也学累了,干脆弄些有趣的。于是开始学如何用python绘图,主要是利用turtle来实现。最后简单洗漱了些,就去睡觉了,至少酒店的床很软,不记得有没有做梦,梦见了什么。
286.jpg
   420132302bb254c7.jpg
  第二日早,吃了早饭,根据昨天的规划,等待公交车。不过,眼看时间过去,公交车就是不来。”大费周折来到济南,总不能回去给同学说迟到错过比赛吧?“我最坏地想。比赛规定7点50开始点报人数,过时不至为弃权。但公交车知道43才缓缓开过来,速度只是像昨天学的”turtle“(乌龟)一样,我开始抱怨昨天不应该学它。上了车,好在人少站少,很快到了比赛场地--济南大学城实验高级中学。等我找到我的项目的位置,爬上5楼,已经51分了,理论上我一上场就被淘汰了。不过经过惊心动魄,我最终就位了。第一环节是主观题,用机器操作,根据题目编写符合要求的程序。我看看题,傻了眼:......请你利用python内置标准库如turtle完成一副绘图作品,表达对网络的畅想。要求能实现交互、循环、运用数学相关知识、提现编程技巧......这正是昨天所拓展的。真是无心插柳柳成荫。八点到十二点半,三十七名选手,一刻不停地敲击键盘。不断的定位,调整方向,寻找坐标,一个细微的改变可能就会前功尽弃,全盘皆输。赛后在场地进行了简单的午餐。下午是主观题答辩,说白了就是你在台上自说自话,下面评委捡你的毛病。我比较内向,声音不大,而且因为自学的缘故,知识点当让不能精深。惋惜的刚开始就粗心把导入库放在了while循环里,导致程序在演示的机器上卡死无法运行,勉强能够交互。因为编写时直接复制,加上那台机器性能高,没能及时发现问题,加上我本身并不知道到入库不能循环,让我后悔莫及。次日,考验的是客观题,及30道不定向选择,10道判断。题目的难度简直比数学、物理还深,因为他不仅考察编程,更考察数学逻辑力,记忆力,以及英语水平和理解能力。最终有些题目因为我还没有涉及到答案不清。不过最后我提前交卷,本想将试题带出,无奈草稿纸也被收了。下面的流程是参观全国青少年航天馆,从万户飞天道加加林,简单了解了人类探索太空的历史。尽管不清楚与比赛有何关联。
   d098-knvsnuh6387872.jpg
   d509-kqhwhrk4085648.jpg
  比赛就此打住,最后的是颁奖典礼。典礼在学校会堂里举行,毕竟这是所建校5年的现代化高校,首先感觉是十分壮阔,前台的三块巨型显示器、悬在空中的音响左右各一,没见过世面的我当然惊叹不已。首先循环播放了赛程回顾视频,正因为之前报道时时间正好,第一个映入眼帘的图像竟是一身黑色校服的我,顿时我感到光荣无比。后面相继颁布了python,C++,图形化编程,智能设计的小学,初中,高中组一等奖。很遗憾。没有我。而二、三等奖则一个月内公布。不过我依然参与了领奖:有一位C++高中组同学获奖却人不见了(大概率是时间紧提前离开了),工作人员万人之中就选了我去领奖(我当时还坐在里面不方便出来,不知道为什么选我)。在众目睽睽之下,我和山东大学教授握手,并领到了奖项。不过最后奖项只是拍张照,全部回收了。听罢教授的一番演讲,时间不早,我和许多选手一样中途离开了。多亏了这个明智的选择,否则高铁赶不上,当天就回不去了。
   d982263b3d885b9b.png
  回到学校已经是第一节晚自习了,我一进教室,同学们掌声不断,夹道欢迎。不几天,老师告诉我我获得了二等奖第二名,37人中的第13名,去掉根本不是一个重量级的高中组排行第6名。试想如果把主观题的循环错误修改,客观题认真思考一点,一等奖其实手到擒来。下次再有,我绝对代表学校那个一等奖。不过今天的名次属实来之不易。首先不像其他人的课外神来之笔的辅导,我全然是自己专研,甚至信息老师全程只是做了帮我报名、给我买书、送我参赛、管我吃饭这几件事;其次,那这次比赛我的项目组本应110人,实际到的37人绝对是有实力有信心的,不然就像其他73人一样放弃了,高手过招,却不易。闻校长说,这是考试要加分的。
2409-kqhwhrk4085719.jpg
  想想在学校初赛时那几位天方夜谭的兄弟,那些来自全省各地的青少年编程届的精英,也不过如此。
c488fcd8728b00d5.jpg
  山东这样的一个儒家文化的传统大省,近些年搞起来青少年编程比赛,确实是改变了大方向。在这个中国企业被美国到处卡脖子的今天,我希望全国各地也能重视起高新技术产业,培养青少年人才。如果有可能,我也愿意为祖国事业贡献自己的力量,尽管他无不足道。最后,愿中国青年都能摆脱冷气,只是向上走,有一份热,发一份光!






解压查看初赛参赛作品,复赛的作品不可能再重制一遍了。
循环基础计算器.zip (1.07 KB, 下载次数: 24)


代码如下
[Python] 纯文本查看 复制代码
# 定义函数
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("非法输入")
289.jpg

点评

年少有为,未来可期  发表于 2021-7-8 16:55

免费评分

参与人数 17吾爱币 +23 热心值 +13 收起 理由
Java_S + 2 年少有为,未来可期!
jly123 + 1 + 1 很厉害了,这水平比大学的我好多了
py学徒 + 1 我很赞同!
非法菜鸟 + 1 + 1 热心回复!
cocoan + 1 + 1 已经比大多数高中生强了。继续加油,以后有时间经常来吾爱学习。
ablajan + 1 用心讨论,共获提升!
pcx127 + 1 + 1 我们这边几乎没有一个教编程的补习班,家长也没有这种思想
jixiangyh + 1 + 1 我很赞同!
QingYi. + 1 + 1 我很赞同!
putao2014 + 1 + 1 小老乡,真棒,加油!
huguo002 + 1 + 1 编程要从娃娃开始抓起。。。
521521cm + 1 + 1 我很赞同!
从零学习的歪经小 + 1 + 1 加油
⊙⌒⊙ + 1 + 1 我很赞同!
逝去的童年 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lengbingling + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sun2night 发表于 2021-6-7 23:29
本帖最后由 sun2night 于 2021-6-7 23:35 编辑

中华有望,少年努力吧!
我孩子过几天中考,等中考结束,我打算自己认真教她python和C语言。不教她具体的,只教她编程思维和创意。
外面实习班老师教的不靠谱,那是为了挣钱,花架子。
编程到了深处,付出的努力,真的超越那些重体力劳力,就它所解放的社会生产力来说,拿高薪是理所当然的。
现在初中高中孩子学这些时间太短,不敢占用,因为高考中考的独木桥太内卷,太残酷,没办法太多分心!
国民教育在这个方面,其实应该有一些特殊的选择,有些孩子,确实有编程的天赋与创意!但等成年了,被生活重担一压,可能就不会再做这行了。

yty 发表于 2021-6-30 15:22
[Python] 纯文本查看 复制代码
items = {
    '1': ['加', '+'],
    '2': ['减', '-'],
    '3': ['乘', '*'],
    '4': ['除', '/']
}

while True:
    print('\n'.join([f'{k}.{v[0]}' 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[choice]
    if choice == '4' and not num2:
        print('大聪明计算器暂时不会被除数为0!请重新选择计算')
        continue

    ev = f'{num1}{item[-1]}{num2}'
    num3 = eval(ev)
    print(f'{ev}={num3}')
,超级精简版,加油吧~
叫我小王叔叔 发表于 2021-6-7 09:08
nolimited 发表于 2021-6-7 22:57
有潜力,继续加油!
liuyanjie2012 发表于 2021-6-6 12:54
少年强则国家强
huguo002 发表于 2021-6-8 15:30
初二能知晓开关机其实已经很不错了,我们那个年代。。。
Autism55 发表于 2021-6-19 20:12
借用你的代码改了一下
[Python] 纯文本查看 复制代码
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
lovejun 发表于 2021-6-6 16:37
给你点赞,加油
魔术使nqy 发表于 2021-6-7 06:28
一个初二的学生都那么强了,惭愧惭愧
wkh9527 发表于 2021-6-7 07:38
支持下,少年强国
songxp03 发表于 2021-6-8 22:28
我初中关DOS,每次都要问微机老师,关机命令是啥
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表