0%

Python 基礎

Python 基礎

基本變數

數值

float 浮點數

1
2
3
4
5
#float...浮點數
a = 123.456
a = 0.156
print(type(a))
#type = float

int 整數

1
2
3
4
5
#int...整數
a = 123
a = 456
print(type(a))
#type = int

bool 布林

1
2
3
4
5
#bool...布林
a = True ##T,F要大寫
a = False
print(type(a))
#type = bool

字串

str 字串

1
2
3
4
5
#str...字串
a = "str"
a = 'str'
print(type(a))
#type = str

chr 字元

1
2
3
4
5
##chr...字元
c = 66
cToChr = chr(c)
print(c)
##c = B 根據ACSII來表示

集合

list 有順序、可變動列表

1
2
a = [1,2,3,4,5]
a = ["a","b","c"]

tuple 有順序、不可變動列表

1
2
a = (1,2,3,4,5) 
a = ("a","b","c")

set 無順序、可變動集合

1
2
a = {1,2,3,4,5}
a = {"a","b","c"}

dict 有鍵、值配對的字典

1
a = {"apple":"蘋果", "banana":"香蕉"}

print

基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
a = 10
print(a)
# a = 10,type = int

a = "a"
print(a)
# a = a, type = str

a = 10.5
print(a)
# a = 10.5, type = float

# 不需要宣告型別

格式化輸出

%d 以10進位整數方式輸出
%f 將浮點數以10進位方式輸出
%e 將浮點數以10進位方式輸出,並使用科學記號
%o 以8進位整數方式輸出
%x 將整數以16進位方式輸出
%s 轉成字串後輸出
%c 以字元方式輸出
舊版格式化輸出
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
#使用方法 "%(s,d,f...)" % (所指定的值)

stringformat1 = "%d,%d" % (10, 20)
print(stringformat1)
#10,20

stringformat2 = "%s,%s" % ("apple", "banana")
print(stringformat2)
#apple,banana

#可以預留字元寬度
example = "%10s,%10s" % ("apple", "banana") #%10s字串前面保留10個字元
print("----------")
print("0123456789")
print(example)
#----------
#0123456789
# apple, banana

#可以指定小數點後面位數
example2 = "%.2f" % (math.pi) #保留小數點後兩位
print(example2)
#3.14

#也可以跟預留字元同時使用
example3 = "%6.2f" % (math.pi) #前面保留6個位元
print(example)
# 3.14
新版格式化輸出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#使用方法 str.format()

stringformat1 = "{0},{1} 這是兩個{2}"
print(stringformat1)
#{0},{1} 這是兩個{2}

stringformat2 = "{0},{1} 這是兩個{2}".format(25, 30, "整數")
print(stringformat2)
#25,30 這是兩個整數

stringformat2 = "{0},{1} 這是兩個{2}".format("你好", "再見", "字串")
print(stringformat2)
#你好,再見 這是兩個字串

print(math.pi)
#3.141592653589793

print(format(math.pi, ".2f"))
#3.14

Input

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
str1 = input();
#input = strinput
print(type(str1)) #<class = "str">

str2 = input();
#input = 123123
print(type(str2)) #<class = "str">

#input的值都會被轉成String型別

int1 = eval(input()); #eval() 將input的型別轉為int 讀取數字時常用用法
#input = 123123
print(type(int1)) #<class = "int">

error1 = eval(input());
#input = abcabc
print(type(int1)) #NameError: name 'a' is not defined 若是輸入非整數型別則會出錯

條件判斷

條件句

1
2
3
4
5
6
a >= b
a == True
a > b and c > d
#這些都是條件句 重點在出來的結果是布林值
2 > 10 #->False
5 < 8 and 10 > 1 #->True

if

1
2
if 條件:
陳述句...
1
2
3
4
5
6
7
#example
score = eval(input("請輸入成績"))
if score >= 60:
print("及格")

#輸入 50 ->不會print
#輸入 70 ->及格

if-else

