Puthon 小社複習

講師:田鼠

輸出

print("Hello World!")

輸出

特殊字元(反斜線)

特殊字元 意義
\\ 反斜線
\n 換行
\t Tab鍵
\' 單引號
\" 雙引號

輸出

一次輸出多項目

print(項目1,項目2,項目3,...)

print(項目1,項目2,項目3,...,sep=空隔間要輸出的東西,

end=輸出完後要額外輸出的東西)

sep預設是空格,end預設是'\n'

變數

python中主要的變數型態

英文名稱 中文名稱
int  整數
float 小數(浮點數)
str 字串
bool 布林值

python宣告變數

變數名稱 = 變數值

變數型態?

python會自己判斷!

連續賦值 & 多重賦值

python會自己判斷!

變數1 = 變數2 = 變數3 = ... = 變數值

變數1,變數2,變數3,... = 變數值1,變數值2,變數值3,...

變數命名限制

變數只能由字母、數字、底線組成

不得以數字開頭

不得為保留字

python保留字

and as  assert async await
break class continue def del
elif else except False finally
for  from global if import
in is lambda None nonlocal
not or pass raise return
True try while with yield

輸入

輸入

a = input("請輸入一串文字: ")
print("你剛剛輸入的文字是:", a)
'''
請輸入一串文字: ckefgisc
你剛剛輸入的文字是: ckefgisc
'''

變數 = input(<提示字>)

輸入

輸入預設會是字串

a = input()
print(type(a))

輸入

用一個型態()來包住input()的部分!

a = int(input())
print(type(a))

輸入

又如果只確定輸入的是一個數字,但不確定他會是整數還是小數,怎麼辦?

eval()! 他會幫你轉成數字,同時會幫你判斷是整數還是小數

a = eval(input())
b = eval(input())
print(type(a),type(b))

輸入

要怎麼讀取在同一行的多個值(?)

print(map(int,input().split())) !

map(func, obj)

運算子

算數運算子

運算子 意義 舉例 結果
+ 5+2 7
- 5-2 3
* 5*2 10
** 次方 5**2 25
/ 浮點除法 5/2 2.5
// 整數除法 5//2 2
% 模(取餘數) 5%2 1

複合指定運算子

複合指定運算子 舉例 改寫
+= a=a+2 a+=2
-= a=a-2 a-=2
* a=a*2 a*=2
** a=a**2 a**2
/ a=a/2 a/=2
// a=a//2 a//=2
% a=a%2 a%2

比較運算子

運算子 舉例 意義
< 5<2 5是否小於2
> 5>2 5是否大於2
<= 5<=2 5是否小於等於2
>= 5>=2 5是否小於等於2
== 5==2 5是否等於2
!= 5!=2 5是否不等於2

回傳一個布林值(True/False)!

邏輯運算子

運算子 意義
and
or
not

回傳一個布林值(True/False)!

邏輯運算子

 A B A and B A or B
True True True True
True False False True
False True False True
False False False False

運算子的優先順序!!

 運算子 意義
() 括號
** 次方
*,/,//,% 乘除模
+,- 加減
>,<,>=,<=,==,!= 比較
not
and
or

註解

python的註解

單行註解:#

