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

閱讀時間約 7 分鐘

字串處理

每個程式都是在處理資料,就拿上一章的猜數字遊戲來說,程式處理的資料就是從使用者輸入的數值與亂數產生器所產生的數值做比較,而這章節主要著重於字串這個資料型態的說明。

  • 字串就是一連串的字元。
  • 字串的第一個字為起始位置(Start),從 0 開始。
  • 字串其他位置的字元與起始字元的距離則稱為偏移值(Offset)或是索引(Index)。
  • 舉個例子來說,text = "ABC" 這個字串,A 就是字串的開始,其偏移值為 0(Index = 0); B 則是偏移值 1(Index = 1);C 則是偏移值 2 ( Index = 2)。

提醒

這本書出版年份較早(事實上現在已經絕版),因此如果試著輸入書中所寫的網站位置("http://beans-r-us.appspot.com/prices.html")會發現網頁已不存在。因此接下來的內容我會將原本要從 URL 取得咖啡豆價格的 html 字串修改為從本地端創造一個 html 檔案(內容我儘量與書中一致),並使用 Python 匯入程式來模擬書中範例。

開啟文字編輯器然後輸入以下 html 內容後另存為.html 檔案。

<html><head><title>Welcome to the Beans'R'Us Pricing Page</title>
<link rel="stylesheet" type = "text/css" href = "beansrus.css"/>
</head><body>
<h2>Welcome to the Beans 'R'Us Pricing Page</h2>
<p>Current price of coffee beans = <strong>$5.49</strong></p>
<p>Price valid for 15 minutes from 19:42 on Wednesday 27/05/2009.</p>
</body>
</html>

使用瀏覽器開啟這個 html 檔案就會看到以下網站內容:

raw-image

現在一切就緒可以開始撰寫程式碼

先從購買咖啡豆的程式開始

  • 功能需求:請撰寫一個程式可以在指定 html 檔案上擷取出目前咖啡豆的價格。
  • 請在程式最前面先加入以下程式碼。

程式碼:

fileName = "/Coffee.html" 
file = open(fileName,'r')
text = file.read()
print(text)

其中 Coffee.html 檔案請放在指定的資料夾位置。

這時候如果執行程式碼就會截取內容如下:

raw-image
  • text 是一個很大的字串,我們要做的就是在這個字串中取得 5.49 這個子字串。
  • 在 Python 中利用索引值來取得子字串 Text [Index1: Index2 ],意思是從 Index1 開始擷取子字串到 Index2,但不包含 Index2 這個字元。

程式碼:

fileName = "/Coffee.html" 
file = open(fileName,'r')
text = file.read()
price = text[238:242]
print(price)

價格資訊是動態的

  • 功能需求變更:如果網頁內容是動態的,那程式該如何修正才會一樣取得價格資訊呢?例如因為過新年,所以網頁多了"Happy New Year!" 如下圖:
raw-image
  • 觀察一下 html 內容發現,價格資訊總是在 >$ 之後,因此得先搜尋 >$ 字串的位置後,再往後取得價格資料。

程式碼:

fileName = "/Coffee.html" 
file = open(fileName,'r')
text = file.read()
where = text.find('>$')
start_of_price = where + 2
end_of_price = start_of_price + 4
price = text[start_of_price:end_of_price]
print(price)

在指定價格時買入

  • 功能需求變更:使用者希望取得好價錢的時候(價格低於某個值)才買入,否則就不購買
  • 程式需要一直取得價格資訊,並且判斷是否低於某個價格,回想一下這個功能在上一章的猜數字遊戲中實作過,必須使用 While 迴圈。
  • 請注意:因為我們是用本地端 html 來模擬網站資訊,因此如果在 html 中的價格大於 6.9,就會造成程式無法跳離迴圈導致程式掛掉。

程式碼:

price = 9999.0

while(price > 6.9):
fileName = "/Coffee.html"
file = open(fileName,'r')
text = file.read()
where = text.find('>$')
start_of_price = where + 2
end_of_price = start_of_price + 4
price = float(text[start_of_price:end_of_price])

print('Buy!')

定時詢問價格

  • 功能需求變更:剛剛的程式可以正確執行,但是如果使用者不需要一直詢問價格,而是每個 15 分鐘才詢問一下價格呢?
  • 可以使用 Python 內建的 time 函式庫。
  • time.sleep(900) 表示暫停 900s (也就是15分鐘)後再執行。

程式碼:

import time

price = 9999.0

