這次我們要練習的題目,是讓電腦當莊家,選定一個介於 1–100 之間的整數,而使用者要輸入數字去猜那個數字,直到猜中為止。沒猜中時電腦會限縮範圍當作提示,讓使用者再次嘗試。
我們希望密碼每次都不一樣,最好是隨機、沒有規律,所以在實作上需要用到內建函式庫 random 裡面的 randint() 功能。randint(a, b) 會隨機挑選一個大於等於 a、小於等於 b 的整數並回傳,以下是範例用法:
import random
number = random.randint(10, 20)
print(number)
順帶一提,匯入內建函式庫的時候,除了 import xxx 這種寫法外,有時候我們只是要用某個函式庫裡面其中一個功能而已,這時我們可以用 from xxx import xxx 這種寫法,就樣就不會把整個函式庫都匯進來囉。例如:
from random import randint
number = randint(10, 20)
print(number)
由於匯入方法不同,兩種寫法會有些差異,要特別留意。
相關概念
- 變數 (variables)
- 條件判斷 (conditional statements)
- 迴圈 (loops/iterations)
- 字串 (strings)
相關函式/功能
- randint():產生隨機整數
- input():讓使用者輸入內容
- int():將字串轉換成整數
- try & except:處理程式錯誤
- while loop:讓使用者重複猜數字
程式試寫
from random import randint
#規定範圍並產生密碼
lowest = 1
highest = 100
answer = randint(lowest, highest)
#重複猜數字,直到猜對為止
while True:
guess = input('密碼介於 ' + str(lowest) + '-' + str(highest) + ':\n>>')
#檢查輸入的內容是否為數字
try:
guess = int(guess) #把字串轉換成整數
except ValueError: #轉換失敗便要求重新輸入數字
print('格式錯誤,請輸入數字\n')
continue
#檢查輸入的數字是否介於規定範圍內
if guess <= lowest or guess >= highest:
print('請輸入 ' + str(lowest) + '-' + str(highest) + ' 之間的整數\n')
continue
#判斷有沒有猜中密碼
if guess == answer:
print('答對了!')
break #猜對才跳脫迴圈
elif guess < answer:
lowest = guess
else:
highest = guess
比較妙的地方是 int() 在這個程式裡扮演的角色(見第 14 行),它的功能是「間接」驗證使用者輸入的內容。由於使用者透過 input() 輸入的東西,格式一律都是字串 ,要直接確認內容是否只有數字並不容易,於是我們轉個彎來操作:用 int() 試著把使用者輸入的內容轉換成整數。如果轉換成功,表示使用者只有輸入數字;如果轉換失敗,表示使用者並非只輸入數字。如此一來便能根據轉換後的結果,反推使用者輸入的內容。
以下是程式實際上執行的樣子,大家可以按右下角的箭頭圖示玩玩看: