# Python筆記_週一67 謝忻芮
## 1.輸出語句
* 在螢幕輸出文字的指令
* print指令的用法:以輸出Hello, World!為例
```python
#紅色的字,會被印出來
print("Hello, World!")
#如果印你好該怎麼辦?
print ("你好")
#使用一對單引號也可以
print ("你好")
```
### a.自動換行
* 每一個 print() 印完都會自動換行,不需要其他的指令
* 以下範例參考
```python=
##自動換行程式碼範例
print(“2-3=5”)
print(“2-3=5”)
```
### b.拒絕換行
* 可以加上參數控制:end是控制換行的參數
* end參數用法如下:
* print後面需要加上, end=“”
* 以下程式範例參考
```python=
#拒絕換行程式碼範例
print(“2-3=5”, end=“”)
print(“2-3=5”)
```
### c.拒絕換行,但是兩個句子中間有空格
* 可以加上參數控制:==end==是控制換行的參數
* end參數用法如下:
* print後面需要加上, ==end=" "==
* ==" "雙引號中留個空==
* 以下程式範例參考
```python=
##拒絕換行程式碼範例
print(“2-3=5”, end=“ ”)
print(“2-3=5”)
```
### d.多空一行
* \n,表示換行
* 以下範例參考
```python=
#多空一行程式碼範例
print(“*\n”)
print(“**\n”)
print(“***\n”)
```
### e.一次多空幾行
* 可以加上參數控制:end是控制換行的參數
* end參數用法如下:
* print(1, end=“\n\n”)
* 以下程式範例參考
* 可以加上參數控制:end是控制換行的參數
```python=
#一次多空幾行程式碼範例
print(“*”, end=“\n\n\n”)
print(“**\n”)
print(“***”)
print(“****”)
```
### f.資料輸出的4種方法總整理
:::info
:::warning
* 第一種寫法
* 指定兩個變數並且==分兩行==輸出
==print(a)==
==print(b)==
* 在**同一行**輸出2個以上變數
*==print(a,b)==
* 第二種寫法
* 使用format解決輸出問題
* ==print("{}\n{}".format(a, b))==
* 雙引號
* 後面接 .format(變數串)
* 裡面用大括號 {} 代表要取 format() 裡面放的變數來替換在這個大括號的位置
* 雙引號內的大括號由左到右會依序對應 format() 裡面由左到右填的變數
* 第三種寫法
* ==print("{0}\n{1}".format(a, b))==
* {}代表未知的變數
* 0與1指的是後面format裡相對應的變數
* ==注意: 編號是由 0 開始喔!==
* 第四種寫法
==print("{a}\n{c}".format(a=a,c=b))==
* 將編號改用變數名稱
* format() 內指定大括號內的變數名是對應哪個變數
* 注意: 大括號內的變數名稱是對應
format() 內的變數名稱,不是直接對
應外面的變數名稱喔
:::
## 2.註解

* 註解的寫法有二:分成單行與多行
* 多行註解: 使用 ==三個雙引號== 包圍(包在三個雙引號之間的所有文字都是註解)
* 單行註解: 使用 ==#== 開頭( # 後面的文字都是註解)
## 3.變數宣告與賦值
* 變數:數值會改變的數,稱為變數(variable),例如:溫度
* 常數:而恆常不會變動的數叫做常數(constant),例如:圓周率π(3.14159265359…)
* 在程式設計的過程中,變數的值需要能夠隨時存取或重新得到得到新值(賦值)
* 因此,變數必須存放在電腦的記憶體,以便隨時存取
* 變數的值(資料)放在電腦的記憶體,記憶體猶如資料的家

