1102 基礎程式設計

這篇文章是學習時整理的一些筆記,讓自己複習時方便,文章內容為上課之內容整理

基本

資料類型

  1. 布林(True/False)
  2. 整數 int
  3. 浮點數 float
  4. 字串 string

變數命名

注意 變數名稱的第一個字元不可以為數字,且有許多保留字,就不一一舉出拉!

  1. 小寫字母
  2. 大寫字母
  3. 數字
  4. 底線

指派變數

1
2
3
4
5
6
7
8
a = 10 #一次指派一個變數
x, y, z = 1, 2, 3 #一次指派多個變數

a = input() #讀取螢幕輸入 得到的值為string
print(a) #印出變數數值
type(a) #印出變數型別

x, y = y, x #變數內容對調

程式註解

1
2
3
4
5
6
7

# 一個井字號可註解該行

“””
在這區段可以註解多行
“””

運算子

  1. +: 加法
  2. -: 減法
  3. *: 乘法
  4. /: 浮點數除法
  5. //: 整數除法
  6. %: 餘數
  7. **: 乘冪

Math 數學函式

1
2
3
4
5
6
7
8
import math #使用時需引用資料庫

math.pi #圓周率
math.e #自然指數
math.sqrt(25) #算出平方根
math.sin(180) #算出sin值 括號內需放弧度 (radians = degrees * pi / 180)
math.log(100) #自然指數為底
math.log10(100) #以10為底

String 字串

python 的字串是不可變(immutable)的(仔細來說是指記憶體位置的值是不可變的 詳細解說可看這裡)

1
2
3
4
# 會發生錯誤
name = 'isadora'
name[0] = a
# 會發生錯誤

宣告

1
2
a = 'this is a string'
b = '' #空字串

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 字串運算
a = 'hello'
b = 'python'
c = a + b # c = 'hellopython'

# 字串複製
a = 'haha'*3 # a = 'hahahahahaha'

# 字串互換
a = 'apple'
b = 'banana'
a,b = b,a

# 字串擷取
word = 'hello python'
word[:] #整個字串
word[4:] #從第四個開始到結束
word[:5] #從頭開始到第五個位置之前
word[3:6:2] #從第三個位置開始到第六個位置之前每隔兩個取一個

字串函式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
my_string = 'hello python!'

# 取得字串長度
length = len(my_string)

# 分割字串
split_string = my_string.split(‘ ‘)


my_string = 'The formation and evolution of supermassive black holes'

# 結合字串
join_string = '-'.join(split_string)

# 取代字串
replace_string = join_string.replace('-','&') # &取代-

# 判斷開頭是否
my_string.startswith('The')

# 判斷結尾是否
my_string.endswith('The')

# 尋找第一次出現之位置
my_string.find('The')

# 尋找最後一次出現之位置
my_string.rfind('The')

# 尋找總共出現幾次
my_string.count('The')


my_string = 'the formation and evolution of supermassive black holes'

# 第⼀個字⺟改成⼤寫
my_string = my_string.title()

# 所有字元改成⼤寫
my_string = my_string.upper()

# 所有字元改成⼩寫
my_string = my_string.lower()

# ⼤⼩寫對調
my_string = my_string.swapcase()

List 串列

串列是一串python的資料,裡面的資料可以不同的資料型態,每筆資料稱為元素,串列裡的元素,也可以是另⼀個串列

宣告

1
2
3
4
5
6
a = list('apple') # a 會是一個串列 = ['a', 'p', 'p', 'l', 'e']

today = '2018/05/30'
s_today = today.split('/') # s_today 會是一個串列 = ['2018', '05', '30']

my_nest = [ 23, 'test', 3.4, [1,2,3] ] # my_nest[3] = [1, 2, 3]

串列函式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
my_nest = [ 23, 'test', 3.4, [1,2,3] ]

# 得知某個項⽬的索引值
my_nest.index('test')

a = [0, 1, 2, 3, 4]

# 判斷是否是元素成員
print(1 in a) # True
print(5 in a) # False

a = ['Mon', 'Tue', 'Wed']
b = [1, 2, 3, 4]

#串聯與重複
c = a + b
a.extend(b) # extend 會將串列中的每個元素視為不同元素加進串列 a = ['Mon', 'Tue', 'Wed', 1, 2, 3, 4]
a.append(b) # extend 會將串列中的每個元素視為一個元素加進串列 a = ['Mon', 'Tue', 'Wed', [1, 2, 3, 4]]

my_week = a * 2 # c = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue', 'Wed']

# 修改串列
my_week[3] = 'Thur'
my_week[1:4] = ['x', 'y', 'z']

# 插入元素

my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
my_list.insert(4, 'insert here')

# 刪除串列項目
my_list[1:3] = []
del my_list[1:3]
del my_list #刪除整串

my_list.remove('a') #只會刪除第一個遇到的

my_list.pop(2)

# 計算某個值在串列出現的次數
my_list.count('a')

a = [5, 3, 1, 7, 8, 9]

# 排序
a.sort() # sort()會改變本來串列的順序
b = sorted(a) # sorted()會傳回排好序的副本 但原本的序列不變
c = sorted(a, reverse=True) # reverse=True 是指

# 複製串列
a = [1, 2, 3]
b = a # a ,b 會指向同一個記憶體位置
b = a.copy() # a ,b 不會指向同一個記憶體位置
c = list(a)
d = a[:]

Tuple 字組