while(price > 6.9):
time.sleep(900)
fileName = "/Coffee.html"
file = open(fileName,'r')
text = file.read()
where = text.find('>$')
start_of_price = where + 2
end_of_price = start_of_price + 4
price = float(text[start_of_price:end_of_price])
print(price)

print('Buy!')
    5會員
    8內容數
    留言0
    查看全部
    發表第一個留言支持創作者!
    Ivan的沙龍 的其他內容
    你可能也想看
    《探索筆記卡片:從瞬間想法到深入的知識管理》6:保值與更新:確保筆記持續價值的秘訣隨著時間的推移,我們的筆記方法可能會改變。 不論是筆記的內容還是方法,都需要隨著學習的深入而進行調整。 持續的反思和嘗試是筆記進步的關鍵。 ▋我們的筆記方法為何會隨著時間而改變? 因為你寫筆記的目的也會換。
    Thumbnail
    avatar
    王啟樺
    2023-09-10
    《探索筆記卡片:從瞬間想法到深入的知識管理》5:寫作的魔力:如何透過原創筆記改變自己對於筆記,有時我們會引用他人的段落,有時則用自己的話寫。 使用他人的句子可以作為學習的起點,但最終還是應該進行原創的寫作。 ▋你應該如何平衡引用和原創? 我的原則是,每引用一次,就原創五句話。 這五句話,其實可以用131寫作節奏來寫
    Thumbnail
    avatar
    王啟樺
    2023-09-09
    《探索筆記卡片:從瞬間想法到深入的知識管理》4:Obsidian vs. Notion:哪款筆記軟體更適合你的輸入與輸出隨著筆記卡片的增加,某些軟體可能面臨效能問題。 例如,Obsidian軟體可能在卡片過多時讀取變慢。 但這些技術上的問題不應成為制約我們學習的障礙。
    Thumbnail
    avatar
    王啟樺
    2023-09-08
    《探索筆記卡片:從瞬間想法到深入的知識管理》3:解密學術論文:用卡片化學習突破知識障礙學術論文的段落比網路文章更為複雜。 利用筆記卡片的方式來解析學術論文能夠提煉出更具價值的知識。 此外,卡片化的學習方法可能對學術研究特別有用。
    Thumbnail
    avatar
    王啟樺
    2023-09-07
    《探索筆記卡片:從瞬間想法到深入的知識管理》2:鮮為人知的寫作秘訣:掌握段落解構術!每篇文章的段落都圍繞著特定的話題。 一個好的段落會圍繞著中心話題,且各句子間有很強的相關性。 通過拆解與分析段落,我們可以更深入地了解其核心意義。
    Thumbnail
    avatar
    王啟樺
    2023-09-06
    《探索筆記卡片:從瞬間想法到深入的知識管理》1:讓學習更輕鬆:筆記卡片攻略大公開入門一個新知識時,筆記卡片的構造方式十分重要。 雖然我也曾經排斥直接引用他人的段落,但摳過來的內容可以為我們提供初步的了解。 利用筆記卡片建立自己的知識架構,可助於更深入地學習。
    Thumbnail
    avatar
    王啟樺
    2023-09-05
    阿卡西紀錄解讀筆記(24)-深入內在每一次的阿卡西紀錄解讀都會改寫我們的能量網格,我們已經與開啟紀錄前的自己不一樣了,即將活出更有力量且擴展的自己,無需擔心自己沒有改變。
    Thumbnail
    avatar
    煌語|阿卡西書籤與光的閱讀者
    2023-07-11
    深入了解區塊鏈(四) - Internal Txns? 真的有筆交易紀錄存在?今天我們會開始深入探討到EVM(以太坊虛擬機)上的一點點基礎知識。 若您是一個常常在etherscan.io上追蹤交易的朋友,一定對上面提到的各項資訊並不陌生。但我們觀察一筆交易時會發現,etherscan.io又額外提供了Internel Txns,這又是什麼呢?本篇將一同來探討。
    Thumbnail
    avatar
    Steve Tsai
    2023-05-23
    閱讀筆記《深度造假:比真實還真的AI合成技術,如何奪走人類的判斷力,釀成資訊末日危機?》●深度造假是一種「合成媒體」(synthetic media,又譯「合成內容」),代表媒體內容(包括圖片、影像和聲音)受到操控,或完全由人工智慧創造。AI技術讓媒體控制變得更輕鬆,也更容易了(例如Photoshop或Instagram的濾鏡功能)。
    avatar
    偶希都理
    2022-07-17