---
title: 'python'
tags: 程式
disqus: hackmd
---
[TOC]
## python
### input(' ') 獲取使用者的輸入訊息
```python=
name = **input(**'Hello, what is your name? '**)**
print('Hi, ', name)
```
輸出結果

---
### if elif else 的應用
```python=
grade = 90
if grade >= 90:
print('Excellent!')
elif grade >= 60:
print('Good enough!')
else:
print('Loser!')
```
輸出結果

---
### or and not 的應用
```python=
h = 180
w = 85
grade = 80
if h > 175 or w > 80:
print('big dude')
if grade > 70 and grade < 90:
print('noraml')
if not grade < 90:
print('noraml')
```
輸出結果

---
### for迴圈 (for loop)
1. 要使用for迴圈,要先有序列容器。
```python=
arr1 = [2, 4, 6, 8, 10]
str1 = 'hello python'
for i in range(10):
print(i)
print('***\n')
for i in range(len(arr1)):
print(arr1[i])
print('***\n')
for i in arr1:
print(i)
print('***\n')
for i in str1:
print(i)
print('***\n')
for i in arr1:
i += 1
print(arr1)
```
輸出結果

2. for迴圈陣列
```python=
# in-place construction
arr1 = [i for i in range(10)]
print(arr1)
# you can use if to filter the elements
arr2 = [x for x in arr1 if x % 2 == 0]
print(arr2)
# you can use as many conditions as you want!
arr3 = [x for x in arr1 if x >= 3 and x % 2]
print(arr3)
# use nested for loops to make everyone dizzy XD
arr4 = [(x, y) for x in range(3) for y in range(4)]
print(arr4)
```
輸出結果

---
### break 、 continue
1. 迴圈中如果要終止可以使用break、continue
```python=
for i in range(1,11):
if(i==6):
break
print(i, end=",")
if(i==7):
continue
print(i, end=",")
```
---
### Range() 的應用
Range這個型別可用來創建並儲存特定範圍內的整數,一旦Range被創建了,裡面的內容是不可修改的。
> Range(stop)
stop:停止點
>Range(start, stop)
start:起始點
stop:停止點
>Range(start, stop, step)
start:起始點
stop:停止點
step:間隔
1. 建立整數的串列可用range, range(起始值 [,終止值, 間格值])
```python=
ironman_list1 = range(5)
ironman_list2 = range(3,8)
ironman_list3 = range(3,8,2)
print(list(ironman_list1))
print(list(ironman_list2))
print(list(ironman_list3))
```
輸出結果

---
### String (字串)
一個比較好理解的方式為,其實String就像是一堆字元排在一起組合而成的 (字元指的為一個字)。需要注意的是,字串的內容也是不能修改的。
```python=
str1 = 'hello python'
str2 = str1
str2 += ' journey'
print(str2 is str1)
print(str1)
result = str2.split(' ')
print(result)
print(type(result))
result_back = '***'.join(result)
print(result_back)
print(type(result_back))
```
輸出結果

---
### List的應用
List即為Python中的陣列(Array)。可以修改裡面的內容。
```python=
arr1 = [1, 2, 3]
arr2 = [10, 'hello world', 8.7]
arr1[0] = [1, 2, 3]
print(type(arr1))
print(arr1)
print(arr2)
```
輸出結果

---
### 一維陣列、 二微陣列 、 三微陣列
```python=
ironman_x1 = np.random.randint(10, size=6) #一維陣列
ironman_x2 = np.random.randint(10, size=(3,4)) #二維陣列
ironman_x3 = np.random.randint(10, size=(2,3,2)) #三維陣列
print("ironman_x1---->", ironman_x1)
print("ironman_x2---->", ironman_x2)
print("ironman_x3---->", ironman_x3)
```
---
### 序列型別的操作
1. 常見的序列容器操作方法
| 操作 | 描述 |
| -------- | -------- |
| x in s | 檢查X是否存在於S這個容器之中|
|x not in s |檢查X是否不存在於S這個容器之中|
|s + t |容器S與容器T的內容相加|
|s * n |三個容器S => s + s + s|
|len(s) |取得容器的長度 (裡面有幾個元素的意思)|
|min(s)|取得容器內的最小值 (前提是裡面的元素要能比大小啊!)|
|max(s) |取得容器內的最大值|
|s.index(x[,i[,j]]) |X元素在S容器的索引值,如果有給i, j就只會在index為i~j的範圍找|
|s.count(x) |X這個元素在S這個容器內出現幾次|
2. 修改序列容器的內容
| 操作 | 描述 |
| -------- | -------- |
|s[i] = x| index為i的元素的內容置換為X|
|s[i:j] = t| index從i到j的元素內容置換為X|
|s[i:j:k] = t| index從i到j的元素,以step為k的方式,將內容置換為X|
|del s[i:j]| 把index從i到j的元素刪除|
|del s[i:j:k]| index從i到j的元素,以step為k的方式刪除元素|
|s.append(x)| 將X塞到S容器的最後面|
|s.clear()| 將S容器的內容全部刪除(same as del s[:])|
|s.copy()| 複製S容器(same as s[:])|
|s.extend(t)| 同 s = s + t|
|s.insert(i,x)| 在S容器index為i的位置將X插入,原有的元素(們)將會往後移|
|s.pop([i])| 將index為i的元素取出,並將其移出容器|
|s.remove(x)| 刪除第一個找到的X|
|s.reverse()| 讓容器的內容順序顛倒|
###### tags: 取出部分的內容,若是想從一個序列容器中取出一部份的內容來使用,我們可以用seq[開始:停止:間格]
```python=
str1 = 'hello world'
arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(arr1[0:5])
print(arr1[0:-1:2])
print(arr1[:])
print(arr1[:] is arr1)
print(str1[5:])
```
輸出結果

