---
# System prepended metadata

title: '中興大學先修課程 [Python程式設計與應用]'

---

學習總成果整理
===
輸入與輸出
---
```python
name=str(input("請輸入名字：")) #輸入
print(name) #一般輸出
print("你的名字是{}".format(name)) #format() method
print(f"你的名字是{name}") #格式化的字串文本
```
布林邏輯與選擇結構
---
```python
#布林值(booling)只有兩種型態
a = True
b = False
#條件運算子
1==1 #等於，True
1!=1 #不等於，False
1>1  #大於，False
1>=1 #大於等於，True
1<1  #小於，False
1<=1 #小於等於，True
#邏輯運算子
1==1 and 2>1 #全部符合，True
1==1 or 2<1  #部分符合，True
not 1==1     #取非結果，False
```
```python
#if-elif-else 選擇結構
x=int(input("請輸入數字："))
if x>0:
    print(f"{x}為正數")
elif x<0:
    print(f"{x}為負數")
else:
    print(f"{x}為0")
```
重複結構
---
```python
#for-loop
for i in range(1,11):
    print(i,end=' ')
#輸出為1 2 3 4 5 6 7 8 9 10

# while-loop
count=0
while count<5:
    print(count)
    count+=1
#輸出為01234

#使用continue可跳過此迴圈
#使用break可直接中斷跳出此迴圈
```
函數的定義與應用
---
```python
#定義計算bmi的函數
def bmi(a,b):
    num=a/(b**2)
    num=round(num,2)
    print(num)
    
n=int(input("請輸入體重(kg)："))
ｍ=int(input("請輸入身高(cm)："))
m=m/100
bmi(n,m) #調用bmi函數
```
檔案及例外處理
---
```python
try:
    file=open('python作業.txt','r')
    #'r'為唯讀模式，'w'為覆寫模式，'a'為續寫模式
    content=file.read() #開始讀取
    print("文字檔案內容為：")
    print(content)
    file.close() #關閉檔案

#進行例外處理
except FileNotFoundError:
    print("找不到指定的檔案。")
except PermissionError:
    print("沒有權限讀取該檔案。")
except:
    print("出現未知的錯誤。")
finally:
    print("已嘗試讀取檔案。")
    file.close()
```
列表(List)、元組(Tuple)
---
```python
#列表(List):可變
list1=[1,2,3,'a','b','c']
#在末尾添加新的元素
list1.append('d') #[1, 2, 3, 'a', 'b', 'c', 'd']

#在指定處插入新元素
list1.insert(1,1.5) #[1, 1.5, 2, 3, 'a', 'b', 'c', 'd']

#將另一個列表的所有元素移至列表末尾
list1.extend(['e','f']) #[1, 1.5, 2, 3, 'a', 'b', 'c', 'd', 'e', 'f']

#移除列表中的指定值的第一個匹配項
list1.remove(1.5) #[1, 2, 3, 'a', 'b', 'c', 'd', 'e', 'f']

#刪除列表中指定索引位置的元素
del list1[8] #[1, 2, 3, 'a', 'b', 'c', 'd', 'e']

#移除列表中指定位置的元素(預設為最後一個)
list1.pop() #[1, 2, 3, 'a', 'b', 'c', 'd']


#元組(Tuple):不可變
tuple2=(1,2,3,'a','b','c')
print(tuple2) #(1, 2, 3, 'a', 'b', 'c')

```
資料視覺化
---
```python
import matplotlib.pyplot as plt #引入Matplotlib模組

#創建數據
x=[1,2,3,4,5]
y=[2,3,5,7,11]

plt.plot(x, y)    #折線圖
plt.bar(x, y)     #長條圖
plt.hist(x, y)    #直方圖
plt.boxplot(x, y) #箱型圖
plt.scatter(x, y) #散布圖

#細節調整
plt.xlabel("年份") #X軸標籤
plt.ylabel("人數") #Y軸標籤
plt.title("每年遊樂園買票的人數") #標題

plt.show() #顯示圖形
```
字典(dictionary)、集合(set)
---
```python
#字典(dictionary)
#鍵值無序唯一、內容可變
student={"name":"Ethan","age":"17","gender":"male"} #創建一個dictionary

student["age"]=18          #修改字典中的值
student["city"]="New York" #新增鍵值對
del student["gender"]      #刪除鍵值對
print(len(student))        #搜尋鍵值對數量

for a in student:
    print(a) #輸出字典中的鍵
    
for b in student.values():
    print(b) #輸出字典中的值

for a,b in student.items():
    print(f"{a}：{b}") #輸出字典中的鍵值對
```
```python
#集合(set)
#元素無序、不重複、可變
set1={1,2,3} 
set2={4,5,6} #創建集合
set1.add(4)     #增加某項元素
set2.remove(6)  #移除某項元素
set2.discard(7) #不引發錯誤的移除

print(set1 & set2) #交集     輸出{4}
print(set1 | set2) #聯集     輸出{1, 2, 3, 4, 5}
print(set1 - set2) #差集     輸出{1, 2, 3}
print(set1 ^ set2) #對稱差集 輸出{1, 2, 3, 5}
```
文字處理與爬蟲程式
---
```python
#NLTK（Natural Language Toolkit）
#NLTK是Python的一個自然語言處理庫，提供了許多用於文本分析和處理的工具和數據集。

import nltk
from collections import Counter

#分詞(tokenization)
text = "My name is Ethan."
tokens = nltk.word_tokenize(text)
print(tokens)
#輸出 ['My', 'name', 'is', 'Ethan', '.']

#計算單字出現次數
def count_words(words):
    #計算單詞出現次數
    word_counts=Counter(words)
    return word_counts

print("單詞出現次數：")
word_counts = count_words(tokens)
for word,count in word_counts.items():
    print(f"{word}:{count}次")
    
#爬蟲程式：自動抓取網路資料的過程
#步驟：1.請求網頁內容 2.抓取所需資料 3.儲存資料
#應用：1.爬遍所有飯店網站，找出最划算的房間 2.定期監測特定商品價格，當有特價時，即時通知
```
物件定義與應用
---
```python
#定義類別(class)
class Person:
    def __init__(self,name,age):
        self.a=name
        self.b=age

#創建一個類別
person1=Person("Ethan",17)

print(person1.a)  #輸出：Ethan
print(person1.b)  #輸出：17
print(f"我的名字是{person1.a}，我{person1.b}歲。")
#輸出：我的名字是Ethan，我17歲。
```
Python與代數
---
```python
#SymPy是一個Python庫，用於執行符號計算。特別適合用來學習和教學微積分。
import sympy as sp

x=sp.Symbol('x') #定義符號變量

#解方程式(以一元
solutions=sp.solve(sp.Eq(x**2-4,0),x)
print("x的解為：",solutions) 
#輸出 x的解為：[-2, 2]
```
Python與微積分
---
```python
#SymPy是一個Python庫，用於執行符號計算。特別適合用來學習和教學微積分。
import sympy as sp

x=sp.symbols("x") #定義符號變量
f=x**2+3*x+2 #定義函數

#微分
f_differentiation=sp.diff(f,x)
print("f的一階導函數為：",f_differentiation)
#輸出 f的一階導函數為：2*x + 3

#積分
f_integration=sp.integrate(f,x)
print("f的反導函數為：",f_integration)
#輸出 f的反導函數為：x**3/3 + 3*x**2/2 + 2*x
```