* 如何給變數取名
* 原則上隨便取
* 可以是單獨的字母:a、b、c
* 可以是多個字母的結合:aaa、bbb、ccc
* 也可以是混數字的:number1、number2
:::danger
* 注意
* 變數開頭要是字母或底線(_),不能是數字!
* 大小寫不一樣就是不同變數喔!
* aaa ≠ AAA
* 名字中間不能夾有空白
* 有預設功能的字不能用,如:if, for, else, …
* [Python關鍵字參考](https://www.w3schools.com/python/python_ref_keywords.asp)
:::
* 變數的賦值
* 例:a=3
!
:::warning
* • 程式碼意義
* 代表向電腦申請 一個櫃子 準備用來儲放資料
* 櫃子的位置需要設定名字
* a 是櫃子位置的名字
* a 稱為 變數名
* 3 是資料內容
* 3 是櫃子內存放的資料,也可以說
* 3 是變數的內容值
:::
補充:資料的輸出
* ==雙引號==內的會視為==一般文字==印出
* 不是放在雙引號內的會視為==變數==,程式會先找變數存放的值,再印出找到的那個==存放值==

## 4.輸入語句
資料輸出指令是input()
* 例: 使用者輸入甚麼資料就印甚麼資料
```python=
num = input()
print (num)
```
* input()==不負責分辨資料喔!==
* 不論輸入甚麼,input()收到的資料就是一堆文字(字串)
* 這堆文字裡是否有整數 小數還是特殊符號資料的,input()是不知道的喔!
:::info
* 使用int轉型成整數:
* num = int(intput())**
*用float轉型成浮點數:
**num = float(input())**
## 5.資料型態
**在 Python 中,資料型態包含**
* 整數 int
* 浮點數 float
* 複數 complex
* 文字 str
* 布林 bool
**type: 可以問出資料型態**
例:
```python=
num1 = 10#指定整數變數
num2 = 10.01 #指定浮點數變數
num3 = 10 + 10j#指定複數變數
text = 'DICE'#文字加單引號
flag = True
print(type(num1))
print(type(num2))
print(type(num3))
print(type(text))
```
**執行結果**
:::warning
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'str'>
<class 'bool'>
:::
## 6.算術運算子
Python 的 7 則運算

:::danger
* Python將==所有的輸入都視為字串==,也就是將輸入的10與20都是文字,必須轉型成數字才能運算
* 例如:
* x=int(input()),將輸入的資料轉為整數
* y=float(input()),將輸入的資料轉為浮點數
:::
:::success
* 概念1: 運算的優先順序,與數學運算是一樣的
* 跨號優先
* 乘、除(整數除法/符點除法)與取餘數優先
* 同一運算式含有數個加與減,由左至右逐一運算
* 概念2: 整數除法 vs 浮點除法
* 整數除法: //
* 以整除結果為準
* 得到的值必為==整數==
* 即結果會是強迫使用 int() 轉型後的值
* 10 // 3 = 3
* 浮點除法: /
* 結果以===浮點數==表示
* 即結果會是強迫使用 float() 轉型後的值
* 10 / 2 = 5.0
:::
## 7.判斷式-if
* 介紹關係(比較)運算子

* 當 if 條件式符合時就會執行紅框內的程式,若不符合就不執行

* if 是根據後面的布林(Bool)值決定是否執行。
* if 後面若是 True,就會執行接著的程式
* if 後面若是 False,就不會執行
* 所以,一般使用時 if 後面接的會是==條件式==(**關係/比較運算**),當條件符合(True)時就執行,條件不符合(False)就不執行。
例:判斷分數是否及格
```python=
score = int(input())
if score > 0 :
print(“{0}分及格".format(score))
```
:::danger
* if條件式後面,為什麼有冒號?
* 冒號代表後面會有一個獨立執行的區塊
* if所包含的敘述式,為什麼要縮排?
* 為了區分冒號後面的程式碼與前面(包含if那行)式不同的執行區塊,必須設定縮排!
:::
## 8.判斷式-if/else
* 不適這樣就是那樣
* 判斷式會常用到關係式(比較)運算子與邏輯算子

* if/else語法
```python=
if 條件式:
敘述式;
else:
敘述式;
# 當條件式成立時, 執行敘述式A; 不成立時, 執行敘述式B
```
* 概念 1: 談談寫作風格 - 區塊
* if與else的下方分別包含一個區塊
* 連續有著同樣縮排的行數視為同一個區塊
* 概念 2: 再談寫作風格 - ==分號== 與 ==敘述式==
* 分號:
* 某些程式語言(例如: C),敘述式尾端一定要加分號(;),Python 則不要求
* 但若多個敘述式放在同一行,則務必在敘述式尾端加分號
* 為了程式的可讀性,建議保持一行一個敘述式,維持不使用分號的風格
* 一行一個敘述式可讀性高 一行多個敘述式可讀性低
* 敘述式:
* 一行一個敘述式,敘述式尾端可加也可不加分號(;)
* 可讀性高
* 一行多個敘述式,每個敘述式尾端用分號區格
* 可讀性低,不建議使用
## 9. 重複結構
### 9-1. 計數器控制
* 使用重複結構的指令while,進行重複
* 執行重複主體次數以1000次為例
```python=
i=1 #i的作用是計數器,必須設定起始值
while i<=1000: #重複的條件是i<=1000
#重複的主體
i=i+1 : #主體被執行一次,計數器就加
```

例: 輸入n的值,執行n次的重複次數迴圈
```python=
i = 0 #起始條件設定
n = int
(input())
while i < n: #印的次數不能超過n次
print ("HaHaHa!") #重複的主體
i =i +1 #條件的遞增
```

### 9-2. 警示值控制
* while是當條件式符合時,就會一直執行後面接的程式指令
* 判斷重複主體何時結束: (==while條件是不符合==)
* 例: 輸入值決定迴圈結束,以輸入-1為何
```python=
n = int(input()) #起始條件設定
while n !=-1: #條件檢測
print("HaHaHa!") #重複的主體
n = int(input()) #不可省略,否則會兆呈無窮迴圈
```

* if/while比較
* if 是當條件式符合時,就會執行一次後面接的程式指令
* while是當條件式符合時, 就會一直執行後面接的程式指令

### 9-3. for迴圈
```python=
for 控制變數 in 條件範圍:
敘述式 #重複的主體
```
* 條件範圍
* range(初始值, 條件式, 條件改變)
* range() 可視為一個等差級數列表表達式
* 首項 => 初始值
* 末像 => 條件式
* 公差 => 條件改變
while vs. for

* 程式碼比較寫法(以1印到10為例)
* 用while解
```python=
i = 1
while i < 11:
print(i)
i = i + 1
```
* 用for解
```python=
for i in range(1, 11, 1):
print(i)
```

### 10. 自訂函式
* 甚麼是函式?
* 函式(function)是一個建構程式時的小區塊
* 就像是一台自動販賣機,可以指定它的功能並且規範,例如:
* 輸入:硬幣、商品
* 輸出:所選擇的商品
* 輸入、輸出和功能已照規定設計好,要使用的時候,也只能依照著這個規定來使用它。
* 函式的目的
* 提高程式可讀性與可重用性
* 將常用的或者重複的程式碼,分離出來成為一小段獨立程式區塊,稱為模組或函式
* 可以利用函式的技巧將大問題切割成小問題,以便於各個擊破…這個需要好好寫作,才能體會了
*函式的種類 (function)
* 內置函式
* 程式語言預先定義的函式
* 格式不可變動
* 自訂函式
* 使用者自己依照需求定義的函式稱為自訂函式,使得大問題可以切割成小問題
* 程式編輯者自己定義的函式
* 根據使用需求,程式編輯者隨時可以更動函式的定義

* 如何自訂函式?
1. 先將指定功能的程式碼定義在同一區塊,這個區塊起始於def
2. 函式名稱(為函式命一個英文名)
3. 在函式名稱() 的括號內寫入要傳入哪些變數(稱為參數),這些變數來自主程式
4. 自訂函式的程式碼必須內縮
5. return 將自訂函式執行結果回傳主程式的自訂函式呼叫處
* ==自訂函式的四種可能==
:::info
* 1.沒有參數,沒有回傳值的自訂函式
```python=
def hello():
print(‘Hello function')
hello() # 只要一直加 hello() 就好
```
:::
:::success
* 2.有參數,沒有回傳值的自訂函式
```python=
def hello(n): #函式的跨號內,參數n,表示有傳入參數
for i in range(1,1+n,1):
print("Hello function")
n=int(input())
hello(n) #傳入參數n,呼叫副程式(函式)hello即可工作
```
:::
:::warning
* 3.沒有參數,有回傳值的自訂函式
```python=
def add(): #函式的跨號內,沒有任何參數,表示沒有傳入參數
sum=0
for i in range(1,101,1):
sum=sum+i
return sum #有return就會傳值回主程式
print(add()) #呼叫副程式(函式)add工作後傳值回主程式
```
:::
:::danger
* 4.有參數,有回傳值的自訂函式
```python=
def area3(r, h): ##函式的跨號內,沒有任何參數,表示沒有傳入參數
area2 = r * r * 3.14
return area2 * h #return 可以決定area3函式區塊要回傳甚麼值
#主程式
r=3
volume = area3(r, 10) #呼叫函式area3
print(‘半徑
{0} 時的圓柱體體積: {1}'.format(r, volume))
```
:::
## 11. 資料四大結構
* 陣列
* 將同類型資料連續放在一起的資料結構是陣列(array)
* 在日常生活中,利用編號幫我們記住東西的位置與順序
* 在陣列中,我們使用索引(index),找到相對應的資料。在電腦的世界中,==陣列的索引值通常從0開始==
* 串列
* 在python中使用list來操作陣列資料結構
* list稱為清單也稱為串列和列表
* 串列中可以放相似的資料
* 串列的建立
```python=
numList = [3, 10.12, [] ,’text’]
產生一個 [] (串列) 指派 給 numList (變數名稱)
串列存放的每個資料可稱為元素(element) 或 項目(item)
```

* 串列的資料結構
* 串列不挑食
* 整數也吃
* 浮點數也吃
* 字串也吃
* 就算丟個串列進去也吃喔!
*

* 如何取串列內的某個項目?
* 讀取元素:使用串列名稱加上元素序號,可以讀取列表中的某個元素
```python=
numList = [‘apple’, ‘2.0’,’5’,True]
print(numList[0])
print(numList[1])
print(numList[2])
print(numList[3])
"""
# 執行結果如下:
apple
2.0
5
True
"""
```
* 修改元素:串列名稱[索引值] = 新值
```python=
numList = [‘apple’, ‘2.0’,’5’,True]
numList[0]=‘banana’
print(numList)
"""
# 執行結果如下:
[‘banana’, ‘2.0’,’5’,True]
"""
```
:::danger
* 新增元素
* 方法1:使用append()
* 在串列尾部添加一個新元素
* 方法2:使用insert()
* 將一個元素插入在串列的任意位置
* 方法3:使用”+”
* 將一個新列表附加在原串列的尾部
* 方法4:使用extend()
* 將一個列表附加在原串列的尾部
:::
* 串列的使用(1)檢索元素
* 1.檢索元素
* In
* 使用in運算子檢查某個元素是否在串列
```python=
>>>buylist = [‘蘋果’,‘香蕉’,‘櫻桃’]
>>>print(‘香蕉’ in buylist)
True
```
* count
* 使用count()方法計算串列中某個元素出現的次數
```python=
>>>buylist = ['蘋果','香蕉','櫻桃’]
>>>print(buylist.count('蘋果’))
1
```
* • len
* 列出串列裡面有幾個項目
```python=
>>>buylist = ['蘋果','香蕉','櫻桃’]
>>>print(len(buylist))
3
```
* 2.刪除元素
* del:使用del刪除某個特定位置的元素
```python=
>>>buylist = ['蘋果','芒果','莓','櫻桃','橘子’]
>>>del buylist[0]
>>>print(buylist[])
['芒果','草莓','櫻桃','橘子’]
```
* remove:使用remove刪除某個特定值的元素
```python=
>>>buylist = ['蘋果','芒果','莓','櫻桃','橘子’]
>>>buylist.remove(‘櫻桃’)
>>> print(buylist[])
```
* pop:彈出最後一個元素
```python=
>>>buylist = ['蘋果','芒果','草莓','櫻桃','橘子’]
>>>pop()
橘子
```
### 11-1. 串列(List)
### 11-2. 元組(Tuple)
### 11-3. 集合(Set)
### 11-4. 字典(Dict)