###### tags: `程式設計`
# 第三週
:::info
python 只有一種型態: reference to object
:::
## 列表 - list
```python=
a = [1,2,3,5,1,2,7]
#a[0] = 1
#a[4] = 1
```
### `list` 刪除
- 刪除指定元素
- 當 list 中有兩個以上相同的元素,一律先刪除最前面的
```python=
a.remove(<index>)
```
- 移除列表的一個元素,並返回該元素的值
- Default 為最後一個元素
```python=
a.pop()
a.pop(<index>)
```
- EX:
```python
# list 中可以有各型態
>>> a = [1, 'hello', 1.6, (1+5j), 38]
>>> a.remove('hello')
>>> a
[1, 1.6, (1+5j), 38]
```
### `list` 增加
- 增加元素
```python=
a.append()
```
- 在指定位置插入元素
```python=
a.insert(<index>,<元素>)
```
### `list` 反向排序
```python=
a.reverse()
```
```python=
a[::-1]
```
### `list` 內容排序
```python=
a.sort()
```
## for
## yield
```python=
def myRange(n) :
for i in range(n) :
yield i * i
def main() :
for x in myRange(5) :
print(x)
main()
>>> 0
>>> 1
>>> 4
>>> 9
>>> 16
```
## 寫作習慣
:::danger
:warning: 請嚴格遵守 :warning:
:::
1. 先寫註解,弄清楚自己要寫什麼再寫程式
2. 變數及函數要取有意義的名字,禁止用無意義的英文字
3. 先寫 main(大架構),將其中複雜的演算法包成函數
## 3N + 1
```python=
# 給 n, 找出 n 的序列長度
def seqLen(n) :
len = 1
# 3n+1 序列是以找到 1 當終止條件
while n != 1 :
if n % 2 == 0 : # even then n/2
n = n // 2
else : # odd, then 3n+1
n = 3 * n + 1
len = len + 1
return len
# 給 begin, end (含),找出其中 3n+1 序列最長的
def findSol(begin, end) :
# 但題目說,不一定 begin 會比 end 小,所以要檢查一下
if begin > end :
begin, end = end, begin
# 逐一測試 (begin, end) 之間每一個序列長度
max = 0
for i in range(begin, end + 1) :
len = seqLen(i)
if len > max :
max = len
# while 迴圈的寫法
# while begin <= end :
# tmp = seqLen(begin)
# if tmp > max :
# max = tmp
# begin += 1
# 測完
return max
def main() :
begin, end = map(int, input().split())
print(begin, end, findSol(begin, end))
if __name__ == '__main__' :
main()
```