Number
String
Boolean
list, tuple, dict & set
immutable 不可變的
大多數資料型態為 immutable
a = 123 # integer
a = "abc" # string
可以裝不同型態的資料
指派就是取出舊資料再放入新資料
試試以下程式碼:
a = 1 # line 1
print(id(a)) # line 2
a += 2 # line 3
print(id(a)) # line 4
Line 2 和 Line 4 會不同
再試試:
s = "123" # line 1
print(s[0]) # line 2
s[0] = 'a' # line 3
會出現 TypeError
a = (1, 2, '3')
b = ['4', 5, 6]
相加
(1, 2, 3) + (4, 5, 6)
[1, 2, 3] + [4, 5, 6]
倍增
(1, 2, 3) * 5
[4, 5, 6] * 7
String 也適用
正數取值
a = (1, 2, '3')
a[2]
負數取值
b = ['4', 5, 6]
b[-1]
String 也適用
[ start : end : step ]
a = [1, 2, 3, 4, 5, 6]
a[0:]
a[:5]
a[::-1]
a[0:5:3]
切片後不會影響原來的序列
String 也適用喔~
List can do
a = [1, 2, 3, 4, 5, 6]
# print(id(a))
a[0] = 0
# print(id(a))
a += [7, 8, 9]
# print(id(a))
Tuple cannot do
b = (1, 2, 3, 4, 5, 6)
b[-1] = 7 # Error!
b += (7, 8, 9) # Error!
可以一次指派多個變數
(a, b, c) = (1, 2, 3)
a, b, c = 1, 2, 3 # The same as previous line
或許你想試試
a, b = 1, 2, 3
然後... 他就屎掉惹RRRRRRRRR
將 String , List 轉成 Tuple
tuple()
將 String, Tuple 轉成 List
list()
key: value
型式表示d = {'a': 1, 8: 'gg', (1, 2, 3): [4, 5, 6]}
d = {'a': 1, 8: 'gg', (1, 2, 3): [4, 5, 6]}
d['a']
Then, you can try......
d['b']
d = {'a': 1, 8: 'gg', (1, 2, 3): [4, 5, 6]}
d['hello'] = 'world'
直接對新 key 指派值即可
直接使用 del 陳述句即可
List
a = [1, 2, 3, 4, 5, 6]
del a[1]
# print(a)
Dict
d = {'a': 1, 8: 'gg', (1, 2, 3): [4, 5, 6]}
del d[8]
# print(d)
Dict can do
d = {'a': 1, 8: 'gg', (1, 2, 3): [4, 5, 6]}
d['new'] = 'new value'
List cannot do
a = [1, 2, 3, 4, 5, 6]
a[6] = 7
假設我們使用一個 list 作 key...
t = [1, 2, 3] # Assign a list to variable t
test = {t: 'list'} # Use t as a key in test
然後增加 list 中的值...
t += [4, 5, 6]
dict 中會怎麼變化呢...
test[[1, 2, 3]]
test[[1, 2, 3, 4, 5, 6]]
哪一種方式可以取到值呢?
或許你會認為這樣可行...
test[t]
那麼......
[1, 2, 3]
和[1, 2, 3, 4, 5, 6]
是相同的嗎?
也許只要 id 相同就表示是相同的
但在 python 中不允許使用 id 存取資料喔!
難道知道你家住哪,就可以對你為所欲為?
s = {'1', '2', '3'}
set([1, 2, 3, 4, 5, 6, 0, 1, 2, 3])
input, output & format
print('Hello', 'World')
print(1, 2, 3, 4, 5, 6)
將間隔設為'*'
修改 sep = '*'
print(5, 6, sep='*')
將結尾設為 tab
修改 end = '\t'
print('Hello', end='\t')
print('World')
name = input('輸入你的名字:')
可讓字串用想要的方式顯示
不用打一堆空白、符號來排版
有兩種方式:%, format()
舊式
'%s : %d' % ('abc', 3)
新式
'{} : {}'.format('abc', 3)
'{1} : {0}'.format(3, 'abc')
舊式顯示資料必須照順序,新式則可以指定位置
舊式
'%10s' % ('line')
新式
'{:10}'.format('line')
舊式
'%10s' % ('left')
'%-10s' % ('right')
新式
'{:10}'.format('left') # '{:<10}'.format('left')
'{:>10}'.format('right')
'{:^10}'.format('center')
舊式
'%.2s' % ('line')
新式
'{:.2}'.format('line')
舊式不支援
新式
'{:_<10}'.format('line')
舊式
'%+d' % (123) # 強制加正負號
'% d' % (123) # 需要時才加
新式
'{:+d}'.format(123)
'{: d}'.format(123)
'{:=5d}'.format(-1) # 讓符號和數字對齊兩邊
舊式
'%.2f' % (3.1415926)
新式
'{:.2f}'.format(3.1415926)
經典的BMI計算機
公式:體重(kg) / 身高(m) ^ 2
使用 % / format 排版
The if statement
2 > 1 # 大於
3 < 5 # 小於
4 >= 1 # 大於等於
5 <= 9 # 小於等於
7 == 5 # 等於
8 != 3 # 不等於
a = "123"
a is "123"
a is not "456"
is
v.s ==
is 是比較資料 id
== 是比較資料內容
對於 String 和 Number 是相同的
a = "123"
b = [4, 5, 6]
a is "123"
a == "123"
b is [4, 5, 6]
b == [4, 5, 6]
List
a = [1, 2, 3, 4, 5, 6]
5 in a
7 not in a
Dict
d = {'a': 1, 8: 'gg', (1, 2, 3): [4, 5, 6]}
'a' in d
1 in d
1 in d.values()
所有資料型態都可作為 Boolean
0, "", (), [], {}, None 為 False
Boolean 運算子有not, and, or
運算優先度:not > and > or
not True
not False
True and True
True and False
True or False
False or False
if
判斷ans = "hello"
if ans == "hi":
print("Correct!")
利用前面寫過的 BMI 程式
加個判斷:如果 BMI 落於 18.5~24,就印“正常”之類的
else
判斷ans = "hello"
if ans == "hi":
print("Correct!")
else:
print("Oh no!")
接續前一個練習
加個 else 判斷
elif
判斷ans = "hello"
if ans == "hi":
print("Correct!")
elif ans == "hello":
print(ans)
else:
print("Oh no!")
延續剛剛的 BMI 判斷
加入以下條件:BMI < 18.5 則過輕, > 24 過重
閏年定義:每四年為閏年
但每一百年非閏年
又每四百年為閏年
而閏年的 2月天數為 29 天