Try   HackMD

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」的寫法:

    ​​​​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('猜錯了!')
  1. 寫一個猜拳遊戲,玩家數入: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('錯誤!')
  1. 有一個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])