顯示具有 Python 基礎 標籤的文章。 顯示所有文章
顯示具有 Python 基礎 標籤的文章。 顯示所有文章

2022年4月21日 星期四

Python 基礎:檔案的讀寫 file open

之前介紹過 Python 的基本資料型態,

也有淺談 Python函式的呼叫,

今天則是要來介紹

Python 基礎:檔案的讀寫 file open

此處介紹檔案讀寫有兩種方式,

差別在於需不需要作檔案關閉的動作,

但同樣都是使用 open 來開啟檔案,

語法如下:

open ( 檔名, 開啟模式 , 編碼 )

什麼是檔案 (File)

檔案 (File) 是儲存數據的連續字節,

這些數據以特定的格式儲存,

最後被翻譯為 0與1 的資料給電腦取用。

編碼與字元集

而編碼則是將人眼所見到的文字依照規定的字元集作排列與組合,

這在之前本站也有稍微提到過忘記可再回去瞧瞧,

特別是中文字需要使用適當的字元集 (此處使用 UTF-8) 才不至於產生亂碼

開啟模式(mode)

官方在檔案開啟模式中,

有均有明確的定義

常見的有 :
r  :僅讀取
w:僅寫入但檔案若存在就覆蓋,若檔案不存在就建立新檔案
rb/wb:讀取/寫入 二進制檔 ,也就是直接使用 byte方式存取,不透過任何字元集(編碼)

詳細可參照官方說明文件

檔案讀取

上面使用了兩種方法來開啟檔案,

使用第一種方式開啟的檔案在結束使用時,

必須加上 close() 來關閉檔案

故程式就寫為:

f = open(filename, 'r', encoding='UTF-8')
使用完畢最後得加上
f.close()

檔案寫入

在檔案寫入的時候,

同樣也使用兩種方法來演示,

使用 with open 開啟檔案,

在跳出程式之後會自動關閉檔案,

故寫成:

with open(filename, 'r', encoding='UTF-8') as f:
最後並沒額外增加 f.close()


若沒有關閉檔案的話會怎樣?

在存取的資料量很小的狀況下,

或許不會遇到資料遺失的問題,

當資料量稍大或者同時有許多檔案存取的情形發生的時候,

未執行關閉檔案動作容易造成資料遺失,

故養成習慣使用 with open 來存取檔案為上策。

以上就是今天的主題

Python 基礎:檔案的讀寫 file open

範例程式的原始碼會放在 GitHub上面,

需要索取的話,

訂閱我的 YouTube 頻道後,在文章底下留言吧


2022年4月6日 星期三

Python 基礎:set 用法與範例

之前介紹了幾個函式相關的主題,

函式入門、函式的引數等,

更早以前也有提過關於 Python 的基本資料型態,

今天要來介紹的是

Python 基礎:set 用法與範例

set 屬於無序序列,

也就是排列順序不固定,

但是各元素並不重複出現在 set 中,

以大括號 {}包住各元素並以逗號隔開


set 新增刪除

set要新增刪除元素可透過

add 與 remove 來達成

例如:

b = set()
b.add(3)
b.remove(3)

特別要注意的是宣告空集合的時候,

使用的是 set() 而不是 set{}


交集 ( intersection )

兩個 set 的交集可使用 intersection ,

也能夠使用 & 做為交集


聯集 ( union )

兩個 set 的聯集可使用 union,

也能使用 | 做為聯集

差集 ( difference )

兩個 set 的差集可使用 difference,

也能夠使用 - 做為差集

這邊使用之前提到過的 Python tutor 作範例:


以上就是今天的主題,

Python 基礎:set 用法與範例

set 的用法不難,

只要多練習幾次,

熟悉了就是屬於自己的。





2021年7月9日 星期五

Python 基礎:Number (數值)

在 Python 的資料型態 datatype 中,

有提到過 Python 的幾個資料型態,

之前也一直有介紹關於字串相關的主題

字串的分割

字串的合併與取代

字串的處理範例

今天要介紹的是

Python 基礎:Number (數值)

Number (數值) 簡單的講就是數字,

也就包含了 整數 int,浮點數 float , 複數 complex 等等,

除此以外 布林 bool 這些都是屬於 Number (數值) 這個型態的範疇。


透過內建函式 type 可以簡單判別一個變數的資料型態,