---
### 切片取值
1. 串列取值的方式除了可以使用index取得單一值,也可以使用切片的方式取得多個值
```python=
ironman_list1 = [1,2,3,4,5,6]
print(list(ironman_list1[2:5]))
```
輸出結果

---
### 串列預設函數
1. 1. len():串列((總)元素數目)
2. min():串列元素最小值
3. max():串列元素最大值
```python=
ironman_list1 = [1,2,3,4,5,6]
print('len() 串列元素數目----->',len(ironman_list1))
print('min() 串列元素最小值--->',min(ironman_list1))
print('max() 串列元素最大值--->',max(ironman_list1))
```
輸出結果

2. 1. index():元素在串列中第一次出現的index
2. count():元素在串列中出現的次數
```python=
ironman_list1 = [1,2,3,4,3,6,3]
print('index() 元素3第一次出現的位置------>',ironman_list1.index(3))
print('count() 元素在串列中出現的次數----->',ironman_list1.count(3))
```
輸出結果

---
### 在list中加入、刪除元素、排序元素
#### 加入元素
1. .append():在串列中(末尾加入元素)
2. .extend():在串列中(末尾加入串列的元素)
3. .insert():在串列中(指定位子加入)
extend和insert雖然B同樣都是串列,但加入A串列的方式不一樣,可以注意一下
```python=
ironman_list1 = [1,2,3,4,5,6]
ironman_list1.append(8)
print('append() 將8做為元素加在list最後---->',list(ironman_list1))
ironman_list1 = [1,2,3,4,5,6]
ironman_list1.extend([8,9])
print('extend() 將[8,9]中的元素加在list最後---->',list(ironman_list1))
ironman_list1 = [1,2,3,4,5,6]
ironman_list1.insert(3,8)
print('insert() 在3的位置加入元素8---->',list(ironman_list1))
```
輸出結果

#### 刪除元素
1. .pop():取出串列中最後一個元素,並且移除元素
2. .remove(E):移除A串列中第一個出現E元素
```python=
ironman_list1 = [1,2,3,4,5,6]
n = ironman_list1.pop()
print('pop() 取出list最後一個元素並且移除---->',n)
ironman_list1 = [2,3,4,5,6]
ironman_list1.remove(3)
print('remove() 移除第一次出現3的元素---->',list(ironman_list1))
```

#### 排序元素
1. .reverse():反轉串列的順序
2. .sort():將串列做排序
```python=
ironman_list1 = [2,5,6,3,4]
ironman_list1.reverse()
print('reverse() 反轉list順序---->',list(ironman_list1))
ironman_list1 = [3,2,5,7,4]
ironman_list1.sort()
print('sort() 將list從小到大排列---->',list(ironman_list1))
```

---
### Tuple的應用
###### tags: Tuple可用來存放一組資料。一旦被創造,將無法修改內容。
```python=
t1 = 10, 20
# it can hold different types of data
t2 = 10, 'hello world'
print(type(t1))
print(t1)
print(t2)
```
輸出結果

---
### del
1. 刪除元素
```python=
numberes = 1
del numberes
```
2. 刪除陣列元素
```python=
ironman_list1 = [1,2,3,4,5,6]
del ironman_list1[1:4]
print(list(ironman_list1))
```
輸出結果

---
### function
1. 可以指派他們參數,也可以把他們當作引數傳給其他函式,以及回傳值。
def 方法名():
```python=
def GetArea(height,width):
area = width * height
return area
ret1 = GetArea(6,9)
print('GetArea = ',ret1)
```
輸出結果

---
### import package
1. 如果想要引用其他module裡面的function、class、variable。就需要使用import的方式引用進來。
```
. import 套件名稱
套件名稱.函數名稱 # 使用函數的方式
```
2. 使用套件的函數可以不必輸入套件名稱
```
from 套件名稱 import *
函數名稱 # 使用函數的方式
```
3. 如果兩個套件有相同的函數名稱,可以使用第三種方法
```
from 套件名稱 import 涵式1, 涵式2, .....
涵式1 # 使用函數的方式
```
4. 將套件名稱取成另外一個簡短的別名
```
from 套件名稱 as 別名
別名.函數名稱 # 使用函數的方式
```
---
### sys.argv
| argv 參數 | 說明 |
| -------- | -------- |
| sys.argv[0] | 表示代碼本身文件路徑 |
| sys.argv[1~n] | 表示使用者輸入的文字,用空格隔開 |

說明:
test.py a b
sys.argv[1] 是指 a
sys.argv[2] 是指 b
---
### eval()
函数用来执行一个字符串表达式,并返回表达式的值。
---
### None
None表示空,但它不等于空字符串、空列表,也不等同于False
> https://zhuanlan.zhihu.com/p/65193194
---
### os.path.getmtime()
獲取文件的 最後修改時間
## os套件