使用colab製作猜英文字遊戲

Table of Contents

Table of Contents


本文將說明如何使用google colab來製作一個簡單猜英文字遊戲。
這裡將使用python的一些基本使用方法:

  • random程式庫的使用
  • if、for loop的語法
  • list, string的使用
  • 函式定義與使用

Youtube

猜英文字遊戲的要求

先在一堆英文字中隨機選取一個文字。讓使用者每次輸入一個字母來檢查是否該文字含有輸入的字母。
可猜測次數依照文字長度而有限制。
遊戲執行例子如下:

輸入一字母: e
_ _ _ _ _ _ _ _ e
剩餘11回合

輸入一字母: a
a _ a _ _ a _ _ e
剩餘10回合

輸入一字母: t
a _ a _ _ a _ _ e
剩餘9回合

輸入一字母: s
a _ a _ _ a _ _ e
剩餘8回合

輸入一字母: p
a _ a _ _ a _ _ e
剩餘7回合

輸入一字母: c
a _ a _ _ a _ _ e
剩餘6回合

輸入一字母: y
a _ a _ _ a _ _ e
剩餘5回合

輸入一字母: l
a _ a _ l a _ l e
剩餘4回合

輸入一字母: i
a _ a i l a _ l e
剩餘3回合

輸入一字母: n
a _ a i l a _ l e
剩餘2回合

輸入一字母: b
a _ a i l a b l e
剩餘1回合

輸入一字母: v
恭喜猜對文字: available

實作重點

隨機選取一個文字

這裡使用random函式庫的choice函式,可以從輸入的參數中隨機選取一筆在參數裡的項目。
範例:

import random
words = ['hello', 'people', 'breakfast']
word = random.choice(words)
print(word)
# output: people

檢查是否該文字含有輸入的字母

對文字使用for in 語法做一個迴圈處理,檢查文字中是否含有輸入的字母。
如果有,則把該位置的字母改成*。並且儲存在結果(spaces)中,方便等一下顯示時使用。

for index , character in enumerate(word):
  if (character == guess):
    word = word[:index] + '*' + word[index+1:]
    spaces[index] = character

判斷猜字成功的處理

定義一個判斷用的函式check_win,裡面去檢查結果spaces的內容是否都不為_

def check_win():
  for space in spaces:
    if (space == '_'):
      return False 
  return True

依照文字長度設定可猜測次數

取得文字長度後設定迴圈執行的次數。

# 設定猜測次數限制
turn = len(word) + 3
for turn_index in range(turn):
  ...

完整程式碼

import random

words = ['hello', 'people', 'breakfast','international','information','development','experience','government','everything','management','university','especially','understand','particular','technology','different','something','important','available','including','community','following','companies','education','according']
word = random.choice(words)
answer = word
spaces = ['_']*len(word)

# 設定猜測次數限制
turn = len(word) + 3
is_win = False

# 確認猜字完成函數
def check_win():
  for space in spaces:
    if (space == '_'):
      return False 
  return True

for turn_index in range(turn):
  # 等待使用者輸入
  guess = input('\n輸入一字母: ')
  # 檢查相同字母
  for index , character in enumerate(word):
      if (character == guess):
          word = word[:index] + '*' + word[index+1:]
          spaces[index] = character
  # 判斷猜字完成
  if (check_win()):
    print(f"恭喜猜對文字: {answer}")
    is_win = True
    break
  # 顯示目前結果
  print(" ".join(spaces))
  # 顯示剩餘回合
  if (turn_index != (turn -1) ):
    print(f"剩餘{turn - turn_index - 1}回合")
# 沒完成時的訊息
if (not is_win):
  print(f"\n抱歉,答案是{answer}")