[toc]
# 第一週
今天我們講的是python的基礎內容,包含了如何安裝python,以及python程式的基礎。
我們先介紹APCS證照的內容,講解APCS考試的部分,有包括觀念題和實作題,觀念題要考兩個部分,共100分,而實作題要在兩個半小時內寫4道題,共400分。
接著後面我們就開始python的基礎課程,主題包括變數和IPO,在每個章節都有練習題幫各位學習,藉由這些練習題能夠讓學生了解python基礎知識和應用。
雲端硬碟連結: https://drive.google.com/drive/folders/1MqiB_DeS0AyeS7Amt-Tw5vsiyssOOugv?usp=drive_link
## 回家作業:
1.

2.

3.

---
# 第二週
這週我們介紹了程式設計當中基礎的兩個東西:條件句和迴圈。
條件句可以根據某種條件是否有達成而改變流程的走向,比如說該學生的成績是否達到60分及格門檻,有的話該學生就及格,反之就算不及格。
迴圈能夠讓電腦可以大量重複一樣的工作,而迴圈還分成while和for。while迴圈適用於不知道步驟次數的時候,比如:直到你考及格之前都要複習,
所以他就會一直複習直到及格為止,而for迴圈適用於已知確定次數,比如教你跑操場5圈,那就是確定次數。
藉由這兩種基礎的流程控制的方法,讓學生寫的程式需有可重複性和彈性。
## 回家作業:
1.

2.
3.
4.
5.
---
# 第三週
今天我們將python基礎的內容都練習過一次了。首先我們練習了串列、元組和字典的用法。
再來是break和continue的用法,我們透過這兩個關鍵詞可以在迴圈中控制程式的執行流程。
後面我們還講到了使用串列綜合表達式來簡化程式碼和二維陣列的使用方式。
最後我們使用ZeroJudge這個平台來做練習,這平台裡面有豐富的題型供學生們練習。
## 下禮拜放假
## 回家作業:
1.


2.


3.

4.

5.
zerojudge:
a010. 因數分解
https://zerojudge.tw/ShowProblem?problemid=a010
---
# 第四週
今天我們講到自訂函數、內建函數和外部函數的不同。我們可以自定義自己的函數,將重複性高的動作寫成函數,這樣就能簡化程式碼。
後來我們也看如何使用random亂數模組,random提供一些產生亂數的函數,我們通過一些練習題來熟悉這些函數的用法。
最後說到了字串的格式化。有4種方式調整字串的位置,比如格式化字串、format、「+」連結、模板字串。
## 回家作業:
雲端硬碟連結:https://drive.google.com/drive/folders/1sQ8JAnRlFq4WofoCwMOd8gZ6aAcYkhxy?usp=drive_link
1.

https://zerojudge.tw/ShowProblem?problemid=c461
2.

https://zerojudge.tw/ShowProblem?problemid=c295
3.

4.

https://zerojudge.tw/ShowProblem?problemid=a024
5.

https://zerojudge.tw/ShowProblem?problemid=a020
---
# 第五週
今天我們講到了一些基本的資料結構,像是堆疊和佇列,我們還實際去寫程式來模擬它們的運作方式,
並且我們藉由前面的練習來去寫apcs的歷屆試題,讓同學了解正式考試時的題目是怎麼樣子的。
最後我們也講到了如何去看C語言程式碼,並且把它轉換成python程式碼。
## 回家作業:
雲端硬碟連結:https://drive.google.com/drive/folders/1Z3VMJ6MKFY5bathMdWb7-IPOaFDTxnfG?usp=drive_link
1.

https://zerojudge.tw/ShowProblem?problemid=a417
2.

https://zerojudge.tw/ShowProblem?problemid=a009
3.

https://zerojudge.tw/ShowProblem?problemid=a054
4.

https://zerojudge.tw/ShowProblem?problemid=a065
5.

https://zerojudge.tw/ShowProblem?problemid=c657
---
# 第6週
我們今天談到了演算法這個主題,它的內容包含著列出步驟、時間複雜度和空間複雜度。我們還有講到「排序」這個很常見的演算法題目,像是氣泡排序法、插入排序法以及選擇排序。後面我們也講到了如何去搜尋一個值,所以也講到了線性搜尋和二分搜尋。
## 15道練習題
未來上課我們會根據這15題來練習

