Python - Syntax

Python - Syntax

LAVI

Course

可以參考我的課程簡報:

Python Introduction

Introduction

直譯式語言

  • 程式一行一行執行,不須像編譯語言先由編譯器編譯成機器碼
  • 開發速度快、靈活度高
  • 執行速度慢


圖片來源

動態語言 Dynamic Language

  • 變數不須指定型態(int、string、double…)
  • 執行時才確定變數型別
  • 執行過程中變數型態可以改變
    • ex:int -> string

強型別語言

  • 不容忍隱性的型別轉換
  • 比較嚴謹,方便 debug
  • 強型別和弱型別不是二元論,有程度差異

Python 是強型別範例:

排版

  • 縮排很重要!
  • Python 不用 Block { }
  • 排版在 Python 中非常重要
  • 使用 tab,而非空白
    • 不能將 tab 與空白混用

Installation

  1. https://www.python.org/downloads/

  2. 推薦選擇加入 python.exe 到 PATH 裡,方便系統知道要到哪條路徑底下找執行檔

  3. 檢查是否下載成功,可以打開 cmd 輸入
    會顯示你所下載的 Python 當前版本

    1
    python -- version

Syntax

Hello World!

  • 新增一個 main.py 檔案測試

程式碼範例

1
print("Hello World!")

cmd 輸出如下

變數型態

  • Integer
  • Bool
  • String
    • “string” 或 ‘string’ 都可以,只是不能混用
  • Float
    • 沒有 char、double

程式碼範例

1
2
3
4
5
6
7
8
9
10
11
12
13
a = 123    # int     
b = 12.3 # float
c = "123" # string
d = '1.23' # string
e = True # bool
f = None # NoneType

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
print(type(f))

cmd 輸出如下

List

  • 很像 Array 的概念
  • 一個 List 可以存不同型態的資料
  • Index 可以是負的
  • 切割 slice 非常方便
    • 取某段資料

程式碼範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
listTest = [1, 2.3, ⁿLAVIⁿ]  # [1, 2.3, 'LAVI']
listTest・append("Andy") # [1, 2.3, 'LAVI', 'Andy']

print(listTest[0]) # 1
print(listTest[-l]) # 'Andy'
print(listTest[0:2]) # [1, 2.3]
print(listTest[0:3:2]) # [startAt : endBefore : step] -> [1, 'LAVI']
print(listTest[l:]) # [2.3, 'LAVI', 'Andy']
print(listTest) # [1, 2.3, 'LAVI', 'Andy']

listTest.pop() # pop last element
print(listTest) # [1, 2.3, 'LAVI']

listTest.pop(l) # pop index 1
print(listTest) # [1, 'LAVI']

cmd 輸出如下

Reverse with List

  • listTest = [1, 2, 3, 4, 5]
  • 在不使用迴圈的前提輸出:[5, 4, 3, 2, 1],可以這樣寫

程式碼範例

1
2
3
4
listTest = [1, 2, 3, 4, 5]

print(listTest[-1::-1])
print(listTest[::-1])

cmd 輸出如下

Basic I/O

Input

  • 輸入用 Input(),括號內可以輸出內容
  • 若要一次吃多個輸入,可以用 split()
    • 括號內為隔開內容,常見有空白或逗號

程式碼範例

1
2
3
4
5
a = input('input string: ')
print(a)

a, b, c = input('input three number separated by a single space:').split()
print(a, b, c)

cmd 輸出如下

Output

  • 輸出用 print()
    • 自動換行
    • 取消換行使用 end = ''
  • Literal String Interpolation(f-string)
    • Float: f{value : width.precisionf}
    • Others: f{value : width}

程式碼範例

1
2
3
4
5
6
7
8
9
print(123)                      # 123\n
print(456, end='') # 456
print(789) # 789\n

a = 123
b = 1.23456789
c = 'abc'

print(f'{a:8} {b:.6f} {c:6}') # 123 1.234568 abc

cmd 輸出如下

{b:.6f} 輸出是 1.234568,因為會四捨五入的進位

Operators

  • +、-、*、/、%
  • ** 次方
  • // 整除
  • =
    • +=、-=、/=、//=…
    • 沒有 ++ 或 - -

Condition

  • if
  • elif
  • else

程式碼範例

1
2
3
4
5
6
7
8
x = int(input('Enter a number: '))

if x > 90:
print("x is greater than 90")
elif x < 20:
print("x is smaller than 20")
else:
print("I don't know")

cmd 輸出如下

for Loop

  • range(start, end, step)
    • default: start = 0, step = 1
    • [start, end)
  • range(10)
    • 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • range(1, 9, 3)
    • 1, 4, 7

程式碼範例

1
2
3
4
5
6
7
8
a = [5, 4, 1, 2, 3]

for i in range(0, len(a)):
print(a[i], end = '')
print('\n--------------------')

for item in a:
print(item, end = '')

cmd 輸出如下

while Loop

程式碼範例

1
2
3
4
5
a = 0

while a <= 5:
print(a)
a += 1

cmd 輸出如下

Function

程式碼範例

1
2
3
4
5
6
7
def add(a, b = 0, c = 0)
return a + b + c

print(add(1, 2, 3)) # 1 + 2 + 3
print(add(1, 2)) # 1 + 2 + 0
print(add(1)) # 1 + 0 + 0
print(add(1, c = 3)) # 1 + 0 + 3

cmd 輸出如下

Class

程式碼範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class calculator():
# python 內建 init,第一個引數必為 self, self 指的是 class本身,a b是傳入 class 的參數
def _init_(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
def sub(self):
return self.a - self.b
def mul(self):
return self.a * self.b
def div(self):
return self.a / self.b


test = calculator(10, 5)
print(test.add(), test.sub(), test.mul(), test.div())

cmd 輸出如下

heap

heapq 官方文件
可以在 python 直接實作 heap

建立一個 heap 可以使用 list 初始化為 []

heapq.heappush(heap, item)
heapq.heappop(heap)

heapq.heapify(x) 在線性時間內將 list x 轉為 heap

用法範例

LeetCode 786. K-th Smallest Prime Fraction

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution(object):
def kthSmallestPrimeFraction(self, arr, k):
"""
:type arr: List[int]
:type k: int
:rtype: List[int]
"""

minheap = []
for i in range(len(arr)):
for j in range(i+1, len(arr)):
# 總共推了三個 item 進 minheap: arr[i]/arr[j]、arr[i], arr[j]
heappush(minheap, (float(arr[i])/float(arr[j]), arr[i], arr[j]))

for i in range(k):
ans = heappop(minheap)

return ans[1:]

Reference