依然來個標準的 numpy
+ matplotlib
套件輸入。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
回味失敗的過去...
π = np.pi
θ = np.linspace(0, 2*π, 500)
r = 3
x = r * np.cos(θ)
y = r * np.sin(θ)
plt.plot(x, y)
[<matplotlib.lines.Line2D at 0x7ffb114542b0>]
我們要設定一組 axes 的屬性, 就需要知道目前在用的 axes 是哪一組。這要怎麼知道呢? 就是用
ax = plt.gca()
gca
的意思是 "Get Current Axes"。
ax = plt.gca()
ax.set_aspect('equal')
plt.plot(x, y)
[<matplotlib.lines.Line2D at 0x7ffb407a68d0>]
果然成功了!
附帶一提, 我們之所以用了 r=3
這樣的設定, 是因為如此很容易造出「可變半徑」的極座標系統。比方說, 我們想畫出:
可以這樣畫出來...
r = 1 - np.sin(θ)
x = r * np.cos(θ)
y = r * np.sin(θ)
ax = plt.gca()
ax.set_aspect('equal')
plt.plot(x, y)
[<matplotlib.lines.Line2D at 0x7ffb407d7e10>]
但「藍心」看來怪怪的, matplotlib
有可「快速上色法」, 用一個字母就代表一個顏色。
ax = plt.gca()
ax.set_aspect('equal')
plt.plot(x, y, 'r')
[<matplotlib.lines.Line2D at 0x7ffb114880f0>]
Markdown 是一種標準語法, 很方便快速的可以做簡單排版。非常多的 app 都有支援, 可以參考
Python 的資料型態, 有我們已見過的數字 (整數、浮點數), 字串, 串列。
spam = 73
egg = "你好"
ham = [9, 4, 8, 7]
egg
'你好'
有名的 print
指令。
print("hello, world")
hello, world
再來還有一個是「字典格式」。
spam = {'spam':'午餐肉', 'egg':'雞蛋', 'ham':'火腿'}
查詢 (記得 Python 的 index 都是中括號)。
spam['ham']
'火腿'
新增一筆記錄。
spam['apple'] = '蘋果'
spam
{'spam': '午餐肉', 'egg': '雞蛋', 'ham': '火腿', 'apple': '蘋果'}
name = input("請輸入你的名字: ")
請輸入你的名字: 炎龍
name
'炎龍'
來個簡單的互動!
name = input("請輸入你的名字: ")
print(name + ", 你好!")
請輸入你的名字: 炎龍 炎龍, 你好!
注意輸入永遠是「字串」格式。比方說以下的匯率換算會出問題!
c = 0.287284242
jpy = input("請輸入日元金額: ")
print('換算成台幣為', jpy*c)
請輸入日元金額: 12000
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-29-8a1ab77b1d3c> in <module> 1 c = 0.287284242 2 jpy = input("請輸入日元金額: ") ----> 3 print('換算成台幣為', jpy*c) TypeError: can't multiply sequence by non-int of type 'float'
jpy
'12000'
在 Python 中, 資料型態很容易可以轉變!
float(jpy)
12000.0
變成整數。
int(jpy)
12000
修改程式碼。
c = 0.287284242
jpy = float(input("請輸入日元金額: "))
print('換算成台幣為', jpy*c)
請輸入日元金額: 12000 換算成台幣為 3447.4109040000003
數字換成自串。
str(87)
'87'
不管輸入什麼, 都回應「拍拍」的療癒系對話機器人。
egg = input('>>> ')
print("(つ´ω`)つ: 拍拍")
>>> 今天很難過。 (つ´ω`)つ: 拍拍
好像還不錯, 可是只能說一句話就結束。我們之後來改寫!
st1 = "(つ´ω`)つ"
st2 = "⸜(* ॑꒳ ॑* )⸝"
st1 + st2
'(つ´ω`)つ⸜(* ॑꒳ ॑* )⸝'
也可以連加幾次!
st1 + " " + st2
'(つ´ω`)つ ⸜(* ॑꒳ ॑* )⸝'
不同類別基本上不能運算...
"⸜(* ॑꒳ ॑* )⸝" + 87
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-41-026ecfbbd54c> in <module> ----> 1 "⸜(* ॑꒳ ॑* )⸝" + 87 TypeError: can only concatenate str (not "int") to str
但可以...
"⸜(* ॑꒳ ॑* )⸝" * 5
'⸜(* ॑꒳ ॑* )⸝⸜(* ॑꒳ ॑* )⸝⸜(* ॑꒳ ॑* )⸝⸜(* ॑꒳ ॑* )⸝⸜(* ॑꒳ ॑* )⸝'
串列的反應和字串很像!
[1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
純量乘法還是不行!
[80, 75, 65] * 1.2
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-45-ee4e764d6c90> in <module> ----> 1 [80, 75, 65] * 1.2 TypeError: can't multiply sequence by non-int of type 'float'
但整數倍數可以...
[80, 75, 65] * 3
[80, 75, 65, 80, 75, 65, 80, 75, 65]
2 < 3
True
3 < 2
False
注意指定數字和比較是不同的!
a = 7
a == 8
False
不等於
a != 8
True
a >= 6
True
a <= 6
False
接著我們寫入程式。
grade = 66
if grade > 80:
print('太神了!!')
elif grade > 60:
print('及格了!')
elif grade > 30:
print('還不錯, 再加油!')
print('我開玩笑的')
else:
print('不要灰心, 再努力一點!')
及格了!
range 是最常用來快速生成串列的指令。
range(10)
range(0, 10)
加上 list 指令更清楚。
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
也可放到一個變數當中。
L = list(range(10))
L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(n, m)
會產成一串的數字 x, 這些數字符合
$$n \leq x < m$$list(range(2, 10))
[2, 3, 4, 5, 6, 7, 8, 9]
串列中的資料型態可以走混搭風, 甚至串列中有串列也可以!
奇怪的串列 = [37, 85, [2, 3, 6], 'cat', 49]
奇怪的串列
[37, 85, [2, 3, 6], 'cat', 49]
在 Python 中有「集合」的資料形態, 特色和你想的集合一樣!
mylist = [2, 2, 3, 3]
myset = set(mylist)
myset
{2, 3}
range(n, m, step)
這是 range
做完整的指令格式。
list(range(1, 10, 2))
[1, 3, 5, 7, 9]
還有字串快速生出一個串列的方法!
L = list("ABCDEFGHIJK")
L
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
找出字串中特定字元的方式!
L[2]
'C'
L[10]
'K'
從後面算過來也可以!
L[-1]
'K'
可以「切」出其中一部份。
L[3:6]
['D', 'E', 'F']
某個位置開始到最後。
L[5:]
['F', 'G', 'H', 'I', 'J', 'K']
同理, 到某個位子。
L[:5]
['A', 'B', 'C', 'D', 'E']
再一次, index 可以從後面來...
L[:-2]
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
字串基本上是一樣的方式!
s = 'ABCDEFGHIJK'
s[:-2]
'ABCDEFGHI'
類似這樣的「矩陣」 (以後會學怎麼變成真的矩陣)。
$$A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}$$A = [[1, 2], [3, 4]]
"第 0 列, 第 1 行" 的元素
A[0][1]
2
Python 的 for
迴圈基本上就是用 list
來做的: 把 list
中的元素一個一個拿出來, 執行我們要執行的動作。
X = ['豬', '狗', '牛']
for i in X:
print(i)
豬 狗 牛
當然, for
迴圈最好的朋友就是 range
。
for i in range(10):
print(i)
0 1 2 3 4 5 6 7 8 9
s = 0
for i in range(1, 101):
s = s + i
print('1 + 2 + ... + 100 =', s)
1 + 2 + ... + 100 = 5050
while 條件式:
條件符合就執行
要小心不要讓這個迴圈無窮執行。
n = 1
while n < 10:
print("*" * n)
n = n +1
* ** *** **** ***** ****** ******* ******** *********
message = ""
while message!="Bye":
message = input(">>> ")
print("(ノ▼Д▼)ノ: 拍拍")
print()
>>> 今天很難過 (ノ▼Д▼)ノ: 拍拍 >>> Python 都不會寫。 (ノ▼Д▼)ノ: 拍拍 >>> 同學也不幫我。 (ノ▼Д▼)ノ: 拍拍 >>> Bye (ノ▼Д▼)ノ: 拍拍