多行註解:上下各三個單引號(')或雙引號(")

python的註解

a = 5'''這邊是註解
這是多行註解,所以還是註解
'''這邊就不是了
a = 1 #後面的文字才會變成註解la
這一行又沒有井字號,根本不會變成註解
#但是這一行有

條件敘述if

if

if 判斷式:

....要執行的程式

age = int(input("請輸入自己的年齡: "))
if age<=14:
  print("你是幼年人口!")

非常重要ㄉ縮排

在python,縮排是非常重要的東西!

if 判斷式:	
  #我在這個if裡面,因為我有縮排
#我不在這個if裡面,因為我沒有縮排

這會關係到該行程式有沒有在該判斷式下面

也要特別注意,雖然沒有特別規定縮排要空幾格,但整個程式的縮排空格數必須一樣。

if...else...

if 判斷式1:

....要執行的程式

else:

....要執行的程式

age = int(input("請輸入自己的年齡: "))
if age<=14:
  print("你是幼年人口!")
else:
  print("你不是幼年人口!")

if...elif...else

if 判斷式1:

....要執行的程式

elif 判斷式2:

....要執行的程式

elif 判斷式3:

....要執行的程式

---

else:

....要執行的程式

if...elif...else

age = int(input("請輸入自己的年齡: "))
if age<=14:
  print("你是幼年人口!")
elif age>=65:
  print("你是老年人口!")
else:
  print("你是壯年人口!")

迴圈敘述(for/while)

while迴圈

while 判斷式:

....要重複執行的程式

total = n = 0
while n<10:
  n += 1
  total += n
print(total)

每次要進去迴圈前,都會判斷一次n<10這個條件!

我的輸出爆炸了

while True:
  print("INFINITE POWER")

按下Ctrl + C,可以終止這個惡夢。

或者...防患未然(?

break

while True:
  a = input()
  if a==0 :
    break

break可以讓你直接跳出整個迴圈!

continue

total = i = 0
while i<10:
  i += 1
  if i==5:
    continue
  total += i
print(total)

continue則是讓你直接跳過迴圈裡面剩下的程式,並回到迴圈的開頭!

補充:利用while讓輸入變簡單

要怎麼讀取EOF😢

為了抵抗十惡不赦,不把測資分開的初體者而設計的程式(沒😌

while True:
  try:
    #要執行的程式
  except EOFError:
    break

其中,try, except是我們沒教的東西(等之後再說囉)

輸入終止:Ctrl + D

for迴圈: range(起始點,終止點,公差(?))

for 變數 in range(起始點,終止點,公差(?)):

....要重複執行的程式

for i in range(0,5,1):
  print("嗨",end='')

當 \(0\leq i < 5\) 時,會進入迴圈

for迴圈: range(次數)

for 變數 in range(次數):

....要重複執行的程式

for i in range(7):
  print(i)

將字串的每一個字元跑過一次!

for i in range(5):
  print("嗨",end='')

老子直接給你指定次數!

List(串列)

特性

  • 可以儲存多個且多種的資料
  • 從[0]開始為第一項、[1]為第二項......
  • 可以擷取特定部分,且有許多相關函式可利用

宣告串列

a = []#空串列
b = [1, "11", 1.11, '1111']#非空串列

宣告空串列時,[ ]內留白即可

新增元素

使用.append(x)將x新增近該串列的尾端

a = [123, "abc", 1.35]
a.append(456)#將456加進a串列
print(a) #[123, 'abc', 1.35, '456']

移除指定位置的值

.pop(x)可以移除串列[x]的值

(若x未填入任何值,則刪除串列末項)

a = [123, "abc", 1.35]
a.pop(1)#將"abc"移出a串列
print(a) #[123, 1.35]

移除串列中指定的值

用.remove(x)移除串列中的x

(若不只一項,則移除最前項)

a = [123, "abc", 1.35]
a.remove(1.35)#將1.35移出a串列
print(a) #[123, 'abc']

擷取串列特定部分

串列後加上[ r : l : i ]

可以在串列內從r到l-1每i項取一次

a = [1, 2, "ccc", 7, 'hw', "ccc"]
print(a[1:5:2]) #[2, 7]
print(a[::2]) #[1, 'ccc', 'hw']
print(a[:3:]) #[1, 2, 'ccc']

輸入串列

輸入資料通常會在同一行,

不同行的時候可以用另一個方式

a = [int(s) for s in input().split()]
print(a)#同行
a = []
for i in range(int(input())):#先輸入串列大小
  a.append(input())
print(a)#不同行

for迴圈: 掃描list

for 變數 in 串列名:

....要重複執行的程式

listA = ["python","C++","HTML","BBS","bbs art","硬體","密碼學"]
for i in listA:
  print(i)

將串列的每一個元素跑過一次!

String(字串)

特性

  • 顧名思義,就是把一堆字給串起來
  • 也有很多相關的函式可以搭配使用
  • 可以拿來玩很多有趣的東西(有點廢話

輸出

可以輸出一個變數或一個字串

如果是字串,記得要在兩旁加引號

s = 1
print(s)
print("s")

字串運算

就是用乘號弄出一堆字串

print("c8763"*5)#c8763c8763c8763c8763c8763

像List一樣可以分段

a = "cr8t7n6d3d"*3
print(a[10:19:2])#c8763

用.find()及.count()函式找到字串裡的特定字母或計算出現次數

a = "ckefgisc喔是喔真的假的fwefbbuwiub哦是嘛"*3
print(a.find("是"), a.count("是"))#9 6

但.count()數過的東西不會重複數到

像下面這ㄍ

a = "abcabcabcabca"
print(a.count("abca"))#2

for迴圈: 掃描字串

for 變數 in 字串名:

....要重複執行的程式

a = "ckefgisc27th";
for i in a:
  print(i)

將字串的每一個字元跑過一次!

格式化字串

在字串中預計要輸出變數的地方放著大括號{},然後後面再接一個.format(),括號裡放變數!

a = eval(input())
b = eval(input())
print("{}+{}={}".format(a,b,a+b))

Tuple(元組)

特性

  • 無法新增、修改、刪除
  • 但執行速度較快

宣告

a = ()
#宣告空的tuple
b = 1, 2, 3
#宣告一個有123的tuple,括弧可省略
c = 1, 
#宣告一個有1的tuple,後面用逗號表示為tuple
d = (1, )

e = (1)
#無逗號判定成int
print(type(a), type(b), type(c), type(d), type(e), sep = "\n")
'''
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'int'>
'''

使用

a = (1, "a", False)
print(a[0])#tuple a的第零項
print(a[:1:])tuple a從零到一,不包含一
print(a.index(False))輸出False是第幾項
'''
1
(1,)
2
'''

Set(集合)

特性

  • 可修改
  • 儲存的變數不重複
  • 無序(但會自動由小排到大)

宣告

a = set()#空集合
print(type(a))#<class 'set'>

b = {1, 3, 3, 2, 1}
#非空集合也可用b = set([1, 3, 3, 2, 1])
print(type(b))#<class 'set'>
print(b)#{1, 2, 3}

無序性

a = {0, 1}
b = set([1, 0])
print(a == b)

判斷是否存在set中

a = {12, True, "火金姑閃爍爍"}
print("火金姑閃爍爍" in a)
print("在阮細漢的暝" in a)

判斷是否存在set中

a = {12, True, "火金姑閃爍爍"}
print("火金姑閃爍爍" in a)#True
print("在阮細漢的暝" in a)#False

移入移出set中的值

a = {12, True, "火金姑閃爍爍"}
print("火金姑閃爍爍" in a)#True
print("在阮細漢的暝" in a)#False
a.add("在阮細漢的暝")
a.discard("火金姑閃爍爍")
print("火金姑閃爍爍" in a)#False
print("在阮細漢的暝" in a)#True

Dictionary(字典)

特性

  • 可以讓特定字彙對應到特定的值
  • 可以應用在身分證字號、區碼......

宣告及取用

a = {}#空字典
print(type(a))#<class 'dict'>

b = {"A" : "台北市", "F" : "新北市"}
print(b["A"])#台北市

c = {100 : "中正區", 222 : "深坑區"}
print(c[222])#深坑區

判斷key值是否在dict中

a = {"A" : "台北市", "F" : "新北市"}
if "A" in a:
  print(1)
 else:
  print(0)
#1

新增及刪除字典值

a = {"A" : "台北市", "F" : "新北市"}
a["M"] = "南投縣"
print(a)
#{'A': '台北市', 'F': '新北市', 'M': '南投縣'}
del a["F"]
print(a)
#{'A': '台北市', 'M': '南投縣'}

函式(function)

Python內建函式

abs(x)

max(x,y,z…)

min(x,y,z…)

變數型別(x)

len(x)

reverse(x)

得到變數X的絕對值。

會得出多個數字或是list等的最大值。

會得出多個數字或是list等的最小值。

將一個變數的變數型別轉換

得到變數x的長度

將x反轉

但也不是每個函式都有內建的可以用

所以

這時候就需要自己來寫ㄌ

函式的格式

def 函式名(x){
  #要做的事
  return y#想要的東西
}

import模組

如果找不到可用的內建函式,

可以考慮先找找看有沒有別人寫好的,

然後把它匯入

import方式

以下有四種示範

import random#把整個模組搬進來,使用時前面還是要加random.
from random import randint#從random模組裡搬出randint,使用時不須加random.
import random as r#跟第一種差不多,但前面是加r.
from random import *#也是把整個搬進來,但不加random.,所以有可能造成名稱衝突,通常不使用