打印dataframe的前十行_小学生之十行Python解高思五星题(一)
自己工作用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個質數的乘積是多少?
這道題不是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循環方法
這三題不難,兒子和他的一位小伙伴都可以很順利的完成,讓我感覺到寫程序其實對小朋友也不是一件遙不可及的事情。也不需要用那些圖形化的所謂兒童編程來做過渡。如果學業壓力不大可以天天練習的話,估計一年下來就可以學成上班了,哈哈,想多了,好久不寫東西了,今天先寫到這里吧。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的打印dataframe的前十行_小学生之十行Python解高思五星题(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python把列表写入excel_用Py
- 下一篇: 永恒之蓝漏洞原理 445_新代码漏洞“永