要來愛護地球ㄌ
可在我的電腦的內容中看到
在下載時,查看安裝檔的描述
確認檔名是否出現 64 bits 相關敘述
以下皆以 64 bits 為例
Unix-Like 中,通常會有 Python 3 可以直接安裝
apt-get install python3
課程中會以 Visual Studio Code 為主要使用的編輯器
目錄名稱
目錄下的檔案會在這邊顯示
當前目錄位置
當前目錄位置
Command | Explain |
---|---|
~ | 家目錄 |
/ | 根目錄 |
. | 當前目錄 |
.. | 上一層目錄 |
目錄操作中,有一些符號代表特定的目錄位置,如以下所示
Command | Explain |
---|---|
cd {dir_path} | 移動到 dir_path 目錄 |
cd, cd ~ | 移動到家目錄 |
cd / | 移動到根目錄 |
cd . | 不移動 XD |
cd .. | 移動到上一層目錄 |
Command | Explain |
---|---|
ls | 列出當前目錄下所有東西 |
pwd | 查看當前目錄位置 |
touch {file_name} | 建立 file_name 檔案 |
rm {file_name} | 刪除 file_name 檔案 |
mkdir {dir_name} | 建立 dir_name 目錄 |
rmdir {dir_name} | 刪除 dir_name 目錄 |
Command | Explain |
---|---|
python3 {file_name} | 令 Python 執行 file_name 檔 |
python3 | 開啟 python shell |
code . | 在當前目錄開啟 VSCode |
Python Shell 是可以執行 Python code 的地方,通常使用在試試簡單的程式碼時。
Python Shell 會有 >>> 的符號,不要和普通的 shell 搞混惹
說過怎麼進入 Python Shell 了,那離開呢?
ctrl + c 是甚麼意思?
ctrl + c 是一種中斷信號,稱作 KeyboardInterrupt,可以中斷正在執行的程式
Python 中的基本資料型態可以分為以下五種
在電腦中,所有資料都是由 0、1 組成,不同種類的資料,會有不同的儲存方式,因此有各種不同的資料型態。
sign | 1 | 0 | 0 | 0 | ... | 1 | 0 | 0 | 1 |
---|
int
sign | 0 | ... | 1 | 0 | 1 | ... | 1 | 0 |
---|
exponent
float
fraction
Data Type | Example |
---|---|
int | 1, 2, 3, -1, -2, -3, ... |
float | 0.1, 0.2, 0.3, -0.1, -0.2, -0.3, ... |
str | 'abc', "abc", ... |
bool | True, False |
complex | 1 + 2j, 3 + 4j, ... |
好多型態 RRRRRR~~~~~~~~
有個功能叫做 type(),把想查看型態的資料放在小括號裡面,它就會告訴你資料的型態。
print(type(123))
print(type(0.123))
print(type('123'))
print(type(True))
print(type(1 + 2j))
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
<class 'complex'>
可能有人有發現,於是我們來偷渡一下 XD
如果要將想看到的資料列印出來,我們會使用 print( ) 這個功能,將想列印的資料放在小括號裡面即可。
print(123)
print(0.123)
print('abcdefghi')
print(True)
print(1 + 2j)
123
0.123
abcdefghi
True
(1+2j)
Symbol | Explain | Example | Result |
---|---|---|---|
+ | addition | 1 + 2 | 3 |
- | subtraction | 1 - 2 | -1 |
* | multiplication | 1 * 2 | 2 |
/ | division | 1 / 2 | 0.5 |
// | integer division | 1 // 2 | 0 |
% | remainder | 1 % 2 | 1 |
** | power | 1 ** 2 | 1 |
Symbol | Explain | Example | Result |
---|---|---|---|
+ | addition | 0.1 + 0.2 | 0.3000000000004 |
- | subtraction | 0.1 - 0.2 | -0.1 |
* | multiplication | 0.1 * 0.2 | 0.0200000000004 |
/ | division | 0.1 / 0.2 | 0.5 |
// | integer division | 0.1 // 0.2 | 0.0 |
% | remainder | 0.1 % 0.2 | 0.1 |
** | power | 0.1 ** 0.2 | 0.6309573448019 |
因為 float 是以 IEEE754 的方式儲存資料,所以有些運算結果會跟我們想的不一樣。
Symbol | Explain | Example | Result |
---|---|---|---|
+ | 把字串接起來 | 'abc' + "def" | 'abcdef' |
Symbol | Explain | Example | Result |
---|---|---|---|
and | 且 | True and False | False |
or | 或 | True or False | True |
not | 非 | not True | False |
顯然 int、float、complex 可以混合運算,但要符合邏輯。
除此之外,str 和 int 之間還有一種運算可以操作。
Symbol | Explain | Example | Result |
---|---|---|---|
* | 將該字串重複 n 次 | 'ab' * 3 | 'ababab' |
在不同的資料型態中,有哪些可以混合運算的呢?
以下黃色的部分都要替換成相對應的值
print(len('abc'))
想必剛剛一定沒有人看懂那些奇怪的東西,所以來示範ㄍ
3
len(str),計算 str 的長度
str.format(args1, args2, ...),將 args 放入 str 裡相對應的位置,以大括號決定將 args 放入 str 的位置
print('abc def'.split(' '))
['abc', 'def']
str.split(str1),將 str 以 str1 當作切割點
print('abc'.replace('a', 'def'))
defbc
str.replace(str1, str2),將 str 裡的 str1 取代為 str2
如果有一個字串 '123',想要將它變成 int 型態該怎麼辦?
如果有一個整數 123,想要將它變成 str 型態怎麼辦?
'123'
123
?
'123'
123
?
'123'
123
'123'
123
int('123')
str(123)
那還有哪些可以互相轉換型態?
Origin | Target Type | Result |
---|---|---|
123 | str | '123' |
'123' | int | 123 |
123.999 | int | 123 |
123 | bool | True |
0 | bool | False |
123.123 | bool | True |
0.0 | bool | False |
'abc' | bool | True |
'', "" | bool | False |
說完 str 型態,不知道大家有沒有發現一些問題,如果想要在一個字串中表示換行要怎麼表示?
print("abc
def")
?
在程式語言中,為了表示某些特定的符號,會使用特別的表達方式,例如說換行,就會以 \n 來表示,以下列一些常見的跳脫字元。
Symbol | Meaning |
---|---|
\n | newline |
\\ | literal backslash |
\' | single quote |
\" | double quote |
\t | tab |
print('abc\'def"ghi')
print('123\n456')
abc'def"ghi
123
456
稍微示範一下~
為甚麼單引號和雙引號也需要特殊的表示方式?
'abc'def"ghi'
'abc\'def"ghi'
如果單引號沒有特殊表達方式,程式會找到最近可以配對成一對的地方就當成一個字串了。
在 Python 中,還有一種資料值是 None,代表 nothing,也就是甚麼都沒有。
None 轉成 bool 型態時,結果會是 False。
print(bool(None))
False
不知道大家記不記得複利這個東西,現在要使用 Python 來幫我們算複利。
如果本金是 10000,年利率是 2%,然後存 10 年,我們會獲得多少錢呢?
複利是一種計算利息的方式,如果每年為一期,利息除了根據本金計算外,同時也將新得到的利息一併計算。
時間 | 利息 | 總金額 |
---|---|---|
一年 | 10000 * 0.02 = 200 | 10000 + 200 = 10200 |
二年 | 10200 * 0.02 = 204 | 10200 + 204 = 10404 |
三年 | 10404 * 0.02 = 208.08 | 10404 + 208.08 = 10612.08 |
... | ... | ... |
藉由觀察,第 n 年所擁有的總金額為
print(10000 * ((1 + 0.02) ** 10))
所以在 Python 中,可以寫成下面這個樣子
在 Python 中,變數像是容器一般,將各種型態的資料裝起來,方便之後使用。
a = 10
b = 0.1
c = True
d = 'abc'
e = 1 + 2j
ouo = '你好'
如果要一次 assign 多個變數,可以這樣寫
False, class, finally, is, return, None, continue, for, lambda, try, True, def, from, nonlocal, while, and, del, global, not, with, as, elif, if, or, yield, assert, else, import, pass, break, except, in, raise
以下都是 Python 的保留字,不能拿來當變數名稱
a = 10
b = 100
print(a + b)
對變數所做的運算,就是對變數裡的內容物做運算,也就是操作容器裡的內容物。
110
a = 1
b = 2
c = a + b
print(c)
a = 1
b = 2
a = a + b
print(a)
a = a + b
a += b
Equal
以此類推,也有 -=、*=、/=、//=、%=、**= 這些運算,但是比較不建議使用。
money = 10000
rate = 0.02
year = 10
earning = money * ((1 + rate) ** year)
print(earning)
根據以上這些,我們可以把前面複利的問題寫成這樣。
藉由好的變數命名,可以幫助我們更容易閱讀程式碼。
在寫程式時,有些資料不想被改變,就像重力或圓周率,但是 Python 沒有常數的語法,因此習慣以全大寫和底線的方式命名變數,以此代表常數。
PI = 3.1415926535
GRAVITATIONAL_ACCELERATION = 9.8
Python 的 output 部分,在前面已經偷講了一些,我們會使用 print() 來輸出想輸出的資訊。
a = 10
b = 20
print(a)
print(b)
不知道有沒有人注意到,在每次輸出完資訊之後,Python 都自動換行了,這是因為 print() 有一個屬性 end,會決定在結尾應該是甚麼東西。
而 print() 中的 end 預設是 '\n',也就是換行。
print('abc', end = ',')
print('def')
print('ghi')
abc,def
ghi
剛剛可能有人有注意到,print() 裡面可以使用 , 隔開兩個東西,那 , 會產生甚麼效果呢?
print('abc', 'def')
abc def
與 print() 搭配的東西還有 str.format(args1, args2, ...),我們會藉由這個功能來格式化輸出,也就是讓輸出長成我們想像中的形狀 (X
a = 10
b = 20
print('show a and b: {}, {}'.format(a, b))
show a and b: 10, 20
終於要讓程式和使用者互動ㄌ~~~
在 Python 中,如果想要讀取使用者輸入的資料,我們會使用 input() 這個功能,input() 有幾個重點
a = input()
print(type(a))
使用變數 a 將讀入的資料記住,並查看 a 的型態。
<class 'str'>
input() 有一個小括號ㄝ,裡面可以放甚麼?
a = input('hello everyone: ')
print('variable a: {}'.format(a))
以字串為例,input() 小括號裡放的資料會直接被輸出到螢幕上,當作輸入的提示,不會影響變數讀到的值。
使用者輸入的 123 assign 到 a 這個變數
將 hello everyone 直接輸出到螢幕上
hello everyone: 123
variable a: 123
= 是 assign
不是數學上的等於
如果想要有敘述在程式中不被當作程式碼,要怎麼寫呢?
print('hello NTOU') # This is a comment
# This is a comment
註解是寫給人看的敘述,幫助增加程式的可讀性。
那如果有很多行的註解要怎麼辦?
'''
This is a comment.
This is a comment.
'''
"""
This is a comment.
This is a comment.
"""
print('hello NTOU')
還記得前面那題複利嗎?現在題目增加一點難度,要讓使用者輸入本金、年利率、存的年份,之後幫忙算出最後會獲得多少錢?
輸入
本金: 10000
年利率: 0.02
存幾年: 10
輸出
獲得: 12189.944199947573 元
提醒大家幾件事
當前目錄位置要正確
檔名要是 .py 結尾
新增檔案
檔名旁邊的符號變成 x 才有成功存檔
執行結果
有時候,我們在思考一件事情時,腦中會浮現這樣的句子
如果 現在放棄:
比賽就結束了 # by 安西教練
暑假就開始了
不然:
會很累
如果 你闖黃燈:
那你不一定會出車禍
但是如果 你不闖黃燈:
那你不一定不會出車禍
但是如果 你要闖不闖的:
那你就會出車禍
如果 不去上課:
如果 不去考試:
就會被當
巢狀
蘋果數量 = 1
如果 他們有雞蛋:
蘋果數量 = 6
買蘋果
Symbol | Explain |
---|---|
== | equal to |
!= | not equal to |
> | greater than |
< | less than |
>= | greater than or equal to |
<= | less than or equal to |
== 和 = 兩個意思不同,= 是 assign,== 為檢查是否相等。
print(1 == 1)
print(1 != 3)
print(3 > 2)
print('Z' > 'B')
print(3 < 2)
print(4 >= 4)
print(5 <= 7)
True
True
True
True
False
True
True
來看一些例子吧~
a = 'abc'
print(a == 'abc')
True
因為判斷式的判斷結果是以 bool 型態表示,因此可以使用 and、or、not 這些運算。
a = 90
print((a > 50) and (a < 100))
print((a > 50) or (a < 3))
print(not(a > 50))
True
True
False
在 str 型態中,有一個運算是 in、not in,而 in 就是檢查是否在該字串裡面,所以這個一樣可以運用在判斷式上。
有沒有人發現,之前還有一個好像可以當判斷式的語法
print('a' in 'abc')
print('d' not in 'abc')
True
True
終於要說 if-else 啦~~~~~~~
if 判斷式:
blabalbla...
blabalbla...
blabalbla...
else:
blabalbla...
blabalbla...
blabalbla...
if 的執行區塊,全部都是同一層級的縮排
else 的執行區塊,全部都是同一層級的縮排
程式語言中,2、4、8 格空白都可以當作縮排,最多人使用的是 4 個空白,使用一格 tab 通常也是 4 格空白。
if 判斷式:
blablabla...
elif 判斷式:
blablabla...
else:
blablabla...
if 判斷式:
blablabla...
else:
blablabla...
if 判斷式:
blablabla...
elif 判斷式:
blablabla...
elif 判斷式:
blablabla...
if 溫度 >= 25:
if 溫度 < 33:
print("穿短袖")
else:
print("不出門 XD")
else:
print("穿長袖")
下面來看一個巢狀的 if-else。
如果溫度大於等於 25 度且小於 33 度則穿短袖出門,如果超過 33 度那就太熱了,所以待在家吹冷氣比較好。不然 (溫度小於 25 度) 就穿長袖。
縮排
稍微來練習看看吧~
if 下雨:
撐雨傘
if 天氣冷:
穿長袖
else:
穿短袖
if 下雨:
撐雨傘
elif 天氣冷:
穿長袖
elif 天氣不冷:
穿短袖
else:
blablabla...
if 下雨:
if 天氣冷:
撐雨傘 + 穿長袖
else:
撐雨傘 + 穿短袖
下雨又天氣冷
沒下雨
?
if 判斷式:
pass
else:
blablabla...
如果你希望在 if-else 的該執行區塊中甚麼事都不做,就要使用 pass,但不推薦使用,盡量以判斷式來解決。
if 判斷式:
blablabla...
else:
pass
如果只有一個 if 和一個 else,而且兩個都執行區塊都只有一行時,在 Python 中可以簡寫成一行。
Operators |
---|
( ) |
** |
*, /, //, % |
+, - |
<, <=, >, >= |
==, != |
=, +=, -=, *=, /=, //=, %=, **= |
in, not in |
not |
and |
or |
highest
lowest
我們都知道一年通常有 365 天,但是當今年是閏年時,一年便會有 366 天,也就是二月份會變成 29 天而不是 28 天。
現在來試試使用 Python 找出輸入的年份是不是閏年。
閏年的規則
輸入
4
5
100
101
400
500
800
1000
輸出
Leap Year
Common Year
Common Year
Common Year
Leap Year
Common Year
Leap Year
Common Year
程式語言中,還有一個很重要的東西是迴圈,迴圈可以允許我們執行一段程式碼多次。
來看看 for loop 的語法長甚麼樣子~~
range() 的語法如下
range(start, stop[, step])
來看一些例子吧~~~~
for i in range(10): # range(0, 10, 1)
print(i)
for ouo in range(-10, 10, 2):
print(ouo)
for oxo in range(-10, 10): # range(-10, 10, 1)
print(oxo)
for ovo in range(10, 0, -1):
print(ovo)
使用 Python 畫出給定層數的三角形
輸入
3
輸出
-
--
---
使用 Python 算出 1 加到輸入的數字總和 (輸入數字大於 1)
輸入
100
500
輸出
5050
125250
使用 Python 畫出給定層數的三角形
使用 Python 算出 1 加到輸入的數字總和 (輸入數字大於 1)
n = int(input())
for i in range(n):
print('-' * (i + 1))
n = int(input())
sum = 0
for i in range(n):
sum = sum + (i + 1)
break 的功用是強制離開自己所屬的迴圈區塊,先來看個簡單的小例子。
for i in range(10):
print(i)
if i == 5:
break
0
1
2
3
4
5
來看一個例子,下面的程式碼判斷一個數字是不是質數。
number = int(input('輸入數字:'))
# isPrime == True => 質數, isPrime == False => 非質數
isPrime = True
for i in range(2, number):
if (number % i) == 0:
isPrime = False
break # 這個 break 會跳出 line 4 的迴圈
if isPrime:
print("{} 是質數".format(number))
else:
print("{} 不是質數".format(number))
如果是巢狀迴圈,break 會離開哪一個迴圈呢?
for i in range(10): # for-loop 1
for j in range(20): # for-loop 2
code...
break # 這個 break 會離開 for-loop 2
break # 這個 break 會離開 for-loop 1
for-loop 1 的執行區塊
for-loop 2 的執行區塊
continue 可以忽略這一次 loop 中,continue 之後,與自己相同迴圈區塊的程式碼,並繼續執行下一次的迴圈。
如果要輸出 100 除以 -10 到 10 之間的整數,該怎麼寫?
a = 100
for i in range(-10, 11):
if i == 0:
continue
print('100 / {} = {}'.format(i, a / i))
print("Done")
當 i 等於 0 時,不能當除數,所以使用 continue 跳過它。
pass 可以讓執行區塊甚麼事都不做,通常用在建立程式架構時,如果不知道執行區塊要寫甚麼,一定要記得要 pass。
if a == 1:
pass
for i in range(10):
pass
for i in range(10):
print('Done')
如果沒有使用 pass,Python 會往下尋找執行區塊,因為找不到所以會出錯。
?
...
while 判斷式:
blablabla...
blablabla...
來看看 while 的語法吧~
n = int(input())
temp_n = n
count = 0
while temp_n > 1:
temp_n //= 2
count += 1
print('{} => 2 ** {}'.format(n, count))
while True:
blablabla...