筆記:深入淺出-程式設計(四)

更新於 發佈於 閱讀時間約 5 分鐘

複習一下:

我們學習了關於撰寫程式的相關觀念

  • 條件分支(if/else) : 藉由條件分支讓程式執行相對應的功能。
  • 迴圈(while loop ) :程式利用迴圈反覆執行某個區塊的程式碼。
  • 字串處理 (string) : 每個程式都在處理資料,而字串是一種非常重要且常用的資料。
  • 函式(function) : 藉由函式重利用相同功能區塊的程式碼,讓程式的可讀性變高且容易維護。

目前為止我們已經能夠撰寫基本的程式邏輯來處理簡單的資料。

檔案與陣列:

在這章我們將學習如何從磁碟讀取資料並處理個資料。

  • 檔案:電腦中有兩個可以儲存資料的地方,一個就是硬碟,另一個就是記憶體。硬碟可以存的資料量遠遠大於記憶體,並且是永續性的(意即:如果把電腦電源關掉,資料還是會存在)但是缺點是在處理資料時速度慢;而資料存放在記憶體中,存取與變更的速度很快,但是是非永續性的(意即:當程式退出時記憶體的資料便會消失)。
  • 陣列:當程式需要一次處理一大筆資料時,這時候為了處理資料而為每一個資料創建獨立一個變數是沒有效益的(想像一下如果要處理的數據量有1000甚至更多呢?),並且程式碼也會因此變得複雜可讀性降低,比較好的作法就是利用陣列來處理。
  • 群集變數:陣列是一種群集變數(collection variable) 或稱為資料結構(data structure)。每個陣列可以包含多個變數,每一個變數稱為陣列元素(array element) 。

事前準備:

請先開啟文字編輯器,並且輸入以下文字後另存為 "result.txt" 檔案。

raw-image

先從一場衝浪比賽的計分程式開始:

功能需求:衝浪比賽開始囉,主辦單位將每個參賽選手的成績都記錄下來,並存在"result.txt",請撰寫一個程式將最高分數找出來。

分析:得先讀取檔案"result.txt",然後將名字與分數抽離出來,最後在把最高分的分數取出來。

檔案讀取:

利用 Python 內建的函式 open() 將硬碟中的"result.txt"檔案讀取進來。

open() 函式如果讀取檔案成功,便會回傳檔案柄碼(file handle),利用 for 迴圈將檔案一行一行讀出來,最後記得用 close() 將檔案關閉。

程式碼:

result_f = open("result.txt")
for line in result_f:
print(line)
result_f.close

執行結果:

raw-image

字串處理:

可以從上述的執行結果看到現在每一行字串都包含名字與分數,這兩個中間有一個空格,因此利用 Python內建的函式 split() 利用空格將字串分割開來。

程式碼:

result_f = open("result.txt")
for line in result_f:
line_split = line.split()
score = line_split[1]
print(score)
result_f.close

執行結果:

raw-image

條件判斷:

最後一步了,創建一個變數名為"max_score"紀錄目前最高的分數值,每次取得分數後都跟這個值做比較,如果大於則將目前最高分更新,如果小於目前最高分則不動。

程式碼:

result_f = open("result.txt")
max_score = 0
for line in result_f:
line_split = line.split()
score = float(line_split[1])
if(score > max_score):
max_score = score
print(max_score)
result_f.close

執行結果:

raw-image

可以列出前三名的分數?

功能需求變更:參賽者希望可以最高看到前三名的成績。

分析:最直覺的想法就是新增另外兩個變數來分別存放第二名和第三名的分數,可是如果等下參賽者又想要看所有的成績排名,難道就要再次修正程式然後創建多個變數分別存下分數嗎?當然不是!這時候我們得使用陣列。

創建陣列:

使用 陣列變數名稱 = [ ] 來創建陣列,接著將檔案中讀取的分數加入到陣列當中。

Python 內建的 append() 方法可以將元素加入到陣列中。

排序:

在上述程式中,我們使用 if 判斷邏輯來找出最大值,不過要如何找出第二、第三名的分數呢?利用排序把陣列中的資料從大排到小,即可得出第二名與第三名的分數。使用Python 內建的 sort()可以將陣列中的資料從排到大,reverse() 則可以將陣列的排序反過來。

程式碼:

result_f = open("result.txt")
scores = []

for line in result_f:
line_split = line.split()
score = float(line_split[1])
scores.append(score)
scores.sort()
scores.reverse()

print(scores[0])
print(scores[1])
print(scores[2])
result_f.close

執行結果:

raw-image








