<style>
h1, h2 {
text-align: center;
}
h4 {
text-align: center;
font-size: 30px;
}
div.list {
counter-reset: list-number;
font-weight: bold;
font-family:monospace;
margin-bottom: 20px;
}
div.list br {
margin-right: 20px;
}
div.list div:before {
counter-increment: list-number;
content: counter(list-number) ;
margin-right: 10px;
margin-bottom:10px;
margin-top:10px;
width:17px;
height:17px;
display:inline-flex;
align-items:center;
justify-content: center;
font-size:12px;
background-color: gray;
border-radius:50%;
color:white;
}
</style>
<!-- {%hackmd theme-dark %} -->
# [第一堂課程](https://hackmd.io/@Hi-hi/SJSzx9NWo#/)
## 上課規則說明
### 不能做的事情 :no_good:
<div class="list">
<div>玩手機</div>
<div>用電腦玩遊戲or看影片</div>
</div>
---
### 上學期
未來六次社團課(含今天)會教大家**python**的基本語法,讓大家可以有入門的基礎
---
### 下學期
目標:專案製作
簡述:除了教大家如何使用`github`以外,我們會讓大家選擇要往哪一個方向學習並做出一個小專案
---
#### <font size=5px>深度學習</font> (教學長)
**學習內容**:
$\qquad$基本上會帶大家稍微了解一下深度學習是什麼,然後讓大家實作出一個手寫數字辨識(MINST)。
**使用函示庫**:
$\qquad$主要是使用***python***裡面的`pytorch`第三方庫。不過因為深度學習的深度很深,所以可能會需要先預期我們不會提到太多語法 :poop:
**課程方向**:
$\qquad$主要以觀念為主,程式碼可能也只能熟悉到了解每一個區塊在做什麼,不過學會的話,可以輕鬆的說出深度學習在做什麼,還有一些比較細節一點的概念
**預備知識**:
$\qquad$ 上學期課程內容,不需要太多數學知識,我們不會教梯度( 我不會 :poop: ),也不會提到他是怎麼微分的
---
#### <font size=5px>python 遊戲製作</font> (教學長)
---
**學習內容**:
$\qquad$了解遊戲程式的基本架構
**使用函式庫**:
$\qquad$`pygame`函式庫
**預備知識**:
$\qquad$ 將上學期的課程內容學會,並且對遊戲有一點點的了解
---
#### <font size=5px>爬蟲</font> (教學長、學術長)
---
**學習內容**:
$\qquad$了解網路爬蟲的運作原理,
**使用函式庫**:
$\qquad$實作過程會用到`Beautiful Soup`、`request`
---
#### <font size=5px>網頁遊戲製作</font> (學術長)
---
**學習內容**:
$\qquad$透過***javascript***實作出一個[貪吃蛇小遊戲](https://william1010121.github.io/Snake_game_7-30/)
**學習方向**:
$\qquad$純***javascript***,`HTML`跟`CSS`只會稍為的帶過,主要會是教`canva`的使用(不是做簡報的那一個),還有關於遊戲的一些架構
**預計成果**:
$\qquad$做出一個裡面有貪吃蛇小遊戲的網頁
**預備知識**:無
---
#### <font size=5px>架設網站( hexo )</font> (學術長)
---
**學習內容**:
$\qquad$ 架設一個自己的部落格,自己的網站
**使用方式**:
$\qquad$ `github` 架設網站然後用`hexo`架設
**預備知識**:
$\qquad$ 如果會寫`$$`(latex 裡面的數學式) 的話會比較有震撼力,沒有的話也是一個很好的學習歷程 :poop:
---
#### <font size=5px>$\LaTeX$學習( overleaf )</font> (學術長)
---
**學習內容**:
$\qquad$學習用$\LaTeX$製作出自己的一份心得or學習歷程
**學習方向**:
$\qquad$基本$\LaTeX$語法,以及如何放圖片、寫數學運算式跟畫流程圖
**使用函式庫**:
$\qquad$ $\LaTeX$裡面的函式庫
**預備知識**:無
---
## python
### 特性
- 弱型別語言
- 強縮排語言
- 豐富的第三方庫
- 易學、易懂的程式碼
### 基本知識
***python***註解是`#`
不過這個是單行註解,如果想要一次註解多行的話可以透過加上`'''`來讓裡面的程式碼直接變成字串
::: spoiler 點我
在**windows**有些編譯器可以選起來用Ctrl + /或Ctrl + 1
:::
```python=
# 我是註解( 單行)
多行就沒有辦法
'''
我是字串
可以一次註解到很多行
'''
```
### 輸入輸出
```python=
name = input()
print("Hello world")
print(name, end = "");
```
<!--
'''
print 是可以輸出值or字串的東西,基本上python裡面的變數都可以直接print出來,
不過他預設是會換行的。
如果不想要換行可以在後面加上 end=""
'''
-->
如果想要的話,也可以一次`print`多個變數出來
```python=
a = input()
b = input()
print(a, b, sep = ',', end = "")
>>> a, b
```
<!--
'''
sep 的意思是seperate(分開),可以在每輸出完一個變數之後在後面加上特定的符號
'''
-->
:::success
***python***的`input`接收到的都是字串,至於如何轉換我們馬上就要提及了。
:::
# 資料型態
在使用***python***的時候有一個好處,就是通常不需要去在意會不會超出範圍,都是支援大數運算的。
## int
**int**是`integer`的縮寫,意思是整數,如同大家所理解的,支援加減乘除。
```python=
a = int(5)
b = int(3)
print( "a + b is" , a + b, sep=" : " )
print( "a - b is" , a - b, sep=" : " )
print( "a * b is" , a * b, sep=" : " )
print( "a / b is" , a / b, sep=" : " )
print( "a % b is" , a % b, sep=" : " ) # % 為取餘數
print( "a ** b is", a ** b, sep=" : ") # ** 為次方
print( "a // b is", a // b, sep=" : ") # // 為向下取整
```
## float
**float**浮點數,存取的是有小數點的數,採取科學記號的存取方式
```python=
a = float(5)
print(a) # 5.0
```
## string
- 輸入預設型態為字串
- 可用建構元`str()`宣告
- 對於**python**而言,`''` 及 `""`皆可用來表示字串
- **python**的字串支援`+`號及`*`號
```python=
s1 = "Hello "
s2 = "FDHS"
s3 = s1 * 2 + s2 + '!!!'
print(s3) #Hello Hello FDHS!!!
```
### 字串宣告
<div class="list">
<div>str()</div>
<div>"string"</div>
<div>'string'</div>
</div>
```python=
str = str(1223)
print(str) # 1223
```
### 格式化字串
<div class="list">
<div>f"string"</div>
<div>string.format()</div>
</div>
```python=
s = f"{124}, {33}"
print(s) # 124, 33
```
```python=
i = int(1)
s1 = "{123 + 86}"
s2 = "{}, {}".format(i + 1, i + 2)
print(str1, str, sep = ", ") # 2, 3
```
### 索引
- 字串提供為可透過索引值找到字元的不可修改序列
#### 用法
<div class="list">
<div>s[i]</div>
<div>s[i:j]</div>
<div>s[i:j:k]</div>
</div>
```python=
s = "abcdefghijklmnopqrstuvwxyz"
s1 = s[17]
print(s1) # r
s2 = s[6:13]
print(s2) # ghijklm
s3 = s[0:18:3]
print(s3) # adgjmp
```
### 函式
<div class="list">
<div>string.count()</div>
<div>string.eval()</div>
<div>string.upper()</div>
<div>string.lower()</div>
</div>
```python=
s = "Hello FDCSC 5th"
print(s.count(' ')) # 2
print(s.len())
```
```python=
s1 = "8+7-6*5/4%3**1//2"
eval(s1) # 15.0
```
```python=
s1 = 'aBCd'
print(s1.upper()) # ABCD
print(s1.lower()) # abcd
```
## bool
全名為`boolean`,存取**True**, **False**
```python=
flag = False
print(flag, not flag, sep=", ") # False, True
```
---
## list(array)
**主要函式**
<div class ="list">
<div>list.append()</div>
<div>list.clear()</div>
<div>list.copy()</div>
<div>list.count()</div>
<div>list.extend()</div>
<div>list.insert()</div>
<div>list.index()</div>
<div>list.pop()</div>
<div>list.remove()</div>
<div>list.reverse()</div>
<div>list.sort()</div>
</div>
```python=
lst = [1, 2, 3]
'''
lst = []
lst = list()
這些初始化都是可以被接受的
'''
print( lst ) #[1, 2, 3]
print( lst[ 0 ]) # 1
# -------------------------- #
lst .append( 3 )
print( lst ) #[1, 2, 3, 3]
# -------------------------- #
lst .extend( [2, 4, 6])
print( lst ) #[1, 2, 3, 3, 2, 4, 6]
# -------------------------- #
lst .pop()
print( lst ) #[1, 2, 3, 3, 2, 4]
# -------------------------- #
lst .remove( 2 )
print( lst ) #[1, 3, 3, 2, 4]
# -------------------------- #
id = lst .index(4) # 4
print(id)
# -------------------------- #
id = 5 in lst
print(id) # False
# -------------------------- #
id = lst .index(5) if 5 in lst else -1
'''
等價於
id = -1
if 5 in lst :
id = lst .index( 5 )
'''
print(id) # -1
#--------------------------- #
```
## dict
<div class="list">
<div>dict.clear()</div>
<div>dict.copy()</div>
<div>dict.fromkeys()</div>
<div>dict.get()</div>
<div>dict.items()</div>
<div>dict.keys()</div>
<div>dict.pop()</div>
<div>dict.popitem()</div>
<div>dict.setdefault()</div>
<div>dict.update()</div>
<div>dict.values()</div>
</div>
## tuple
<div class="list">
<div>tuple.count()</div>
<div>tuple.index()</div>
</div>
:::spoiler tuple的念法
Mon, Wed, Fri -> too-pull
:::
## set
<div class="list">
<div>set.add()</div>
<div>set.clear()</div>
<div>set.copy()</div>
<div>set.discard()</div>
<div>set.isdisjoint()</div>
<div>set.issubset()</div>
<div>set.issuperset()</div>
<div>set.pop()</div>
<div>set.remove()</div>
<div>set.union()</div>
<div>set.update()</div>
</div>
## 題目練習
參考文章:
https://hackmd.io/@wootu/SyGFHPjS-?type=view
http://kaiching.org/pydoing/py/python-manual.html