Python每日一練(4)-成語填填樂

1. 單一位置

編寫一個小遊戲,按列表中成語的順序輸出第一個字爲空白的成語,要求用戶填寫答案並回車可以判斷是否正確。正確輸出正確,你真棒~,錯誤輸出錯了,正確答案:。運行效果下圖所示。
程序運行結果
示例代碼如下:

print("====成語填填樂====\n")
# idiom: 成語列表
idiom_list = ["閉月羞花", "國色天香", "傾國傾城", "貌美如花", "明眸皓齒",
              "冰肌玉骨", "小家碧玉", "窈窕淑女", "天生麗質", "秀色可餐", "亭亭玉立"]

for idiom in idiom_list:
    new_idiom = "__" + idiom[1:]  # 構造第一個字爲空白的字符串: __月羞花
    print(new_idiom)
    word = input("輸入: ").strip()  # 用戶輸入
    if word == idiom[0]:
        print("正確,你真棒~")
    else:
        print(f"錯了,正確答案: {idiom[0]}")

2. 位置隨機

編寫一個小遊戲,隨機輸出列表中的成語,同時將成語進行隨機位置輸出空格,要求用戶填寫答案,敲擊回車鍵,程序可以判斷是否正確。正確輸出正確,你真棒~,錯誤輸出錯了,正確答案:。運行效果下圖所示。
在這裏插入圖片描述
示例代碼如下:

import random

print("====成語填填樂====\n")
# idiom: 成語列表
idiom_list = ["閉月羞花", "國色天香", "傾國傾城", "貌美如花", "明眸皓齒",
              "冰肌玉骨", "小家碧玉", "窈窕淑女", "天生麗質", "秀色可餐", "亭亭玉立"]

while len(idiom_list) > 0:
    idiom = random.choice(idiom_list)  # 隨機獲取列表中的一個成語
    index = random.randint(0, 3)  # 隨機產生索引
    new_str = idiom.replace(idiom[index], "__", 1)  # 構建一個帶空白的成語
    print(new_str)
    word = input("輸入: ").strip()
    if new_str.replace("__", word) == idiom:
        print("正確,你真棒~")
    else:
        print(f"錯了,正確答案: {idiom[index]}")
    idiom_list.remove(idiom)  # 移除已經填寫過的成語

3. 添加積分評價

編寫一個小遊戲,隨機輸出一條包含一個空格的成語,填寫完答案,回車,程序可以判斷是否正確。正確加2分,輸出正確,你真棒!。錯誤減2分,輸出錯了,正確答案:。什麼也不填忽略本成語,輸出過!。本遊戲一共8關,遊戲完成輸出成績,選手原始分數爲20分,如下圖所示。
在這裏插入圖片描述
示例代碼如下:

import random

print("====成語填填樂====\n")
# idiom_list: 成語列表
idiom_list = ["閉月羞花", "國色天香", "傾國傾城", "貌美如花", "明眸皓齒",
              "冰肌玉骨", "小家碧玉", "窈窕淑女", "天生麗質", "秀色可餐", "亭亭玉立"]

score = 20  # 原始分數
count = 1  # flag: 用來管控遊戲是否結束 >8 結束
print("直接填寫答案,回車進入下一關,什麼也不填忽略本成語!!!")

while True:
    if count > 8:  # 大於8結束遊戲
        break
    idiom = random.choice(idiom_list)  # 隨機獲取列表中的一個成語
    index = random.randint(0, 3)  # 隨機產生索引
    new_str = idiom.replace(idiom[index], "__", 1)  # 構建一個帶空白的成語
    print(new_str)
    word = input("輸入: ").strip()
    if new_str.replace("__", word) == idiom:
        score += 2  # 答對+2分
        print("正確,你真棒~")
    elif not word:
        print("過!")
        continue
    else:
        score -= 2  # 答錯扣兩分
        print(f"錯了,正確答案: {idiom[index]}")
    count += 1
print(f"\033[1;31m選手最後得分: {score}\033[0m")

4. 文件獲取

在之前的成語填填樂(積分評價)基礎上改進程序。將成語手動添加到列表中費時費事,可以將網絡中的成語複製到文本文件當中,使用時從文件中讀取後保存到列表,這樣可以極大豐富成語填填樂的內容,提升成語填填樂內容的深度和廣度。文本中成語保存方式如圖所示。
在這裏插入圖片描述
示例代碼如下:
在這裏插入圖片描述

5. 設置難度等級

在之前成語填填樂(文件讀取)基礎上改進程序,增加難度等級。將成語文件分成9個等級,讓用戶選擇難度等級,程序根據難度等級調用對應的成語文件,實現成語填填樂(設置難度等級)。成語文件包括idiom1.txt~idiom9.txt。成語文件可以在我的百度網盤中獲取,鏈接如下:

鏈接:https://pan.baidu.com/s/1IlHjg2PXZ6kn4YwrH7a8JA  
密碼:2tjl

程序運行效果如下圖所示。
在這裏插入圖片描述
示例代碼如下:

import random

print("====成語填填樂====\n")
print("""成語填填樂難度等級菜單
1: 一級菜單
2: 二級菜單
3: 三級菜單
4: 四級菜單
5: 五級菜單
6: 六級菜單
7: 七級菜單
8: 八級菜單
9: 九級菜單""")
level = input("請輸入成語填填樂難度等級菜單的數字,如: 3\n").strip()
file_name = "idiom" + level + ".txt"
with open(file_name, encoding="utf-8") as file:
    idiom_list = file.readlines()
score = 20  # 原始分數
count = 1  # flag: 用來管控遊戲是否結束 >8 結束
print("直接填寫答案,回車進入下一關,什麼也不填忽略本成語!!!")

while True:
    if count > 8:  # 大於8結束遊戲
        break
    idiom = random.choice(idiom_list).strip()  # 隨機獲取列表中的一個成語 strip()去除成語後的\n
    index = random.randint(0, 3)  # 隨機產生索引
    new_str = idiom.replace(idiom[index], "__", 1)  # 構建一個帶空白的成語
    print(new_str)
    word = input("輸入: ").strip()
    if new_str.replace("__", word) == idiom:
        score += 2  # 答對+2分
        print("正確,你真棒~")
    elif not word:
        print("過!")
        continue
    else:
        score -= 2  # 答錯扣兩分
        print(f"錯了,正確答案: {idiom[index]}")
    count += 1
print(f"\033[1;31m選手最後得分: {score}\033[0m")

6. 限時完成

在之前成語填填樂(設置難度等級)基礎上改進程序,增加限時完成功能,要求用戶在90秒內完成遊戲,每完成一個成語,提示剩餘答題時間。答題超時提示答題超過90秒答題時間,將退出答題!,並顯示選手得分,運行效果如下圖所示。
在這裏插入圖片描述
示例代碼如下:

import random
import datetime

print("====成語填填樂====\n")
print("""成語填填樂難度等級菜單
1: 一級菜單
2: 二級菜單
3: 三級菜單
4: 四級菜單
5: 五級菜單
6: 六級菜單
7: 七級菜單
8: 八級菜單
9: 九級菜單""")
level = input("請輸入成語填填樂難度等級菜單的數字,如: 3\n").strip()
file_name = "idiom" + level + ".txt"
with open(file_name, encoding="utf-8") as file:
    idiom_list = file.readlines()
score = 20  # 原始分數
print("直接填寫答案,回車進入下一關,什麼也不填忽略本成語!!!")
remain = datetime.datetime.now() + datetime.timedelta(seconds=90)  # 限時90秒完成
while True:
    time_is = (remain - datetime.datetime.now()).seconds
    if time_is > 90:  # 答題時間超過90秒 遊戲結束
        print("答題超過90秒答題時間,將退出答題!")
        break
    print(f"剩餘答題時間\033[1;31m{time_is}\033[0m秒")
    idiom = random.choice(idiom_list).strip()  # 隨機獲取列表中的一個成語 strip()去除成語後的\n
    index = random.randint(0, 3)  # 隨機產生索引
    new_str = idiom.replace(idiom[index], "__", 1)  # 構建一個帶空白的成語
    print(new_str)
    word = input("輸入: ").strip()
    if new_str.replace("__", word) == idiom:
        score += 2  # 答對+2分
        print("正確,你真棒~")
    elif not word:
        print("過!")
        continue
    else:
        score -= 2  # 答錯扣兩分
        print(f"錯了,正確答案: {idiom[index]}")
print(f"\033[1;31m選手最後得分: {score}\033[0m")

7. 選擇填空

在之前成語填填樂(限時完成)基礎上改進程序,實現程序選擇填空功能。成語隨機位置空格輸出需要選擇的一個字,隨機從所有成語的詞彙中選擇三個假答案,結合正確答案讓用戶選擇,用戶只需輸入正確答案前面的字母即可,如果輸入非 A、B、C、D,將提示輸入錯誤,將重新選擇!,運行效果如下圖所示。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章