編程小白很少知道的“三明治”學習模式

編程小白很少知道的“三明治”學習模式

上期文章有讀者留言:“編程是否需要英語和數學都好?”

是的。

可惜很多文章解釋了why,很好地解釋為什麼編程需要英語和數學好,在此我就不贅述。

少有文章介紹 How : 英文和數學都覺得不好,如何有趣而不放棄編程?

我的答案:只有方法得當,面對英文和數學薄弱,不僅不會望而卻步,反而興致盎然地將3門課程“夾”起來學。

第一點堅持看英文原版,最難做到但也是收穫最大的。英語不熟練,會干擾讀原版的效果,先選擇幾本翻譯非常好的經典編程書籍和教程(後面陸續文章介紹經典書籍) 堅持邊刷題邊看,絕對不要只看書。養成習慣後,你會越發喜歡上直接閱讀英文技術文章。

實際工作看,程序員需要一生不斷學習,BAT等大廠的程序員全部在看國外的技術論壇,原因很簡單,國內翻譯過來有時間滯後,這都是其次,要命的是翻譯的質量達不到信達雅。

中文看懂了,題目也刷了十幾道後,開始對照著英文看,已經掌握編程知識和技巧會有新的一層領悟。對英語的促進要比單獨學英語的效果好,認知心理學依據是,目標太籠統無法執行,也容易喪失信心。上述辦法以一個一個小問題,上樹摘蘋果一樣,由低到高自然分解成很小的步驟,任務清晰,容易上手,成就感也來的快些。總結來看,相當於中文和英語先後學了兩遍,1+1大於2

第二點就是數學。線性代數,離散數學是必修,單獨學實在覺得枯燥,不如找恰當的、有趣味的題目,試著用數學和編程兩種方法去解。上述辦法邊學編程,邊瞭解涉及到的數學,不會被大部頭的數學教材嚇到了。

同時,最關鍵是每天必須堅持寫代碼,多少不限。

今天我們以一道數學題的編程解。

題目:班主任交給班長一個任務說今年的班費有6500元,開學給大家買一些禮品作為抽獎用。準備買兩個價位的護眼檯燈。一個是359元作為二等獎,另一個是599元帶充電功能的作為一等獎。班長問老師還有什麼要求,老師說盡量花掉預算,剩下錢越少越好。

班長接到這個任務後感到有點棘手,因為滿足6500以內的組合有很多種:

x * 359 + y * 559 <= 6500

小學4年級就知道有兩個未知數,只有一個等式,很多解。一對一對組合全部列出來就花很多時間。決定讓班上會編程的小明試試。

這也許是孩子喜歡上編程的開始... ...

小明的想法是這樣,用編程將2500元以內所有的可能購買的兩種檯燈的組合都列出來,然後挑出離6500最近的那一組數。

  1. 359元的檯燈數量設為a,將599元的數量設為b
  2. 數量從1開始遞增,每次只遞增一個檯燈的數量,數量乘以單價就是金額
  3. 金額要和6500比較一次,只要不超過6500元就將這組數放進指定數組內。
  4. 等到所有小於6500的組合可能性找齊了,再從中找最接近5600的一組

為了不至於設置for循環次數上限太小,假設全部都買359,那麼會買到多少個檯燈? 答案是6500/359≈18.106

所以將for循環的次數設為20以內

for a in range(0, 20):
for b in range (0, 20):
amount = (a*359) + (b*599) #calculate the value for amount
if amount <= 2500:
values.append(amount) #數組添加一條符合條件的組合總額
print (max(values))

6468

小明很快得到結果是6468,接下來老師問,各買多少?

小明思考了一下,就在以上代碼裡添加一個判斷:

for a in range(0, 20):
for b in range (0, 20):
amount = (a*359) + (b*599) #
if amount <= 6500:
values.append(amount)
if a*359 + b*599 == 6468: #組合後金額等於6468時,a和b是?
print(“359 :”a,"559:", b)
print (max(values))
359 : 3 559 : 9

6468

結果可見359元的檯燈買3個,599元的檯燈買9個

加起來就是6468,只剩32元

班主任滿意,決定將剩下的32元作為紅包發給小明

(結束)

編程小白很少知道的“三明治”學習模式

下期列出一個python學習的書單


分享到:


相關文章: