iT邦幫忙

2021 iThome 鐵人賽

DAY 3
1
AI & Data

網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術系列 第 3

【Day 03】- Python 基礎操作與常見資料型態(整數、浮點數、布林值、字串、串列、元組、字典)

前情提要

在前一篇文章內容中帶大家建立了 pipenv 虛擬環境,並在虛擬環境中裝了套件。又安裝了 Vscode ,並透過設定 venv 路徑讓 Vscode 能夠在左下角選擇開發環境。

開始之前

Python 是一個十分易讀且易用的語言,操作相對來說人性化,今天要帶大家操作過一遍 Python 的基礎語法,包含了基礎操作跟常見資料型態,如果有這些基礎的可以先跳過等之後內容歐。

▲ 在 Vscode 中建立 python 檔案 (副檔名為 .py)

Hello World!

讀者可以在 Vscode 中打入以下程式,之後按下右上角的 Run Python File in Terminal(形似播放鍵)

print('Hello World')

▲在剛才創建好的檔案內打入 hello world 程式碼,並按下執行使程式印出 hello world

基礎操作

變數與賦值(assign)

python 是個動態語言,意思是在執行期才確定變數型別,也就是說在使用變數之前不須宣告變數(指定資料型別)。

變數是在記憶體中的一塊位置,有自己的變數名稱和值,方便我們儲存資料。 = 稱為賦值運算子,會將等號右方的值賦予(assign)給左方的變數。以下為一些賦值的例子。

a = 77495358     #將 77495358 這個值賦予給 a 這個變數
b = 3.14159      #將 3.14159 這個值賦予給 b 這個變數
c = 'Hello Here' #將 'Hello Here' 這個值賦予給 c 這個變數
# 以下為一些方便語法
a, b, c = 77495358, 3.14159, 'Hello Here' # 分別將 77495358, 3.14159, 'Hello Here'賦予給 a, b, c
x = y = z = 77495358 # 將 77495358 這個值賦予給 x y z 三個變數

變數型態

這邊列出常見 7 個 Python 資料型態,使用 type() 函式會回傳該變數的型態為何。

  1. 整數 int、浮點數 float
  2. 布林值 bool
  3. 字串 str
  4. 串列 list
  5. 元組 tuple
  6. 字典 dict
  • 整數 int、浮點數 float

浮點數就是數學中的小數。

'''
整數、浮點數範例
'''

a = 5 # 將 5 這個整數賦予給 a 這個變數
b = int('2016') # 將 '2016' 這個字串轉換為整數 2016 之後賦予給 a 這個變數

#  整數的 + - * / 運算
c = a + b
print(c) # Output: 2021
print(type(c)) # Output: <class 'int'>

c = a - b
print(c) # Output: -2011
print(type(c)) # Output: <class 'int'>

c = a * b
print(c) # Output: 10080
print(type(c)) # Output: <class 'int'>

# 除法有分為兩種,真除法、無條件捨去除法
# 真除法與會將數字的小數點保留
c = a / b
print(c) # Output: 0.00248015873015873
print(type(c)) # Output: <class 'float'>

# 無條件捨去除法會將運算後的小數點去除
c = a // b
print(c) # Output: 0
print(type(c)) # Output: <class 'int'>
  • 布林值 bool

用於邏輯判斷的值,值有兩種 True False

'''
布林值範例
'''

a = 87 < 5478
print(a) # Output: True
print(type(a)) # Output: <class 'bool'>

b = 878 >= 0
print(b) # Output: False
print(type(b)) # Output: <class 'bool'>
  • 字串 str

字串的表示方法為文字前後包上 '" ,若要在字串中放入引號,需在要放入的那個引號前方加上反斜線 \也就是斜率為負的那個斜線將欲加入的引號跳脫

注意字串在程式中僅為文字不具意義 e.g."我要 10000000萬" 你的程式不會理你(執行動作),你的銀行也不會變多錢。

後天會介紹字串的更多使用技巧。

'''
字串範例
'''

a = 'Hello '
b = ',World'
c = a + b
print(c) # Output: Hello, World
print(type(c)) # Output: <class 'str'>

c = a*5 + b
print(c) # Output: Hello Hello Hello Hello Hello ,World
print(type(c)) # Output: <class 'str'>
  • 串列 list

類似於其他語言中的 array , 但它的功能更多。串列中能存在多個元素(變數),其中第一個元素的索引值(index)為 0,第二個為 1 ... 以此類推。

  • 元素可為不同資料型態
  • 支援多種操作
  • 在許多場合十分方便、易用
  • 存取速度較慢

串列以中括號包住一系列以逗號相隔的元素表示。

▲說明了串列中第一個元素的索引值(index)為 0 、第二個為 1...

'''
串列範例
'''

a = ['1', '2', '3', '4']
print(type(a)) # Output: <class 'list'>
print(a[0]) # OutPut: '1'
print(a[2]) # Output: '3'

# 範圍取值
# myList[start(開始的index):end(結束的index):sep(間隔)]
print(a[1:3]) #Output: ['2', '3']
print(a[0:3:2]) #Output: ['1', '3']
print(a[::-1]) #Output: ['4', '3', '2', '1']

