Python

賴昱錡

自介

  • 賴昱錡
  • 建中數資 → 臺大資工大一
  • 喜歡玩程式 (不大認真的那種)、讀散文、看漫畫/追番、打手遊
  • 普通人
  •  
  • 輪到你ㄌ

我會的Outline

  • C++、Python
  • 基礎的前端語言與框架
  • 網路架構知識
  • Linux
  • Git 操作
  • 數學
  • 演算法 (程式競賽)
  • 一些神奇的東西 (資安、Functional Programing、Hexo...etc)

希望你以後不會被code爆打 QQ

工具介紹

為你以後爆肝的打扣日常做準備

Visual Studio Code

  • 由微軟開發,跨平臺且免費的文字編輯器
  • 擁有豐富的 extensions (Code runner、matereial theme、HTML snippet)
  • 使用起來相當舒服
  • HackMD 是個跨平台的 Markdown 即時協作筆記,簡單來說就是比較美觀,與 Google Document 具有類似用途的工具
  • 可以在網頁實現簡報、書本等多樣化的功能。

Github

  • Git 是一種分散式版本控制開源軟體,主要用在追蹤及管理電腦程式的歷史版本,同步與開發人員進行協作和修改。
  • 然而,如果我們今天有上百、上千的版本要管理。公司內部的軟體能處理得完美嗎?
  • GitHub 是全球最大的線上程式碼雲端託管平台,同時也支援主流的程式語言,像是 Python、Rust。

程式語言

電腦不是只會二進位嗎?

How to code?

Editor:

  • vscode、vim、sublime、jupyter notebook

Intepreter (直譯器):

  • Python執行方式是由第一行開始向下解析
  • 直譯:由上往下每一行依序解析並執行 python屬於直譯式語言
  • 編譯:將整個程式碼一次看完後,翻譯成執行檔。以C++為例,a.cpp 編譯後產生 a.exe,再執行

基礎

輸入輸出、變數、邏輯

可能是複習

輸出

print('Hello, world!')

輸入

temp = input()
print('123','456', sep = '#')
print('yeah', end = '.')
temp = int(input()) # 這行在幹嘛啊?

跳脫字元?

問題來了,我今天想輸出 What's your name? 於是:

print('What's your name?')

因為文字必定由兩個雙引號或單引號包住,

所以我們需要用反斜線,使某些符號有特殊意義

print('What\'s your name?')

註解

print("Hello, World!")
# 電腦會跳過這行
print("Hi mom") # 這些中文也不會被執行
'''
這幾行也
不會被
執行
'''
print("1 + 1 =", 1 + 1) # 1 + 1 = 2

先介紹資料型態

  • Text Type: str

  • Numeric Types: int, float

  • Sequence Types: list, tuple, range

  • Mapping Type: dict

  • Boolean Type: bool

  • builtin_function_or_method​

  • 其實不用記,看看就好

什麼是變數?

  • 會變的數?其實不一定,有些語言的變數是不能變的 (immutable)
  • 宣告並賦值:

  •  

  •  

  • 有個變數叫 msg,賦予它的值是 "喔是喔"

msg = "喔是喔"

類別很多

print(type("Discord")) # <class 'str'>
print(type(7122)) # <class 'int'>
print(type(3.14159)) # <class 'float'>
print(type(input())) # <class 'NoneType'>
print(type(True)) # <class 'bool'>

由上至下分別為字串、整數、浮點數

命名規則:

  1. 不能以數字開頭
  2. 不能是關鍵字 (如: if、else、pass)
  3. 名稱只能包含數字、字母或底線

String

s1 = "Hello, "
s2 = "World"

print(s1+s2) # 串接

黑魔法: f-string

print("The price of this iphone is " + 70 + "dollars")
# 太弱了
x = 70
print(f'The price of this iphone is {x} dollars')

Condition

x = int(input())
if x > 50:
  print("那你很大")
elif x > 30:
  print("有點小")
else:
  print("太小了吧")

縮排 (indent) 非常重要!

condition = x > 10 and y < 100

# 剛剛忘了說,變數的加減乘除符號基本上相同
# 除了 and 還有 or

Lambda 匿名函式

# 一般的函式,有必要嗎?
def f(x):
  return x+10
x = lambda a : a + 10
print(x(5))
# 酷

同理

x = lambda a, b : a * b
print(x(5, 6))
# 還是很酷

List

list1 = [] # 一個空的 list
list2 = list() # 另一個空的 list
 
list = [] # 不要這樣!為什麼?

特性: 可迭代 (iterable)、可以重複、有序

像 set 的資料結構就不可重複、無序

基本上,list 裡面要塞什麼都行

讀取裡面的值

list1 = ["a", "b", "c", "d"]
print(list1[0])    # a
print(list1[3])    # d
print(list1[-1])   # d
  • 為什麼首項的 index 是 1?
  •  
  • [n] 裡面的數字是「位移量」,不是「第幾個」 [0] 是指「從 list 開頭位移 0 個位置」,所以是第一個值

如果我今天想取不只一個?

list1 = ["a", "b", "c", "d", "e", "f", "g"]
print(list1[1:3])    # ["b", "c"]
print(list1[0:-1])   # ["a", "b", "c", "d", "e", "f"]
print(list1[0:5:2])  # ["a", "c", "e"]

也可以一次取好幾個 (Slicing)
list[start:end:step]
首項(含)、尾項(不含)、公差(預設為 1)

問題

我有一個 100 項的數列。

(1) 請幫我印出最後 30 項

(2) 請幫我倒著印出這個數列的偶數項。

 

怎麼做? 幫我打在 Google Meet 的聊天室。

改值

list1 = ["a", "b", "c", "d", "e"]
list1[1] = "p" # ["a", "p", "c", "d", "e"]
list1[2:4] = ["p", "l"] # ["a", "p", "p", "l", "e"]

加法與乘法

list1 = [1, 2, 3]
print(list1 + [4]) # [1, 2, 3, 4]
print(list1 * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
print(list1) # list1 沒有被改,所以是 [1, 2, 3]
list2 = [1, 2, 3]
 
list2 += [4]
print(list2) # [1, 2, 3, 4]
 
list2 *= 3
print(list2) # [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

Length

list1 = []
print(len(list1))    #0
list1 = [1, 2, 3]
print(len(list1))    #3

特定值有沒有在 List 中出現?

list1 = [1, 2, 3]
print(1 in list1) # True
print(10 in list1) # False

簡報還沒做完

預習: List 的 Method (copy、extend...etc)

鬼轉介紹 markdown&Git,我很抱歉 ><

還是基礎

更多常見的容器

  • OOP

  • 物件導向,痛苦的開始

  • 參考資料

deck

By 賴昱錡

deck

  • 39