# Python Basic
# 常見錯誤及需要注意的
* 一定要排版!在python裡排版是必要的
* 如果可以盡量宣告時直接指定型態
* 該空格要空格 該縮排就縮排
* 盡量避免掉語法錯誤
# 基礎中的基礎
### 輸出
print('我是被輸出的')
```Python
print('HelloWorld')
```
## 變數
常見的變數型態有 **int(整數),float(浮點數),str(字串),bool(布林值)**
* 變數宣告時不須指定型態
* 使用指定運算子( = ) 來為變數指定初始值
* 使用 **type**可以得知此變數的變數型態
* 不須設定初始值請用 **None**
* 單行註解使用 **#被註解的文字**
```Python
age = 16
name = 'Chen'
score = 99.7
pa = False
ans = None
print('學生名稱',name)
print('年齡',age)
print('分數',score)
print('會被當嗎',pa)
```
### 輸入
變數 = input('提示字元')
### 註解
使用三個單引號來多行註解
使用井號來單行註解
## 算術運算子
|運算子|結果|
|:--: |:--:|
|x+y| 相加|
|x-y|相減|
|x*y|相乘|
|x/y|x除y|
|x//y|x除y 求整數|
|x%y|取x除y的餘數|
|x**y|x的y次|
## 其他語法
**\n**換行
一次輸出多個變數 **%**
|Code|功能|
|:---: |:---:|
|%% | 輸出%|
|%d |10進位整數|
|%f |十進位浮點術|
|%c |字元輸出|
(其實還有更多)
```Python
chinese =int( input('國文分數:'))
english = int(input('英文分數:'))
math = int(input('數學分數:'))
science = int(input('自然分數:'))
society = int(input('社會分數:'))
avg = float((chinese + english + math + science + society )/5)
print('你的分數分別是')
print('國文:%d\n英文:%d\n數學:%d\n自然:%d\n社會:%d\n' %(chinese,english,math,science,society))
print('平均:%f' %(avg))
```
# 條件判斷
**使用if elif else**
* 條件不必使用括號
* 條件完必須要加**分號**
* 一樣!絕對要排版!不要忘記TAB和空格
* 變數型態轉換 後來(原本)
```Python
name = input('請輸入您的名字')
score = int(input('請輸入您的分數'))
if score >= 90:
print(name,'是學霸!好電Orz')
elif score >=60:
print('還可以接受啦')
else:
print(name,'!你給我去讀書!')
```
### 邏輯運算子
|運算子|結果|
|:--: |:--:|
|x == y|是否等於Y|
|x != y|是否不等於Y|
### 布林運算子
A 為條件A
B 為條件B
|運算子|結果|
|:--: |:--:|
|A and B|是否A B皆成立|
|A or B|A或B其中一個成立|
|not A|回傳A的相反|
```Python
score = int(input('請輸入您的分數'))
if score >= 60 and score <= 90 :
print('你只有',score,'是個普通人')
if not score >= 60 :
print('一樣給我去念書!!')
```
# 陣列
* Range,Tuple 不可修改
* 可存不同資料
* 使用[index]讀取資料
### Range
**不可修改**
Range(stop)
Range(start, stop)
Range(start, stop, step)
* 若沒有給起始值,將預設為0
* 若沒有給間隔,將預設為1
* 遇到停止點後就會終止,因此Range中的數字將**不會包含停止點**
### Tuple
**不可修改**
### List
即為array
* 需使用[]
* 陣列內的元素也可以是陣列(類似數學上的集合)
* 使用 **[start:stop:step]**來取出資料,-1表示最後一個
```Python
number = range (1,5,1) #range
name = 'John','Chris','Amber','Bob','Emma' #tuple
score = [ 50,70,98,78,4] #list
score[0] = [0,1,2]
print('座號:',number[0],number[1],number[2],number[3])
print('姓名:',name[0],name[1],name[2],name[3])
print('分數:',score[0],score[1],score[2],score[3])
```
```Python
str1 = 'hello world'
arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr2 = arr1[0:5]
arr3 = arr1[0:-1:2]
arr4 = arr1[:]
print(arr2)
print(arr3)
print(arr4)
print(str1[5:])
print(arr1[:-1])
```
# 重複結構
### for
常跟range搭配使用
或者跟List搭配
有次數限定的
>for i in range()
>for i in str
>for i in arr
```Python
score = [0,0,0,0,0]
program = ['國文','英文','數學','自然','社會']
sum = 0
for i in range(5):
x = int(input(program[i]))
score[i] = x
for i in range(5):
print('%s成績為%d分'%(program[i],score[i]))
for i in range(5):
sum += score[i]
print('總分',sum)
avg = sum/5
print('平均',avg)
```
***example***
**印出10為底的三角形,如下**
```
***********
*********
*******
*****
***
*
```
```Python
for i in range(10):
for j in range(i):
print(' ',end="")
for j in range(11- 2*i):
print('*',end="")
print('\n')
```
### while
**有條件限定的**
```Python
while 條件:
if 條件:
continue
if 條件:
break
```
```Python
num = int(input('請輸入一個數'))
while num != 0:
print(num % 10)
num //= 10
```
# 字元、字串
字串其實也是序列的一種 也可以把它看成一種容器
* 使用加號(A+B=AB)
* 判斷是否相同記憶體使用is
* split 和 join
>split('分割符',數量)
>join可將一個陣列組合成一個字串
```Python
country = 'Taiwan,USA,UK,Japan'
list1 = country.split(',',4)
for i in range(len(list1)):
print(list1[i])
ans = 'xx'.join(list1)
print (ans)
```
:::success
a024 大數運算
大數運算對python來說是非常簡單的問題
:::
:::spoiler
```python=
line=input()
a=int(line.split()[0])
fix=line.split()[1]
b=int(line.split()[2])
if fix=='+':
print(a+b)
elif fix=='-':
print(a-b)
elif fix=='*':
print(a*b)
else:
print(a//b)
```
:::
# 函式
在不同地方但需要使用同一段程式碼時
argument可以預設 若無輸入就會使用預設
```Python
def FunctionName(Argument):
程式碼
return 回傳值
```
***最小公因數(GCD)***
**輾轉相除法**
兩個整數的GCD是能夠同時整除它們的最大的正整數。
>原理:
>兩個整數的GCD等於較小的數和,兩數的差的最大公因數
```Python
def gcd(a,b):
if b == 0:
return a
else:
return gcd(b,a%b)
x = int(input('請輸入x:'))
y = int(input('請輸入y:'))
print('x和y的GCD為',gcd(x,y))
```
### 遞迴
這只是基礎的遞迴
***費氏數列***
```Python
def f(n):
if n == 0:
return 0
if n <=2:
return 1
return f(n-1)+f(n-2)
for i in range(11):
print(f(i))
```
# 其他常見操作
|操作|功能|
|:----:|:----:|
|len(s)|s的長度|
|min(s)|s內的最小值|
|s.count(x)|x在s裡出現幾次|
|s.remove(x)|刪除在s裡第一個x|
|s.reverse()|反轉|
|s.insert(i,x)|在i的地方插入x|
# 加解密
10 base to 2 base
```python=
bin(num)
```
10 base to 16 base
```python=
hex(num)
```
2/16 base to 10 base
```python=
int(num,[進位])
```
## base64
```python=
import base64
base64.b64encode(s).decode() # 將byte轉str
```
### 導入模組
```Python
import time
import random as rd
from apthlib import Path
```