#串列操作
a.append('6') #在串列最後方放入元素
print(a) #Output: ['1', '2', '3', '4', '6']

a.insert(4, '5') #在串列中 index 為 4 的地方放入 '5' 這個元素
print(a) #Output: ['1', '2', '3', '4', '5', '6']

a.remove('3') #在串列中移除 '3' 這個元素,若有多個 '3' 則移除 index 較小的
print(a) #Output: ['1', '2', '4', '5', '6']

b = a.pop() #移除在串列中的最後一個元素,並回傳該元素
print(a) #Output: ['1', '2', '4', '5']
print(b) #Output: '6'

#串列長度
print(len(a)) #Output: 4

#元素可為不同型態
a = [77495358, 3.14159, 'Hello Here', [1, 2, 3]]  #串列中能存在不同資料型態的元素,甚至是另一個串列
print(type(a[0])) #Output: <class 'int'>
print(type(a[1])) #Output: <class 'float'>
print(type(a[2])) #Output: <class 'str'>
print(type(a[3])) #Output: <class 'list'>
  • 元組 tuple

元組是固定板的串列,是個不可變物件(immutable),當被定義後狀態就不可以被改變,特色是

  • 占用空間較小
  • 存取速度較快
  • 可被字典當成 key (hashable)
  • 常出現於函式回傳值中(Python 中實現多值回傳方式)

元組以小括號包住一系列以逗號相隔的元素表示。

'''
元組範例
'''

a = 1, 2, 3, 4 #封裝(packing)
a1, a2, a3, a4 = a #拆封(unpacking)
print(a1) #Output: 1
print(a2) #Output: 2
print(a3) #Output: 3
print(a4) #Output: 4
  • 字典 dict

跟一般的字典一樣,是個一對一的結構(key:value),一個 key 會對上一個 value。

  • list 是根據 index 取得值, dict 則是以 key 來取得值
  • key 必須為 hashable 的(list、dict 就不是 hashable ,所以 list、dict 不能當作 dict 的 key)
  • value 沒有限制,甚至能是另一個 dict
  • python 預設的 dict 底層是用 hash table 實作的

元組以小括號包住一系列以逗號相隔的元素表示。

'''
字典範例
'''
dic = {
    '1': 500,
    '2': 600,
    90: 'OwO'
}

print(dic['1']) #Output: 500
print(type(dic['1'])) #Output: <class 'int'>
print(dic[90]) #Output: 'OwO'
print(type(dic[90])) #Output: <class 'str'>

dic['new'] = 'hello' #也能給值
print(dic) #Output: {'1': 500, '2': 600, 90: 'OwO', 'new': 'hello'}
print(type(dic)) #Output: <class 'dict'>

dic['new'] = 'world' #修改值
print(dic) #Output: {'1': 500, '2': 600, 90: 'OwO', 'new': 'world'}
print(type(dic)) #Output: <class 'dict'>

del dic['new'] #刪除對應 key-value
print(dic) #Output: {'1': 500, '2': 600, 90: 'OwO'}
print(type(dic)) #Output: <class 'dict'>

輸入輸出

變數在電腦內如果沒有告訴他印在螢幕上,它就不會主動告訴你變數內的值。上面告訴大家如何在程式內定義變數的值,接下來要跟大家介紹 python 程式輸入及輸出的語法,大家都能在自己的 Vscode 中試試。

# 輸入
userInput1 = input() #讀到這行時,程式會停在這邊等你輸入一個值,並將輸入的值以字串的型態賦予給 userInput1
userInput2 = input('your name: ') #與上一個類似,不同在於它會先輸出 your name: 之後再等待使用者輸入

userOutput1 = 'OwO'
userOutput2 = '87'

#輸出
print(userInput1) #將 userInput1 的值印在螢幕上,預設會在輸出後自動換行
'''
OwO
'''
print(userInput1, userInput2) #可用逗號隔開想一次輸出的值,預設每個變數以空白相隔,
'''
OwO 87
'''
print(userInput1, end = ' ') #傳入的參數加個 end 可以更改 print 結束後需輸出的文字,預設是換行,範例中是以空白相隔
print(userInput2)
'''
OwO 87
'''

print(userInput1) #不加 end 參數則是以換行隔開每個 print
print(userInput2)
'''
OwO
87
'''

結語

今天跟讀者介紹在 Python 中基礎的操作與資料類型,對於這些資料型態尤其是 list 與 dict 都會在接下來的幾天經常用到,讀者們能再熟悉這些基本用法,並在自己的 Vscode 上面試試。

明日內容

明天會帶給大家 Python 的條件判斷及迴圈的用法,沒有接觸過或有一些基礎的讀者都能關注歐~

補充資料

Python 基本語法 : https://ithelp.ithome.com.tw/articles/10200505

Python 基礎教程 : https://www.runoob.com/python/python-tutorial.html

Python3.9 document : https://docs.python.org/3/


上一篇
【Day 02】- 網路爬蟲環境設定(Python、pipenv、Vscode)
下一篇
【Day 04】- Python 條件判斷與迴圈
系列文
網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術30

尚未有邦友留言

立即登入留言