底下就是一個簡單的判別程式:

a = 10
b = 5.5
c = 3.14j

print(type(a))
print(type(b))
print(type(c))
可以看到輸出的結果分別為:
int
float
complex


光是觀看是不會加深印象的,

透過之前介紹的程式視覺化來認識這個小程式,


這就是今天要介紹的主題:

Python 基礎:Number (數值)





2021年7月6日 星期二

Python 基礎:認識編碼與字元集

眾所皆知電腦只認得數字的 0 與 1 ,

一般使用的文字都需要經過編碼的動作將其存成數字,

最後再傳給電腦計算處理,

而編碼的規則就是依照字元集來進行,

今天就簡單介紹下

Python 基礎:認識編碼與字元集


首先認識下幾個常見的編碼

ASCII 碼

電腦最小的儲存單位是 bit (位元),

將一個字元以 8個位元由 0 與 1 組成的數字表示,

就成了所謂的 ASCII 表。

在 Python 中,

使用

chr(x)

來輸出一個 ASCII 或 Unicode 字元。

例如: ASCII 表的 97 代表著英文字母: a

Unicode 碼

ASCII 碼對於英文語系的國家在使用上是不會有多大問題的,

不過地球上有許多不同的語言,

而 ASCII 能容納的字元有限,

為了能讓地球上所有的電腦能夠溝通,

所以有 Unicode碼的設計。

在 Python 中,

使用 

ord(x)

來輸出一個 Unicode 的字元。

utf-8 碼

utf-8 是針對 Unicode字元集的可變長度編碼的方式,

在網際網路上使用特別廣泛,

它使用了 1 ~ 4 個 byte 來表示一個字元。



實際應用

以上就是關於各編碼的字元集的介紹,

在 Python 中,

沒有所謂的字元 ( character ) 資料型態,

即使是一個字元的也稱之為字串 ( string )。

在 Python 內部使用 str 這個資料型態沒有問題,

當今天要與外界交換資料時,

特別是在網際網路上以及使用中文的時候,

常出現亂碼,

這是因為編碼型態不同造成,

所以必須將原有的 str 轉為 bytes 型態來使用。

在字串前面加上一個 b,

b'字串'

表示此字串的 bytes 資料。

字串轉 bytes 資料

將字串轉為 bytes資料稱之為編碼,

使用 encode() 來轉換:

stringA = '李'

stringA_to_Bytes = stringA.encode('字元集')

這字元集,

就是使用 "ascii"、"utf-8"、"unicode" 等等上述的編碼方式

bytes 資料轉字串

相反的,

將 bytes資料轉為字串到 Python 來使用,

則需要以 decode() 來轉換:

stringB = stringA_to_Bytes.decode('字元集')

以同樣的字元集來解碼即可。


同樣的字使用不同的編碼方式會有不同的值,

若在程式設計的過程中出現亂碼,

多為編碼的問題所致。

2021年6月19日 星期六

Python 基礎:List 的使用範例

之前在 Python 的資料型態 datatype

有簡單的介紹過 List ,

除此之外字串分割 split 也會產生一個 List

今天就來介紹

Python 基礎:List 的使用範例

List 屬於有序數列,

也就是能夠以索引方式取值,

通常以中括號將 List 框住,

以逗號將各個元素分開。

舉例來說:

sample_list= [ 'Hello', 'World', 'Python' ]

就是一個 字串 list。


Demo1

以之前的字串分割來舉例:

sample_string = "Hello Would Python"
sample_list = sample_string.split()
print(sample_list)

範例程式將字串以分割 split () 將其分開並產生一個新的 list

List 的內容就如上圖的 Demo1 顯示,

Demo2

List 中的元素可透過索引的方式將其取出

例如

Strlist = ['Hello', 'World', 'Python']
print(Strlist[0])
print(Strlist[1])

從索引值來看,

第一個元素的索引值為 0 ,而後依序加上 1 ,

故 Strlist[0] 是 'Hello' ; Strlist[1] 就是 World。


Demo3

List 切片

print(Strlist[:2])
print(Strlist[1:])
這個就是一個切片的用法,

執行的結果請參照上方圖片的 Demo3

使用冒號隔開起始索引與結束索引 (不包含結束索引),

起始索引未寫就表示從 List[0] 開始,

而結束索引未寫就表示到 List 結束為止。


如果出現第三個冒號,後面的數字則是索引間隔,

以 

Strlist = ['Hello', 'World', 'Python']

為例子

print(Strlist[0::2])
程式執行結果就會顯示

['Hello', 'Python']

值得一提的是,

List 提供了簡便的 "分解賦值",

x, y = [76, 67]
print(x, y)

讓變數能夠直接取得列表中的值

上述範例分別給予 x , y 一個數值:

x = 76 , y = 67

以上就是一些基本的 List 應用範例,

其他還有許多不同的用法,

請待下回分解。


2021年5月18日 星期二

Python 基礎: 字串處理範例

之前提到字串的取代與合併,

以及字串的分割之外,

字串處理還有其他許多不同的方法,

這裡就舉幾個使用方法為範例,

Python 基礎: 字串處理範例

同樣以 Hello World , Python 這個字串做為範例

字串轉大寫 upper()

str_a = 'Hello World , Python'
b = str_a.upper()
print(b)

使用此方法可以讓字串所有字母都轉為大寫

字串轉小寫 lower()


str_a = 'Hello World , Python'
c = str_a.lower()
print(c)

使用此方法讓字串所有字母都轉為小寫

字串首個字母改大寫 capitalize()

str_a = 'Hello World , Python'
d = c.capitalize()
print(d)

使用此方法讓字串首個字母轉為大寫 

字串中每個 word 的首個字母大寫 title()

str_a = 'Hello World , Python'
e = c.title()
print(e)

使用此方法讓字串中每個 word 首字大寫


透過程式視覺化工具幫助理解:


刪除字串頭尾的特定字元 strip() 

strip 若未指定要刪除的字元,

預設刪除的字元為空格

a = '   Python,   '

b = a.strip(' ')
print(b)
c = b.strip(',')
print(c)

字串長度 len

此方法會回傳 字串的長度

d = len(c)
print(d)

同樣使用程式視覺化工具來幫助理解


除了上述這些,

字串處理還有其他許多方法,

就待有遇到再來介紹,

以上就是今天的主題

Python 基礎: 字串處理範例


2021年5月11日 星期二

Python 基礎:字串的合併與取代

之前介紹了字串的分割,

字串的合併同樣也是不可忽視,

分割與合併對字串的處理也是很常見的,

今天就來介紹

Python 基礎:字串的合併與取代

字串的合併

以一個簡單的範例程式來說明
"""字串合併與取代"""
str_a = 'Hello World,'
str_b = 'Python'
target_a = str_a + str_b
print(target_a)

str_c = ['Hello World', 'Python']
target_b = ",".join(str_c)
print(target_b)

上述的範例程式,

演示了兩種字串合併的方式

第一種使用了 加號 直接將兩個字串合併,

第二種則是使用 join 將 list 中的字串以逗號作為分隔合併為一個字串

還是不明白的話,

可使用程式視覺化工具來幫助了解


字串的取代

字串取代的話就比較簡單些,

使用 replace ( '被取代字串', '新字串' )  

直接使用程式視覺化工具來示範

用 Kevin 取代 Python 字串


以上就是今天的主題

Python 基礎:字串的合併與取代

當然除了分割合併以外,

對於字串的處理還有許多方法,

這就請待下回分解了








2021年5月10日 星期一

Python 基礎:字串的分割

之前在 Python 資料型態 datatype 中有介紹過 字串,

字串分割是一個常見的字串處理方法

這就是今天要來探討的主題

Python 基礎:字串的分割

字串的分割 split()

讓使用者輸入一串以空格分隔的數字,

透過 split () 將這些字串分開,

可以看到最後輸出的資料型態為 list 
def print_hi():
"""輸入多個數字"""
grade = input("輸入多個數字:").split()
print(type(grade))
print(grade)


if __name__ == '__main__':
# help(print_hi)
print_hi()


預設是以空白作為分隔,

也可以指定特殊的分隔符號,例如:逗號

如下方範例的 strC

或者需要指定分割的次數,

只需在 split() 的第二個參數加上數字即可

如下方範例的 strD

使用程式演示工具幫助了解 split() 的運作


透過視覺的演示工具能明白地看見,

依照不同的分隔符號與指定分割的次數,

strA 都被分割為不同的字串 list

再根據需求對這些分割後的字串做其他的處理。

字串分割成三等份 partition()

除了上述的 split() 以外,

也能夠透過 partition() 將字串切成三等份,

跟 split() 不同,

partition() 回傳的為不可變更的元組 (Tuple)

同樣以 'Hello World , Python' 作為範例


partition() 將 字串直接以逗號作區隔,

分成兩部分

還是不清楚可以使用程式視覺化工具幫助了解



這就是今天的主題

Python 基礎:字串的分割




2021年4月16日 星期五

Python 基礎:迴圈 Loop 的範例教學

上次介紹了 if else 條件式判別,

除了條件式判別以外,

也能透過程式幫忙做一些重複性的工作,

接著今天要介紹

Python 基礎:迴圈 Loop 的範例教學

要使用程式協助做一些重複性高的工作,

難免就需要用到迴圈,

迴圈可以透過

  • while loop 
  • for loop

兩種方式來做


while loop

寫法為:

while 條件描述: 
    符合條件描述就執行的工作
[else: 結束執行工作]

註: [ ] 表示可寫可不寫

從數字 1 加到 數字 10 可以寫成:

i = 0; total = 0;
while i < 11:
total = total + i
i=i+1
else:
print(total)

當 i 小於 10 就進入 while loop,

先將 總和加上目前的 i

將 i +1 進行下一輪的 while 判別

直到 i = 11 後不符合條件執行 else 後的指定工作


for loop

同樣 從數字 1 加到 數字 10 的範例

可以寫為:

total = 0
for i in range(11):
total = total + i
print(total)
print('')

range ( N ) 這個方法會產生一個由 0 到 N-1 的整數數列,

在範例中 range(11) 就是指 0 ~ 10

所以 total + i 就會依序由 0 ~ 10 做總和


同樣,

透過演示工具方便了解程式的運作,


break 與 continue

在迴圈的執行過程中,

若是遇到某個情況成立,

就中斷迴圈,

這時就需要透過 break 來中斷,

例如 從 1 加到 10 總和超過 30 就不再繼續加總

就能寫作:

total = 0
for i in range(11):
    total = total + i
    if total > 30:
        break
print(total)

直接使用演示工具幫助了解

而 continue 的使用有所不同

例如 列出從 1 加到 10 中 ,總合為 偶數的值

可以寫為

total = 0
for i in range(11):
    total = total + i
    if total%2 == 0 :
        print(total)
        continue

執行結果使用演示工具:


break 與 continue 的差異在於,

break 會直接中斷迴圈的運行,

而 continue 則不影響迴圈繼續下一個步驟

這就是今天的

Python 基礎:迴圈 Loop 的範例教學


2021年4月14日 星期三

Python 基礎 :if else 條件判斷

之前介紹過 Python 的資料型態,

也提到過 Python 的變數與運算,

當然基本的輸入輸出也都有提及,

今天要來介紹的是條件式判斷

Python 基礎 :if else 條件判斷

使用簡單的中文表示,

其實就是國文課程中的造句,

如果 ...  就 ...

舉例來說,

如果考試得 60 分以上就及格

換成程式碼可以寫為

a = int(input('考試得幾分?'))
if a >= 60:
print('及格')
執行的結果如下:

a = int(input('考試得幾分?'))
if a >= 60:
    print('及格')
    
考試得幾分?>? 77
及格

一個基礎的 if 條件判斷 :

if condition:
    statement

如果只有兩種情況需要判別的話,
可以寫為

if condition1:
    statement1
else:
    statement2

如果有多個條件的話,
可以加入 elif 進行多個條件的判別

if condition1:
    statement1
elif condition2:
    statement2
else:
    statement3


現在透過程式範例演示一次,

按下一步按鈕並觀察各變數在記憶體中( Globol frame )以及輸出( Print output )的不同,


有時候也能夠將程式寫成一行,

if score >= 60: print("成績及格")

或者

a = 70
print("及格") if a >=60 else print("不及格")
a = 50
print("及格") if a >=60 else print("不及格")

執行結果如下:


a = 70

print("及格") if a >=60 else print("不及格")

及格

a = 50

print("及格") if a >=60 else print("不及格")

不及格


以上就是今天的

Python 基礎 :if else 條件判斷