這樣用dictionary也是可以的啦!

更新 發佈閱讀 5 分鐘

在寫《The Nature of Code閱讀心得筆記——使用Python實作》 《The Nature of Code閱讀心得與Python實作》第2.4節時,碰到這麼一個練習題,這個練習題要做的,是要讓在畫面中蹦蹦跳跳的球,會感受到來自畫面邊界的排斥力,球距離邊界越近,排斥力會越大。

這個練習題其實並不困難,很快就寫好了,不過在寫的當中,卻意外對dictionary這個玩意兒的使用時機和使用方式,有了新的想法。好笑的是,這一切,都是因為想偷懶,不想寫註解。

很顯然的,必須要知道球和四個畫面邊界間的距離,才能夠去設計排斥力的大小。這個其實不難辦到,只要在球的class中,增加一個計算離邊界距離的method就可以了。這個method,一開始是這麼寫的

這裡頭的width和height,是畫面的寬度和高度;location.x和location.y,則是球的位置;而傳回的distances中,則放了球距離上、下、左、右四個邊界的距離。

計算的部分寫好了,再來就該把註解寫一寫,免得之後要用時,忘了distances的四個元素,個別是指到哪個邊界的距離。

正要寫的時候,突然覺得挺麻煩的,寫了半天的註解,就為了等到呼叫這個method時,能夠查看distances的哪個元素指的是哪個距離。先前在安排distances[0]~distances[3]所指的距離時,就曾想過,這個順序是逆時針的上、左、下、右,或者順時針的上、右、下、左,還是上、下、左、右,會比較順口容易記得?這可是會影響到呼叫這個method時,是不是容易搞錯順序的機率。除此之外,也會影響到寫程式的速度,畢竟如果是個很讓人彆扭的順序,那就得時不時地去注意有沒有搞錯順序,這樣寫程式的速度快得起來才有鬼。最後之所以用上、下、左、右這個順序,也就是因為唸起來覺得比較順口。當然啦!其他人是不是也覺得這樣的順序比較順,那就不得而知了。

那該怎麼辦呢?瞪著螢幕好一會兒,就是覺得渾身上下懶洋洋的,不想動手。不想寫註解,但卻又希望能看到註解,充分具體展現了拖延症該有的症狀。

沒有寫註解,但是有看到註解。這什麼跟什麼啊!禪宗的公案嗎?

現在傳回的distances是list,有沒有什麼其他的資料型態可以把註解寫在裡頭的?Python基本的資料型態就那一些,有哪個可以辦到呢?

咦?!那個dictionary不是有key嗎?把key當註解來用不就得了!

突然間,拖延症痊癒了,全身充滿幹勁,沒兩下就寫好了。新版的distances_to_edges()長這樣:

def distances_to_edges(self):
distances = {}
distances["top"] = self.location.y
distances["bottom"] = self.height - self.location.y
distances["left"] = self.location.x
distances["right"] = self.width - self.location.x

使用時,可以這樣寫

distances = ball.distances_to_edges()

這時候,distances["top"]、distances["bottom"]、distances["left"]、distances["right"]就是ball距離上、下、左、右邊界的距離,完全不用去管順序,那幾個key就說明了一切。當然啦,如果覺得那幾個key還不夠清楚,也可以改成其他想要的字眼,像是"to_top"之類的。不管怎麼寫,最終極的目標,就是完全不需要註解,也可以輕輕鬆鬆看懂程式想要做什麼。

就這樣,因為拖延症犯了想偷懶,結果是對dictionary的使用時機和使用方式,有了新的體會。原來,dictionary這樣用,也是可以的啦!


留言
avatar-img
ysf的沙龍
28會員
168內容數
寫點東西自娛娛人
ysf的沙龍的其他內容
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
看更多
你可能也想看
Thumbnail
就這樣,因為拖延症犯了想偷懶,結果是對dictionary的使用時機和使用方式,有了新的體會。原來,dictionary這樣用,也是可以的啦!
Thumbnail
就這樣,因為拖延症犯了想偷懶,結果是對dictionary的使用時機和使用方式,有了新的體會。原來,dictionary這樣用,也是可以的啦!
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
我們將會學習 Python 中的數據結構。 主要的數據結構包括列表 (List)、元組 (Tuple)、字典 (Dictionary) 以及集合 (Set)。
Thumbnail
我們將會學習 Python 中的數據結構。 主要的數據結構包括列表 (List)、元組 (Tuple)、字典 (Dictionary) 以及集合 (Set)。
Thumbnail
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
Thumbnail
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
Thumbnail
Basic python data structure
Thumbnail
Basic python data structure
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News