1
2
3
4
if 條件:
陳述句... #條件true
else:
陳述句... #條件false
1
2
3
4
5
6
7
8
9
#example
score = eval(input("請輸入成績"))
if score >= 60:
print("及格")
else:
print("不及格")

#輸入 50 ->不及格
#輸入 70 ->及格

if-elif-else

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if 條件1:
陳述句... #條件1 true
elif 條件2:
陳述句... #條件2 true
else:
陳述句... #條件1和2都 false

#example
score = eval(input("請輸入成績"))
if score >= 60:
print("及格")
elif score >= 40:
print("不及格(可補考)")
else:
print("不及格(不可補考)")

#輸入 30 ->不及格(不可補考)
#輸入 50 ->不及格(可補考)
#輸入 70 ->及格

注意事項

  • if後面不用加括號

  • 縮排很重要!

  • 是elif不是else if!

迴圈

for

在開始for迴圈之前先談range()這個方法

range()可以產生一個整數序列

有以下三種用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
range(結束值)#1
range(起始值,結束值)#2
range(起始值,結束值,遞增值)#3

#1 起始值預設為0 給定結束值 遞增值預設為1
range(10)
代表產生0,1,2,3,4,5,6,7,8,9的序列

#2 給定起始值 給定結束值 遞增值預設為1
range(5,10)
代表產生5,6,7,8,9的序列

#3 給定起始值 給定結束值 給定遞增值
range(1,10,2)
代表產生1,3,5,7,9的序列

接著再看for迴圈的基本語法

1
2
for 變數 in 迭代器:
陳述句...
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
#1
for i in range(10):
print(i)
'''
0
1
2
3
4
5
6
7
8
9
'''

for letter in "Alice":
print(letter)
'''
A
l
i
c
e
'''

經典的九九乘法表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for i in range(1,9):
for j in range(1,9):
print(i,"*",j,"=",i*j)
'''
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
2 * 1 = 2
.
.
.
下略
'''

while

基本語法

1
2
while 條件:
陳述句...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#example
a = 0
while a < 10: #當a < 10時才會執行下面
a = a + 1
print(a)
'''
1
2
3
4
5
6
7
8
9
'''

同樣也可以用while做九九乘法表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
i, j = 1, 1
while i < 10:
j = 1
while j < 10:
print(i, "*", j, "=", i * j)
j = j + 1
i = i + 1
'''
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
2 * 1 = 2
.
.
.
下略
'''

break及countinue

break:迴圈如果執行到break會直接終止,立刻跳出迴圈

continue:迴圈如果執行到continue會跳過continue後的指令直接進入下次迴圈,不會跳出迴圈

差別可以看以下範例

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
#break
for i in range(10):
if i == 3:
break
print(i)
'''
0
1
2
'''

#continue
for i in range(10):
if i == 3:
continue
print(i)

'''
0
1
2
4
5
6
7
8
9
'''

函式

基本語法(定義函式)

1
2
def 函數名稱(參數名稱):	#若沒有參數可以不加
陳述句...
1
2
3
4
5
6
def HelloWorld():	
print("hello world!")

def plus(i1,i2):
ans = i1 + i2
print(ans)

基本語法(呼叫函式)

1
函數名稱(參數)

從上面的例子來看,如果我要呼叫HelloWorld()函式,只需要

1
HelloWorld()

若要呼叫plus函式,則需要

1
plus(4,5)	#任意兩個數字

遞迴–函式呼叫函式

費氏數列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
遞迴寫法 速度較慢
def fib(n):
if n < 2:
return n
else:
return fib(n-1) + fib(n-2)

動態規劃 速度較快
def fib(n):
if n == 1 or n == 2:
return 1
a = 1
b = 1
for i in range(3, n+1):
a, b = b, a + b
return b

階層

1
2
3
4
5
6
7
8
9
10
11
12
13
14
遞迴寫法 速度較慢
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)

動態規劃 速度較快
def factorial(n):
a = 1
for i in range(1, n+1):
a *= i
print(a)