打印dataframe的前十行_小学生之十行Python解高思五星题(一)

本文介绍了如何使用Python帮助小学生解决奥数问题,通过for循环和if判断等基本语法,逐步解决高思五星题。文章列举了三个实例,包括寻找满足特定条件的三位数、解决乘积顺序错误的数学题以及质数填充问题,展示如何利用编程思维简化复杂计算。适合有一定奥数基础并对编程感兴趣的孩子,通过编程实践增强逻辑思维能力。
摘要由CSDN通过智能技术生成
612bde5f77d5f929ed969de1be4d0195.png

自己工作用Python,也想找机会让自己儿子入门下编程。在陪娃鸡了一段时间奥数后,我觉得Python可以用来解一些小学生奥数题,在儿子身上实践后发现挺适合小学生的理解能力,打算写几篇文章无私分享下,如果对其他小朋友有一点点用也是非常高兴了。

那为什么要跟高思五星题过不去?从小数学棒棒的我都觉得高思五星太难,正常的小朋友靠脑力是做不来的,所以就作为目标让计算机来攻克吧。


准备

推荐Jupyter Notebook,不清楚如何安装的自行百度,也可以使用Python3.6自带的IDE开发。随便找一本python书,就入门而言随便什么教材都是OK的。先看完前几章即可,不用去看复杂的图形和多媒体操作等章节。

那什么题目适合编程实现?首先要让孩子知道电脑的优势是死算,可以化繁为简地解决问题。也有部分题目需要先运用数学知识先行一步,再发挥电脑的运算优势。不管是哪一类题目,我挑选题目的原则是十行代码搞定,不让冗长的步骤使小朋友感到恐惧。每题学会一个新的知识点,循序渐进。

适合谁?有奥数基础,对编程感兴趣的孩子

【五年级高思第10讲超越篇第7题】a,b,c是三个互不相同的自然数,且满足abc X bca=7bc X cba,求三位数abc

书后的解题步骤需要了解同模之类的知识才能读懂,对我家这样没有经过几奥洗礼的小学生来说是太难了,但这样的题目交给计算机是不难的。只要设a,b,c三个变量,让他们循环组合成不同的组合,然后用if语句验证是否满足题目的等式即可。小朋友在学过if和for语法后即可自行完成,非常有成就感的。

for a in range(1,10):

for b in range(1,10):

for c in range(1,10):

if a!=b and a!=c and b!=c:

if(a*100+b*10+c)*(b*100+c*10+a)==(700+b*10+c)*(c*100+b*10+a):

print(a,b,c)

答案是:495

对于熟悉Python的读者一定会说这样的写法还不够完美,对小朋友来说能写到这个程度已经达到要求了。

【知识点】for循环,if判断,嵌套

【五年级高思第10讲超越篇第8题】已知算式abc x bca x cab = 234235286,其中a>b>c,后来发现右边的乘积的数字顺序出现错误,但是知道个位数的6是正确的,那么原式中的abc是多少?

我也是看了答案才知道怎么解,要求一个小学生拥有这么清晰的思路,实在太为难孩子了。和上一题方法完全一致,但更进一步的地方是需要自己再创造两个条件。虽说顺序发生错误,但不管怎么排序也就那么些数字,这个数不会小于200000000,也不会大于900000000。另外需要学会的新语法是求余数的“%”。

for a in range(1,10):

for b in range(1,10):

for c in range(1,10):

if a>b and b>c and (a*b*c-6)%10==0

and (a*100+b*10+c)*(b*100+c*10+a)*(c*100+a*10+b)>200000000

and (a*100+b*10+c)*(b*100+c*10+a)*(c*100+a*10+b)<900000000:

print(a,b,c,(a*100+b*10+c)*(b*100+c*10+a)*(c*100+a*10+b))

程序会打印出以下答案,肉眼看下就知道第三个是本题的答案

8 7 6 462191616

9 6 4 310315456

9 8 3 328245326

【知识点】求余数,隐藏条件解读

【五年级高思第10讲兴趣篇第4题】如图4个小三角形的顶点处有6个小圆圈,在这些圆圈中分别填上6个质数(可以重复),使得他们的和是20,而且每个小三角形3个顶点上的数之和相等,请问:这6个质数的乘积是多少?

066a8c445f9ae30d30bfcd14ffa93c53.png

这道题不是5星题,但适合介绍新的编程知识点“List”。前面的题目中的循环比较简单,这里的循环对象是“质数”,所以需要人为创造一个“List”作为循环取数的“池子”。“List”是非常重要的概念,在实际工作中还会使用到多维的dataframe,因此先把一维的List掌握好是非常重要的。以下是小朋友写的:

hi=[2,3,5,7,11,13]

for a1 in hi:

for a2 in hi:

for a3 in hi:

for a4 in hi:

for a5 in hi:

for a6 in hi:

if a1+a2+a3+a4+a5+a6==20 and a1+a2+a3==a2+a4+a5 and

a2+a4+a5==a2+a3+a5 and a2+a3+a5==a3+a5+a6:

print(a1*a2*a3*a4*a5*a6)

答案是900,是对的,但不够好。在我们熟悉了for循环的使用方法后,如果遇到这类嵌套多层的for循环时,其实有更简洁的编码方式,再者要有好的编写习惯,比如可以用mylist去定义质数的数列,而不是用hi,另外每个小三角形要先计算好,以后遇到更复杂的编码时可以方便的重用这些计算结果。参考代码如下:

mylist = [2,3,5,7,11,13,17]

for i1,i2,i3,i4,i5,i6 in ((x1,x2,x3,x4,x5,x6) for x1 in mylist for x2 in mylist for x3 in mylist for x4 in mylist for x5 in mylist for x6 in mylist):

triangle_1 = i1 + i2 + i3

triangle_2 = i2 + i4 + i5

triangle_3 = i2 + i3 + i5

triangle_4 = i3 + i5 + i6

total = i1 + i2 + i3 + i4 + i5 + i6

if total == 20 and triangle_1 == triangle_2 and triangle_1 == triangle_3 and triangle_1 == triangle_4:

print(i1,i2,i3,i4,i5,i6,' ',i1*i2*i3*i4*i5*i6)

【知识点】List对象,高级for循环方法

这三题不难,儿子和他的一位小伙伴都可以很顺利的完成,让我感觉到写程序其实对小朋友也不是一件遥不可及的事情。也不需要用那些图形化的所谓儿童编程来做过渡。如果学业压力不大可以天天练习的话,估计一年下来就可以学成上班了,哈哈,想多了,好久不写东西了,今天先写到这里吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值