iT邦幫忙

1

【python封招系列】只用基礎語法能夠解開程式問題嗎? #初學者一定也看得懂 #歡迎留言互動

哈囉~ 大家好,
我是心原一馬,內心原來一心喜歡打程式碼,
最近小馬在逛youtube的時候,
看到一段很有趣的視頻(小馬附於參考資料供大家參考),
激發了小馬的創意點子,
跟大家分享一下

注意: 小馬的文章以趣味、親近初學者為方向,
如果你覺得學程式應該買教科書來看,
或覺得小馬的文章寫的不太嚴謹,
可以自己按右上角的叉叉離開。
小馬是覺得寫程式或是學程式就是要有熱忱,
丟掉一些嚴謹性,做一些趣味教學,
能與新手互動有何不可呢?

youtube上的「圍棋」封招系列

那位youtuber是一位下圍棋高手(似乎還是圍棋老師),
在youtube上拍網路上下圍棋的趣味影片,
透過各種給自己「封招」,來挑戰下棋能不能夠獲勝,

啊老師,你下圍棋那麼厲害是因為你懂很多圍棋技巧啊~

似乎對這些圍棋高手來說,「讓子」似乎沒什麼難度,
擅奕者,能夠讓新手先在棋盤上擺九顆子,
然後照樣靠著卓越的圍棋技巧把對手擊敗,
所以他也不玩「讓子」,玩的是「封招」,
只要自己在棋盤上走出特定的棋形就算輸了,
(封住自己的圍棋技巧,跟新手平起平坐的感覺吧)
小馬覺得這種方式非常特別創新也很有意思,
藉著平凡的棋步和觀念贏棋,
而非靠大強大的戰鬥力擊殺對手

python封招系列

那這跟小馬的程式文章有什麼關係呢?
沒錯,小馬今天就是要挑戰給自己的python「封招」啦

有人可能也會覺得說,

啊小馬老師,你寫程式那麼厲害是因為你懂很多程式語法啊

這邊也跟初學者聊一下,
可能初學者一定也很好奇學程式是不是要記很多程式語法,
懂的語法愈多,能做的事做多了?

但我覺得懂很多語法只是工具
真正要程式厲害仍是要鍛練邏輯能力,活用語法,
事實上光是基礎語法能做的事是非常多的,
小馬給自己的挑戰是不能用超過自己的【Python 超入門】<心原一馬從零開始教你打程式> (1)~(11) 統整文章的語法,
來挑戰程式解題平台上面的題目

可以用的基礎語法(嗯…也許會隨著解題數的成長而慢慢解禁)

  1. 輸入、輸出: input(), print()(若是為了讀不限數量的測資允許用try…except,不然有點不知道怎麼讀)
  2. 基礎運算子: +, -, *, /, //, **,比較運算子(小於、大於、等於)、邏輯運算子(and, or, not)
  3. 基礎變數型態: 「整數」(int)、「浮點數」(float)、「字串」(str)、「列表」(list)、「布林值」(bool)
  4. 基礎流程控制: if,else, for,in, while, break, continue
  5. 其它可用的內建函數: range() (如果連這個都封招的話,還真的有點不知道怎麼跑for迴圈)
  6. 自定義函數: def 函數名稱():

封招的項目

除此之外,小馬老師在解題時,
封住其它內建函數

你可能想說,啊小馬老師,
你用了這麼多華麗的語法我都沒學過,
內建模組沒看過…之類的

沒關係,今天小馬老師就自己把這些絕招封起來,
什麼內建函數啦,
進階語法列表生成式切片啦,
「字串」(str)、「列表」(list)的內建方法啦(譬如字串切割有個超好用的字串內建方法split()),
你都沒學過沒關係,
小馬通通都把它封起來,
單純只用基礎語法來做解題挑戰

如果各位有想到什麼適合放進這系列的問題,
或有想要看小馬表演解題的問題,
也歡迎在留言區告訴小馬哦~
(題目來源可以在學外語尚且知道要跟外國人練習會話; 學程式語言,怎能沒有練功平台?心原一馬盤點六個刷題網站這邊找)

試水溫- 從簡單的一題開始

題目- zerojudge- a799: 正值國
先從簡單的開始解,不然一下封了這麼多招很多題目都很難解…
題目說讀進一個數字,
要回傳該數的絕對值 (就是正數還是正的,負數變成正的)

其實看到這一題,很想要直接把內建函數abs()用下去,
abs()就是絕對值的意思,很想要這樣寫:

n = int(input()) #讀入一個整數
print(abs(n))

但是這是【python封招系列】,小馬不能直接用abs()來解題,
那怎麼辦勒?
好險if...else還是可以用的,
就寫個判斷式,如果是負數,就取負號變正的,
如果是正數就不變直接印出

小馬的挑戰

n = int(input()) #讀入一個整數
if n<0:
    print(-n)
else:
    print(n)

登愣,成功過關~
這時如果在玩遊戲的話,
大概會跳出這個視窗
恭喜小馬玩家成功習得新技能: abs()

學程式遊戲化的想法

閒聊一下,這也是小馬的一個點子之一,
如果學程式也能像玩遊戲一樣,
製做成關卡,讓玩家能夠去闖關玩的話,
那麼應該是比單純看書學更有樂趣的吧?

比如說關卡是用程式解決問題,
一開始先把大部份的程式語法鎖起來,
只留下幾個基礎語法給你用,
當你的角色升級,
或是在地上開寶箱撿到「程式技能書」,
你可以慢慢施展出更高級的魔法(就是程式語法)來打怪,
給學習程式這件事增添更多遊戲性

今天就先閒聊至此
(如果有想看小馬挑戰什麼問題也歡迎留言哦~)

系列文章收集

【python封招系列】不用字串內建的split()函數,如何切割字串?原來基礎語法這麼強大

參考資料

  1. youtube- 小小林日常【圍棋】圍棋封招系列,整盤棋不准用「尖」和「扳」能贏嗎?

尚未有邦友留言

立即登入留言