Tuple跟list類似,但不能改變內容,若只有⼀個元素,結尾需要加上逗號

1
2
3
4
5
my_tuple = ('a', 'b', 'c')
thisistuple = (3,)

# 換值
(b,a) = (a,b)

Dictionary 字典

資料是可變的,按照對應(mapping)的⽅式,並利⽤鍵值找到對應的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 建立字典
price = dict()
price = {}
price = {'apple' : 30, 'orange' : 50, 'egg' : '10'}

# 讀取字典項⽬
price_apple = price['apple']
price_apple = price.get('apple')

# 修改字典項目
price['apple'] = 10
price.update({'apple':10})

new_food = {'lemon' : 30, 'banana' : 50, 'beaf' : '300'}
price.update(new_food)

# 刪除字典項⽬
del price['apple']
price.clear()

# 指派 (會指向同一個記憶體位置)
new_price = price

# 複製
new_price = price.copy()

Set 集合

類似數學集合,set存不重複的值

1
2
3
4
5
6
7
8
9
10
11
12
a = set('apple')
b = set(['a', 'p', 'e', 'l']) # a = b

# 集合運算
a&b
a.intersection(b)

a|b
a.union(b)

a-b
a.difference(b)

Boolean 布林

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# x是否等於y
x == y

# 不等於
x != y

# ⼤於
x > y

# ⼤於等於
x >= y

# ⼩於
x < y

#⼩於等於
x <= y

Logic 邏輯運算

1
2
3
4
and/or/not
x > 0 and x < 20
x%3 or x%5
not (x%3 or x%5)

Loop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
example = ['a','b','c','d','e'] 

for i in range(0, len(example)):
print(example[i])

for x in example:
print(x)

i = 0
while (i <len(example)):
print(example[i])
i += 1

# 迴圈中也可以使用
continue
break

File I/O 文件輸入輸出

基本讀寫檔

1
2
3
4
5
6
7
8
9
10
11
mode = 'r' # 打開⽂件為讀取模式
mode = 'w' # 打開檔案為寫入模式,如果該檔案存在會覆寫 如果該檔案不存在,建立⼀個新的⽂件並寫入
mode = 'a' # 打開檔案為寫入模式,從該檔案的結尾開始寫入 如果該檔案不存在,建立⼀個新的⽂件並寫入
mode = 'rt' #模式後⾯加 t 或是 b,代表⽂字或⼆進位 例如: rb, rt, wb, wt…etc

my_file = open('hello.txt', mode) # 開檔

string = my_file.read(5) # 讀取長度為5
my_file.write('Yeah! Great!')

my_file.close() # 關檔

更多操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os

# 更改檔名
os.rename('原檔名.txt', '新檔名.txt')

# 刪除檔案
os.remove('檔名.txt')

# 建立⽬錄
os.mkdir('new_test')

# 改變⽬錄
os.chdir('new_test_2')

# 顯⽰當前⽬錄
os.getcwd()

# 刪除⽬錄
os.rmdir('new_test_2')

Time 時間

time模組時間函數是回傳自1970/01/01起的秒數

1
2
3
4
5
6
7
import time

now = time.time()
print(now)

now = time.ctime(now)
print(now)

struct_time

time模組提供了struct_time物件
• tm_year # 西元年
• tm_mon # 月 1-12
• tm_mday # 日 1-31
• tm_hour # 時 0-23
• tm_min # 分 0-59
• tm_sec # 秒0-61 (60 or 61 閨秒)
• tm_wday # 禮拜幾 0-6 0為週一
• tm_yday # 1-366
• tm_isdst # 夏令時間

1
2
3
4
5
6
7
8
import time

my_localtime = time.localtime()

print(my_localtime)
#time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=11, tm_min=32, tm_sec=56,tm_wday=0, tm_yday=337, tm_isdst=0)

print(my_localtime.tm_year)

strftime()

• %Y # 年
• %m # 月份(01-12)
• %B # 月份名稱 (Januray…)
• %b # 月份名稱縮寫 (Jan…)
• %d # 日期(0-31)
• %A # 星期幾(Sunday…)
• %a # 星期幾縮寫(Sun…)
• %H # 小時(24小時制) (00-23)
• %I # 小時(12小時制) (01-12)
• %p # AM/PM
• %M # 分鐘 (00-59)
• %S # 秒 (00-59)

1
2
3
4
5
6
7
8
import time

now = time.localtime()
fmt = "%Y-%m-%d %H:%M:%S"
time.strftime(fmt, now)

fmt = "It’s %A, %B %d, %Y, time:%I:%M:%S"
time.strftime(fmt, now)

Calendar 日曆

1
2
3
4
5
6
7
8
import calendar

cal = calendar.month(2018, 12, w=3, l=1)
print (cal)

cal = calendar.calendar(2018, w=2, l=1, c=6) # 回傳所有月份
isleapyear(2018) # 是否為閏年
calendar.monthcalendar(2018, 12) # 回傳整個月每個禮袋的列表

Class 物件

⽤來製造物件的「模板」
以”⼈”為例,屬性:性別/姓名/年齡/⾝⾼/體重,⽅法:計算BMI

__init__是⽤來初始化物件的⽅法,在定義類別的第⼀個參數必須是self

1
2
3
4
5
6
7
8
9
10
class person():
def __init__(self, gender, name, age, height, weight):
self.gender = gender
self.name = name
self.age = age
self.height = height
self.weight = weight

def BMI(self):
return self.weight / ((self.height/100.0) ** 2)