星期日, 6月 18, 2017

Python Basic Day 2 小記

Day 2

9:00 ~ 10:25
Chapter 3

Notes:
  • 運算子
    • 指數運算子 ** 為指數運算子, 可以計算 2的 4 次方 之類的運算
    • Python 沒有遞增 ++ 及遞減運算子 --
== Class break ==
10:40 ~ 11:35
Chapter 3

Notes:
  • 位元位移運算子
    • 左移一個位元, 可以想成是 * 2的 1 次方
    • 右移2個位元, 可以想成 除以 2 的 2 次方

11:35 ~ 12:00
自主練習


== Class break ==

13:00 ~ 14:15
Chapter 3

Notes:
  • 邏輯運算子
    • XOR,
      • 相同的值為 0 ( T / T 或 F / F ), 不同值為 1 ( T / F 或 F / T )
      • 針對選項只能選其一的時候可以使用, 例如 Male 或是 Female 只能選其一, 但是又不能都選或是都不選

相關練習程式碼


# coding=utf-8

# ** 為指數運算子, 可以計算 2的 4 次方 之類的運算
v = 2 ** 4

print(v)

# 字串運算子
a = '4'
b = '2'

# 字串運算子, 左右都必須是字串
print(a + b)

# + - * 的時候型態為 int
c = 5
d = 2
e = c + d
print(type(e))
print(e)

# 使用 / 的時候, 型態為 float
f = 5
g = 2
h = f / g
print(type(h))
print(h)

# 使用 // 來讓型態為 int,
i = 5
j = 2
k = i // 2
print( type(k) )
print(k)

# python 無遞增或是遞減運算子, 用 += 或是 -= 替代
l = 5
l += 8

print(l)

# 位元運算子
m = 128

# 左移一個位元, 可以想成是 * 2的 1 次方
print(m << 1)

n = 128

# 右移2個位元, 可以想成 除以 2 的 2 次方
print( n >> 2)


輸出結果

16
42
<class 'int'>
7
<class 'float'>
2.5
<class 'int'>
2
13
256
32


  • If 敘述是一種 two-way 的決策敘述

練習程式

# coding=utf-8
# if 敘述
if True:
  # 後面一定要放敘述, 可以使用 pass 來填充, 不會進行任何動作
  print('Test')

# if else 方式
if True:
  print('True')
else:
  print('else')

# if-else if 方式
a = 4
if a > 2:
  print("a between 3 ~ 5")
elif a > 5:
  print("a > 5")
else:
  print("a <= 2")


輸出結果
Test
True
a between 3 ~ 5

  • 條件運算子
    • Python 沒有三元運算子

== Class break ==

14:30 ~ 15:30

  • for 迴圈
    • 類似 for each, 利用 range類別產生數列

練習程式碼

# coding=utf-8
# for 迴圈練習
s = "abcdef"

c = 100

# 語法
# for item  in  range():
#     statement
for c in s:
  print(c)

# 這邊要注意會 列出 f, 因為會 overwrite 剛剛的 c, 不只限制在 for 迴圈內
print(c)

# 一般可能會用底線 _ 來命名, 代表可能不會使用這個變數
for _ in s:
  print('----')

# 使用 range() 方式來進行, 起始值為 0
for v in range(10):
  print(v)

# 從 2 開始, 不大於 5
for j in range(2, 5):
  print(j)

# 從2開始不大於8, 間隔為 2
for k in range(2, 8, 2):
  print(k)

輸出結果

a
b
c
d
e
f
f
----
----
----
----
----
----
0
1
2
3
4
5
6
7
8
9
2
3
4
2
4
6

  • 進階迴圈控制
    • break
    • continue

練習程式碼

# coding=utf-8
# break 會中斷迴圈, continue 不會中斷迴圈
for v in range(5):
  print(v, 'a')

  if v == 2:
      break

  print(v, 'b')

print('==== continue ====')

for v in range(5):
  print(v, 'a')

  if v == 2:
      continue

  print(v, 'b')


輸出結果

0 a
0 b
1 a
1 b
2 a
=============
0 a
0 b
1 a
1 b
2 a
3 a
3 b
4 a
4 b


== Class break ==

15:45 ~ 17:00
Chapter 4

Notes:
  • 序列資料
    • Bytes
      • 引號內容必須要 ASCII 字元
      • 可用於存放二進位資料
        • 圖片
        • 聲音
        • 影片
    • List
      • 表示法 []
      • 參數必須是 iterable

練習的程式碼

# coding=utf-8
lst = [1, 3, 5, 7, 9, 11, 13]
print(lst, type(lst), len(lst))

# 透過 index 列出
print(lst[0])
# 如果index 是負數, 從右邊算, 但是也是不能超過範圍
print(lst[-2])

lst[0] = 8

print(lst)

輸出結果
[1, 3, 5, 7, 9, 11, 13] <class 'list'> 7
1
11
[8, 3, 5, 7, 9, 11, 13]

  • Tuple
    • 一種不可更動內容(  immutable) 的序列資料
    • 表示法 ()

  • 資料分割 slicing

練習程式碼

# coding=utf-8
a = [1, 3, 5, 7, 9, 11]
# 如果是直接指定的方式, 會指向同一個物件, 但是只要 a 或是 b 改變, 會一起改變
b = a
# 利用 slicing 建立新的 list
c = a[:]
# 利用 slicing 取出前面 4 個
d = a[:5]

# 利用 id() 判斷是否同一個物件
print(a, id(a))
print(b, id(b))
print(c, id(c))
print(d, id(d))

輸出結果

[1, 3, 5, 7, 9, 11] 4315405768
[1, 3, 5, 7, 9, 11] 4315405768
[1, 3, 5, 7, 9, 11] 4315406024
[1, 3, 5, 7, 9] 4315405960

  • List Comprehension
    • 可以利用特定敘述來指定內容
    • a = [ 0, 1, 2, 3, 4]
    • 等同於 a = [ v for v in range(5) ]

練習的程式碼

# coding=utf-8
# 傳統的做法
a = [ 0, 1, 2, 3, 4]
# 使用 list comprehension 方式
# element for element in range()
b = [ v for v in range(5)]
# 另外一個好處是可以做一些處理, 例如 * 2
c = [ v * 2 for v in range(5)]

print(a)
print(b)
print(c)

輸出的結果

[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 2, 4, 6, 8]


  • Dictionary
    • 類似 Map 的 key-value 的資料集合
    • 建立方式 {key:value}