# 111-07-09 Python入門實作班上課記錄 ###### tags: `python` ### 猜數字遊戲 使用者輸入1~3之間的數字,如果使用者猜對,則顯示`YES`,猜錯顯示`NO` ##### 參考程式碼 ``` import random pc = random.randint(1, 3) # 電腦的答案 player = int(input("請輸入1~3之間的數字:")) # 讓玩家猜一個數字 if pc == player: print('YES') else: print('NO') print('答案是:', pc) ``` > **補充** > ``` > i = input('請輸入1~3之間的數字:') > player = int(i) # 轉型成數字 > ``` > 可以結合成為一行程式碼: > ``` > player = int(input("請輸入1~3之間的數字:")) > ``` ### 今日運勢抽籤 寫一今日運式程式,程式執行後從下面運勢中顯示一則給使用者: - 今天中彩票 - 今天撿到錢 - 今天發薪水 - 今天發紅包 ##### 方法一 ``` import random print('今天' + random.choice(['中彩票', '撿到錢', '發薪水', '發紅包'])) ``` ##### 方法二 ``` import random a = ['中彩票', '撿到錢', '發薪水', '發紅包'] print('今天' + a[random.randint(0, len(a) - 1)]) ``` ### 寫一個執行三次的while迴圈,並輸出4, 5, 6三個數字 ``` i = 4 while i < 7: print(i) i += 1 ``` ##### 猜數字遊戲,玩家輸入1~10之間的數字,讓玩家猜三次,猜到就輸出"你贏了",否則顯示"猜錯" ``` import random pc = random.randint(1, 10) print("答案:", pc) count = 0 while count < 3: player = int(input('請輸入1~10之間的數字:')) if pc == player: print('你贏了') break # 直接跳離while迴圈 else: print('猜錯, 你已經猜了', count + 1, '次') count += 1 # 把次數加1 print('遊戲結束') ``` ### 醒腦練習 1. 如何刪除List內元素? ``` del 或 remove() ``` 2. `['a', 'b', 'c', 'd', 'e', 'f']`清單中,如何用索引切片取得`['d', 'e', 'f']`? ``` ['a', 'b', 'c', 'd', 'e', 'f'][3:] ``` 3. 何謂r字串? ``` 又稱為raw字串,該字串的轉義符號都會變成字串的一部分而非轉義符號 ``` 4. `print('我' + 18 '歲')`有何錯誤? 該如何修正? ``` 字串無法和數字作串接,須先將數字作轉型 print('我' + str(18) '歲') ``` 5. 如何建立一個空的set? ``` set() ``` 6. `3 if 3 > 3 else 3 - 3`結果為何? ``` 0 ``` 7. 單行if有何限制? ``` 運算式內不可以有指派運算子 ``` 8. ``` n = 0 while n > 10: print(n) ``` 該迴圈會執行幾次? ``` 無限次(因缺少了停止迴圈的條件,n變數內容不會變) ``` 9. 如何取得1~1000之間的隨機整數? ``` random.randint(1, 1000) ``` 10. 下面哪些是錯誤的變數命名? - `abc` - `_A` - `a123` - `6ab` - `_xo_` - `OK-0` ``` 6ab和OK-0是錯誤的變數命名 變數名稱第一個字元不可為數字 變數只能使用底線符號 ``` ### 完整九九乘法表 ``` j = 2 while j <= 9: i = 1 while i <= 9: print(str(j) + ' x ' + str(i) + " = " + str(j * i)) i += 1 print('------------------------') j += 1 ``` - 外層迴圈為九九乘法表左邊數字,內層為右邊數字 ### 安排出場順序 ``` import random students = ['Aaron', 'Andy', 'Apple', 'Abner', 'Alan', 'Amber'] arrange = [] for e in range(0, len(students)): # 抽六次 index = random.randint(0, len(students) - 1) # 被抽到的學生索引值 result = students[index] # 被抽到的學生 arrange.append(result) # 將名單加到新的list del students[index] # 刪除被抽到的人 print(arrange) ``` ## 課後練習 1. 請問break放在if裡面作用是什麼? **答:** ``` ``` 2. 請問continue放在while裡面的作用是什麼? **答:** ``` ``` 3. 請使用range()函式寫出可以產生0, 2, 4, 6, 8數字的程式碼。 **答:** ``` ``` 4. 請問if內的程式碼為什麼一定要縮排? **答:** ``` ``` 5. while迴圈可以做到的事的都可以使用for-in取代嗎? **答:** ``` ``` 6. 請問else這個關鍵字的用途是什麼? **答:** ``` ``` 7. 如何判斷一個數字是不是偶數? **答:** ``` ``` 8. 如果要寫出一個完整的九九乘法表,會需要幾層的迴圈? **答:** ``` ``` 9. Python有哪幾種迴圈? **答:** ``` ``` 10. 寫一個程式,將['aaron', 'apple', 'amanda']內的每個元素顯示到畫面上,並在每個元素前面顯示他的索引值。 輸出範例: ``` 0: aaron 1: apple 2: amanda ``` **答:** ``` ``` 11. 請問下面迴圈的print()會執行幾次? ``` i = 0 j = 100 while i < j: if i % 10 == 0: break print(i) ``` **答:** ``` ``` 12. Python內建什麼函式可以算list內數值資料的加總? **答:** ``` ``` 13. 何謂迭代? **答:** ``` ``` 14. 請使用range()寫出可以產生[-10,-9,-8,-7,-6]的list。 **答:** ``` ``` 15. 將下面程式碼改用「for Comprehension」的寫法: ```python data = [1, 2, 3, 4] result = [] for item in data: result.append(item ** 2) ``` **答:** ``` ``` 16. 如何在終端機畫面上輸出如下的圖案? ``` * ** *** **** ***** ``` **答:** ``` ``` ## 最後一堂課的練習與參考程式碼 1. 寫一猜數字遊戲,猜1~10之間的數字,猜到對為止,猜對後顯示玩家總共猜了幾次? > **提示** > 功能拆解: > - 需要透過random模組隨機產生1~10之間的一個數字做為答案 > - 需要input讓玩家輸入他猜的數字 > - 使用if判斷式判斷是不是猜中了 > - 使用`while Ture`無窮迴圈來讓使用者一直猜 > - 猜中後需使用bread離開無窮迴圈 > - 定義一個變數來記錄玩家猜了幾次,每次input之後就加1 > - 離開while迴圈把紀錄的次數顯示出來(或是猜對就顯示也可以) #### 參考程式碼 ``` import random pc = random.randint(1, 10) # 答案 count = 0 # 記錄次數用的變數 while True: player = int(input('請輸入1~10之間的數字:')) count += 1 # 增加次數 if player == pc: print('猜對了,您總共猜了', count, '次') break else: print('猜錯了!') ``` 2. 寫一個猜拳遊戲,玩家數入:0=剪刀,1=石頭,2=布,跟電腦猜拳後告知輸贏。 #### 參考程式碼 ``` import random SCISSORS = 0 # 剪刀 STONE = 1 # 石頭 PAPER = 2 # 布 pc = random.randint(0, 2) # 隨機電腦的出拳 player = int(input('請出拳(0=剪刀, 1=石頭, 2=步):')) if player == SCISSORS: print('你出了剪刀') elif player == STONE: print('你出了石頭') elif player == PAPER: print('你出了布') else: print('輸入錯誤!') if pc == SCISSORS: print('電腦出剪刀') elif pc == STONE: print('電腦出石頭') elif pc == PAPER: print('電腦出了布') else: print('輸入錯誤!') if pc == player: print('平手') elif pc == SCISSORS and player == STONE: print('你贏了') elif pc == SCISSORS and player == PAPER: print('你輸了') elif pc == STONE and player == SCISSORS: print('你輸了') elif pc == STONE and player == PAPER: print('你贏了') elif pc == PAPER and player == SCISSORS: print('你贏了') elif pc == PAPER and player == STONE: print('你輸了') else: print('錯誤!') ``` 3. 有一個List內容為`[90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]`,請使用索引運算來取得`[100, 98, 96, 94, 92, 90]`這樣的List並顯示在畫面上。 #### 參考程式碼 ``` print([90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100][-1::-2]) ```