avatar-img
5會員
8內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Ivan的沙龍 的其他內容
函式 隨著程式功能越來越多,所撰寫的程式碼也會越來越龐大,此時要管理複雜的程式並不是很容易的事,此時可以利用函式來控制程式的複雜度。 提醒 本章節中原本有將訊息傳送給 Twitter 平台的範例,我將其修正為使用print()顯示訊息來模擬(為了不將時間花費在申請 Twitter 帳號)。
字串處理 每個程式都是在處理資料,就拿上一章的猜數字遊戲來說,程式處理的資料就是從使用者輸入的數值與亂數產生器所產生的數值做比較,而這章節主要著重於字串這個資料型態的說明。 字串就是一連串的字元。 字串的第一個字為起始位置(Start),從 0 開始。 字串其他位置的字元與起始字元的距離則
為什麼要學習撰寫程式? 使用別人所撰寫的軟體時,總是會受限於別人所提供的特定功能,但是當你遇到了一些工作是目前現有的軟體都幫不上忙的情況該怎麼辦? 如果你會撰寫程式,這時候就可以自己創造一個專為解決此工作的程式;換句話說,撰寫程式讓你擁有控制電腦的力量。 安裝 Python 首先必須在電腦
簡介: 這是一個關於程式設計的系列文章,或者準確的說是一系列的學習筆記,紀錄著我學習程式設計的筆記與心得。我決定從這本《深入淺出-程式設計》開始紀錄,原因是因為這本書在有限的篇幅中,僅可能的對於什麼是程式設計進行了生動的說明,內容著重於程式邏輯與現實編程中的所會遇到的實際問題,循序漸進且實際演練,
作者 稻盛和夫(1932/01/30 - 2022/08/24)。 1959年創立京都陶瓷股份有限公司(現稱京瓷),1984年創立第二電電(現稱KDDI)與成立稻盛財團,並創辦「京都賞」每年表彰對人類社會進步發展的有成人士,被譽為日本「經營之聖」。 簡介 作者回顧一路走來的人生與多年來的經營
作者 柳根榕,韓國最大閱讀論壇Awesome People 創辦人暨閱讀經營顧問CEO、 韓國知名自我開發部落格「超人老師的自我開發故事」格主。 這本書在說什麼 年少時期 小時候被繼母虐待,作者在沒有愛的環境下長大,因為沒有被愛過,也就不知道該如何去愛。為了保護自己不再受到傷害
函式 隨著程式功能越來越多,所撰寫的程式碼也會越來越龐大,此時要管理複雜的程式並不是很容易的事,此時可以利用函式來控制程式的複雜度。 提醒 本章節中原本有將訊息傳送給 Twitter 平台的範例,我將其修正為使用print()顯示訊息來模擬(為了不將時間花費在申請 Twitter 帳號)。
字串處理 每個程式都是在處理資料,就拿上一章的猜數字遊戲來說,程式處理的資料就是從使用者輸入的數值與亂數產生器所產生的數值做比較,而這章節主要著重於字串這個資料型態的說明。 字串就是一連串的字元。 字串的第一個字為起始位置(Start),從 0 開始。 字串其他位置的字元與起始字元的距離則
為什麼要學習撰寫程式? 使用別人所撰寫的軟體時,總是會受限於別人所提供的特定功能,但是當你遇到了一些工作是目前現有的軟體都幫不上忙的情況該怎麼辦? 如果你會撰寫程式,這時候就可以自己創造一個專為解決此工作的程式;換句話說,撰寫程式讓你擁有控制電腦的力量。 安裝 Python 首先必須在電腦
簡介: 這是一個關於程式設計的系列文章,或者準確的說是一系列的學習筆記,紀錄著我學習程式設計的筆記與心得。我決定從這本《深入淺出-程式設計》開始紀錄,原因是因為這本書在有限的篇幅中,僅可能的對於什麼是程式設計進行了生動的說明,內容著重於程式邏輯與現實編程中的所會遇到的實際問題,循序漸進且實際演練,
作者 稻盛和夫(1932/01/30 - 2022/08/24)。 1959年創立京都陶瓷股份有限公司(現稱京瓷),1984年創立第二電電(現稱KDDI)與成立稻盛財團,並創辦「京都賞」每年表彰對人類社會進步發展的有成人士,被譽為日本「經營之聖」。 簡介 作者回顧一路走來的人生與多年來的經營
作者 柳根榕,韓國最大閱讀論壇Awesome People 創辦人暨閱讀經營顧問CEO、 韓國知名自我開發部落格「超人老師的自我開發故事」格主。 這本書在說什麼 年少時期 小時候被繼母虐待,作者在沒有愛的環境下長大,因為沒有被愛過,也就不知道該如何去愛。為了保護自己不再受到傷害
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
這篇內容,將會講解什麼是「for迴圈」,以及與「for迴圈」相關的知識。包括for迴圈的簡介、for迴圈、break、continue。
Thumbnail
在流程控制中,最常用的就是for loop 或是 while loop 語法了。 最常見的場景就是根據條件判斷式,重複執行特定的指令。 如果要在python寫出類似C/C++ for loop,可以怎麼寫呢? 透過索引去進行迭代 for var in range( start=0, sto
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
此篇文章連結 RAM 與 C語言陣列的關係並提供陣列與for-loop 使用的相關教學 前半段為基本電腦觀念、後半段為實作能力的教學
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
本文介紹了Python中zip與enumerate函式的使用,以及它們的語法說明和程式範例。zip函式允許同時迭代多個可迭代對象,這使得程式碼更簡潔;而enumerate函式則在迭代時,提供元素的索引,使得實用工具,尤其是當需要追蹤元素的位置時。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
這篇內容,將會講解什麼是「for迴圈」,以及與「for迴圈」相關的知識。包括for迴圈的簡介、for迴圈、break、continue。
Thumbnail
在流程控制中,最常用的就是for loop 或是 while loop 語法了。 最常見的場景就是根據條件判斷式,重複執行特定的指令。 如果要在python寫出類似C/C++ for loop,可以怎麼寫呢? 透過索引去進行迭代 for var in range( start=0, sto
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
此篇文章連結 RAM 與 C語言陣列的關係並提供陣列與for-loop 使用的相關教學 前半段為基本電腦觀念、後半段為實作能力的教學
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
本文介紹了Python中zip與enumerate函式的使用,以及它們的語法說明和程式範例。zip函式允許同時迭代多個可迭代對象,這使得程式碼更簡潔;而enumerate函式則在迭代時,提供元素的索引,使得實用工具,尤其是當需要追蹤元素的位置時。