## 回家作業
雲端硬碟:https://drive.google.com/drive/folders/1MqiB_DeS0AyeS7Amt-Tw5vsiyssOOugv?usp=sharing
請各位同學如果有缺交的部分要趕快補交喔,下禮拜我會一個一個的去檢查。如果有哪些聽不懂的部分可以去看補課影片喔。
APCS初階班 補課影片邀請碼:0dd36d
APCS初階班 30小時解題影片邀請碼:0dc6e1
1.

https://zerojudge.tw/ShowProblem?problemid=c295
2.

https://zerojudge.tw/ShowProblem?problemid=d097
3.

https://zerojudge.tw/ShowProblem?problemid=c636
# 第7週
今天我們講解了ZeroJudge評測程式的原理並且認識使用 input 與兩種連續 IPO 框架的題型和使用時機。
藉由例題輸入測資的形式,讓同學們學習不同的測資讀取方法,並設計變數或串列做後續的計算。
最後從考古題中挑一些題目作為解析演練
之前作業有缺交的需要趕快補齊,下周一樣會去一個一個檢查。
## 回家作業
雲端硬碟連結:https://drive.google.com/drive/folders/1MqiB_DeS0AyeS7Amt-Tw5vsiyssOOugv?usp=sharing
1.

2.

3.

4.

5.

https://zerojudge.tw/ShowProblem?problemid=b965
# 第8週
這週我們開始了模擬測驗,回顧前面7週我們學到的東西。在測驗前我們
先把前三章的重點內容複習一遍,接著讓學生們花75分的時間做測驗,
之後我們也從題目中挑比較重要的題目做解釋。
## 模擬測驗
廖翌翔: 65
林琮諺: 75
李飛谷: 75
羅琳恩: 65
吳侑珊: 60
吳振平: 10
林晧璋: 65
游凱華: 60
## 正確答案
|題數|答案||
|-|-|-|
|01~10|CBACA|CBADD|
|11~20|BBBAD|ABADB|
# 第9週
今天我們針對ZeroJudge上的四個題目做練習。前面兩題給同學25分鐘的時間去練習,後面兩題則是30分鐘。目前各位的程度大多都在中間,多加練習前面講過的題目可以提升自己的實力,因為那些題型都是出題頻率高的。這些題目都是為了下週的期末考題做練習,請各位回去需多加複習這四道題目。
# 第10週
今天是我們APCS課程的最後一堂課。這節課我們就按照考試的實作部分來做模擬考。
模擬考的題目為ZeroJudge上的4道題目,分別為:c199、d984、f312、e283。
我們這次模擬考總共考120分鐘,考完後再分別對這四道題目做講解,最後的時間我們回顧了前面九週上過的內容。
## 模擬考題目解答
1. C199
``` python
while True:
try:
# start
mountains = list(map(int, input().split()))
N = mountains[0]
mountains.pop(0)
# print(mountains)
peaks = 0
for i in range(1, N-1):
L = mountains[i-1]
now = mountains[i]
R = mountains[i+1]
# print(L, now, R)
if now > L and now > R:
peaks += 1
if now > L and now == R:
t = i+1
value = mountains[t]
while value == now:
t += 1
if t == N:
t = t-1
break
value = mountains[t]
if mountains[t] < now:
peaks += 1
print(peaks)
except:
break
```
2. d984
``` python
import sys
for s in sys.stdin:
p = [['A'],
['B'],
['C']]
num = list(map(int, s.split()))
p[0].append(num[0])
p[1].append(num[1])
p[2].append(num[2])
p.sort(key=lambda a: a[1])
new_votes = p[0][1]+p[1][1]
if new_votes > p[2][1]:
print(p[1][0])
else:
print(p[2][0])
```
3. f312
``` python
a1, b1, c1 = map(int, input().split())
a2, b2, c2 = map(int, input().split())
n = int(input())
max_benfit = -1000000
for x in range(0, n+1):
x1 = x
x2 = n-x1
y1 = a1*x1*x1+b1*x1+c1
y2 = a2*x2*x2+b2*x2+c2
Y = y1+y2
# print(x1, x2, Y)
if Y > max_benfit:
max_benfit = Y
print(max_benfit)
```
4. e283
``` python
import sys
code = {"0 1 0 1": "A",
"0 1 1 1": "B",
"0 0 1 0": "C",
"1 1 0 1": "D",
"1 0 0 0": "E",
"1 1 0 0": "F"}
# start
for i in sys.stdin:
N = int(i)
ans = ""
for j in range(N):
s = sys.stdin.readline().strip('\n') #0 1 0 1
ans += code[s] # ans = ans + code[s]
print(ans)
```