2022建北電資聯合暑訓

Python課程

講師:立葉、田鼠

課程內容

目錄(欸這是簡報欸 為什麼要目錄

一、python介紹 七、條件敘述
二、python開發環境 八、迴圈敘述
三、輸出基本介紹 九、串列
四、變數&輸入基本介紹 十、字串
五、運算子 十一、函式
六、註解 十二、模組

Python介紹

特點

好寫易懂

泛用度高

資源豐富

但由於是直譯式語言

跑起來較慢

Python開發環境

Jupyter Notebook

  • 於瀏覽器中開啟
  • 可使用Markdown語法
  • 常用於數據分析

JupyterLab

與JupyterLab非常相似

但可以在同一個畫面中多工處理

Visual Studio Code

  • 豐富的擴充套件

  • 多自動偵錯功能
  • 美觀的介面設計

Colab

  • 免下載
  • 常用於數據分析、機器學習
  • 可以付費解鎖更高級的版本
  • 線上開發環境
  • 要貼上測資?Ctrl + Shift + V
  • 是我們待會會用到的! 跟C++一樣😌

輸出

要怎麼在python裡面輸出東西?

print("Hello World!")

print(<要輸出的東西>)

要怎麼在python裡面輸出東西?

print()

不放任何東西,行不行得通?

當然可以!

輸出

特殊字元(反斜線)

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

輸出

特殊字元(反斜線)

小測驗🥳

試著用一行程式碼印出以下的文字吧

A: \\Hand in the homework tomorrow!//

B: \\no problem!//

輸出

一次輸出多項目

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))

輸入

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

.split()!

把這個函式接在一個字串後面,他就會把字串以一個指定的符號做分隔,並把切開來的每個值存到串列上ㄟ!

括號裡面放要指定的分隔字,如果沒有則以空格為預設

輸入

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

用了這個之後,我又不會轉型態了🤤

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

邏輯運算子

小測驗🥳

True and (False or not(True or 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 = "就一些充字數的威利對就充威利字數"*3
print(a.find("威利"), a.count("威利"))#7 6

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

像下面這ㄍ

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

for迴圈: 掃描字串

for 變數 in 字串名:

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

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

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

補充輸出

一次輸出多項目

如果是用之前的字串運算來輸出,會不會有空格?

不會!因為他會被視為一個項目

print("2022" + "建北電資" + "聯合暑訓")
#2022建北電資聯合暑訓

格式化字串

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

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

例題演練🥳

函式(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#想要的東西
}

來去zerojudge上面寫題目了la

先寫下面這幾題ㄅ

在分類題庫上可以看到其他題目,挑戰看看ㄅ😆

import模組

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

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

然後把它匯入

import方式

以下有四種示範

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

今天的課就到這啦

大家可以去吃飯了

deck

By ck1100851羅威廷