###### 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() ```