## 簡介 猜拳小游戲是一個經典的小游戲項目,也是初學者學習編程的必要練手題目之一。在 Python 中,我們可以使用多種方式來實現一個簡單的猜拳小游戲。 本文將依次介紹六種Python實現猜拳小游戲的方法,包括:使用 `if-else` 條件語句、使用 `random` 模塊、使用字典映射勝負關係 ...
簡介
猜拳小游戲是一個經典的小游戲項目,也是初學者學習編程的必要練手題目之一。在 Python 中,我們可以使用多種方式來實現一個簡單的猜拳小游戲。
本文將依次介紹六種Python實現猜拳小游戲的方法,包括:使用 if-else
條件語句、使用 random
模塊、使用字典映射勝負關係、for迴圈、while迴圈、函數。知識點依次堆加,這些方式各有優缺點,但無論哪種方式,都能夠幫助初學者熟悉 Python 的編碼語法和邏輯思維,更好地理解 Python 的基本數據類型、控制語句等內容;對於專業人士,可以根據具體需求進行選擇。
實現方式一:使用 if-else
條件語句
不能使用while迴圈和for迴圈還有隨機數模塊,因此電腦的出拳方式的生成只能通過計算得到,而該演算法只能模擬隨機數的一部分特性,因此在實際應用中可能存在一定的問題。
註意,這個程式中沒有使用while迴圈或for迴圈等任何迴圈語句,因此只會執行一次猜拳游戲。
# 定義常量
ROCK = 1
PAPER = 2
SCISSORS = 3
# 輸出歡迎信息
print("歡迎來到猜拳游戲!")
print("游戲規則:")
print("1. 石頭勝剪刀")
print("2. 剪刀勝布")
print("3. 布勝石頭")
# 定義得分變數
player_score = 0
computer_score = 0
tie_count = 0
# 讓玩家輸入出拳方式
player_choice = int(input("請輸入您的出拳方式(1:石頭,2:剪刀,3:布):"))
# 判斷玩家的選擇
if player_choice == ROCK:
print("你出了石頭")
elif player_choice == PAPER:
print("你出了剪刀")
else:
print("你出了布")
# 生成電腦的出拳方式
computer_choice = ((player_score + computer_score + tie_count) % 3) + 1
# 輸出電腦的選擇
if computer_choice == ROCK:
print("電腦出了石頭")
elif computer_choice == PAPER:
print("電腦出了剪刀")
else:
print("電腦出了布")
# 判斷輸贏並輸出結果
if player_choice == ROCK:
if computer_choice == ROCK:
print("平局")
tie_count += 1
elif computer_choice == PAPER:
print("電腦獲勝")
computer_score += 1
else:
print("你獲勝")
player_score += 1
elif player_choice == PAPER:
if computer_choice == ROCK:
print("你獲勝")
player_score += 1
elif computer_choice == PAPER:
print("平局")
tie_count += 1
else:
print("電腦獲勝")
computer_score += 1
else:
if computer_choice == ROCK:
print("電腦獲勝")
computer_score += 1
elif computer_choice == PAPER:
print("你獲勝")
player_score += 1
else:
print("平局")
tie_count += 1
# 輸出得分情況
print(f"您的得分:{player_score},電腦的得分:{computer_score},平局次數:{tie_count}")
實現方式二:使用 random
模塊
在使用if語句的基礎上通過引入 Python 的
random
模塊,實現電腦隨機產生手勢的功能。註意,這個程式中沒有使用while迴圈或for迴圈等任何迴圈語句,因此只會執行一次猜拳游戲。
# 使用 random 模塊實現猜拳小游戲
import random
# 按照石頭剪刀布的勝負規則判斷輸贏
def who_win(user_input, computer_input):
win_list = [["石頭","剪刀"], ["剪刀","布"], ["布","石頭"]]
if user_input == computer_input:
return 0
elif [user_input,computer_input] in win_list:
return 1
else:
return -1
while True:
# 玩家輸入手勢
user_choice = input("請選擇(石頭/剪刀/布):")
# 隨機生成電腦的手勢
computer_choice = random.choice(["石頭", "剪刀", "布"])
print("電腦選擇:", computer_choice)
# 判斷勝負
result = who_win(user_choice, computer_choice)
if result == 0:
print("平局,再來一局!")
elif result == 1:
print("你贏了!")
else:
print("你輸了!")
# 是否再來一局
play_again = input("是否再來一局?(y/n)")
if play_again.lower() != "y":
break
實現方式三:使用字典映射勝負關係
使用if語句與隨機數模塊和一個字典來映射石頭剪刀布的勝負規則,並根據用戶和電腦輸入的選項對應的鍵值找到其勝出的選項
# 使用字典映射實現猜拳小游戲
import random
# 定義一個字典,表示石頭剪刀布的勝負關係
dict = {"石頭": "剪刀", "剪刀": "布", "布": "石頭"}
while True:
# 玩家輸入手勢
user_choice = input("請選擇(石頭/剪刀/布):")
# 隨機生成電腦的手勢
computer_choice = random.choice(["石頭", "剪刀", "布"])
print("電腦選擇:", computer_choice)
# 判斷勝負
if dict[user_choice] == computer_choice:
print("你贏了!")
elif user_choice == computer_choice:
print("平局!")
else:
print("你輸了!")
# 是否再來一局
play_again = input("是否再來一局?(y/n)")
if play_again.lower() != "y":
break
實現方式四:for迴圈
這種實現方式使用if語句、隨機數模塊和一個字典來映射石頭剪刀布的勝負規則,並使用for迴圈來實現猜拳小游戲
import random
# 定義石頭剪刀布的勝負規則
rules = {
"rock": {
"scissors": "你贏了!",
"paper": "你輸了!"
},
"paper": {
"rock": "你贏了!",
"scissors": "你輸了!"
},
"scissors": {
"paper": "你贏了!",
"rock": "你輸了!"
}
}
# 迴圈玩5局游戲
for i in range(5):
# 生成隨機選擇
player_choice = random.choice(["rock", "paper", "scissors"])
computer_choice = random.choice(["rock", "paper", "scissors"])
print("你的選擇:{}".format(player_choice)) # 輸出玩家選擇
print("電腦的選擇:{}".format(computer_choice)) # 輸出電腦選擇
# 判斷勝負關係並輸出結果
if player_choice == computer_choice:
print("平局!") # 如果玩家和電腦選擇一樣,則平局
elif rules[player_choice][computer_choice] == "你贏了!":
print(rules[player_choice][computer_choice]) # 如果玩家選擇戰勝電腦選擇,則輸出玩家勝利信息
else:
print(rules[computer_choice][player_choice]) # 如果電腦選擇戰勝玩家選擇,則輸出電腦勝利信息
實現方式五:while迴圈
在原有基礎上進行修改,將for迴圈替換為while迴圈;
- 增加了用戶交互環節,讓用戶可以選擇自己出拳或者輸入r隨機出拳的功能;
- 記錄了游戲結果統計變數(比如用戶勝利場數、電腦勝利場數和回合數),併在游戲結束時列印比分結果;
- 在滿足三局兩勝的條件時結束游戲,並詢問用戶是否再次開啟游戲;
import random
# 定義一個字典,用於映射石頭剪刀布的勝負規則
rps_dict = {'石頭': '剪刀', '剪刀': '布', '布': '石頭'}
# 初始化用戶選擇和電腦選擇
user_choice = None
computer_choice = None
# 初始化游戲結果統計變數
user_win_count = 0
computer_win_count = 0
round_count = 0
# 使用while迴圈實現猜拳小游戲
while True:
# 列印提示信息
print("歡迎來到猜拳游戲!")
print("請輸入石頭、剪刀或布(輸入r表示隨機選擇):")
# 獲取用戶輸入
user_input = input().strip().lower()
# 如果用戶輸入為r,則隨機選擇石頭、剪刀或布
if user_input == 'r':
computer_choice = random.choice(list(rps_dict.values()))
# 如果用戶輸入為有效的選項,則將其轉換為對應的值並賦值給user_choice和computer_choice
elif user_input in list(rps_dict.keys()):
user_choice = user_input
computer_choice = rps_dict[user_input]
# 如果用戶輸入無效,則提示錯誤信息並繼續迴圈
else:
print("輸入無效,請重新輸入!")
continue
# 判斷勝負並輸出結果
if user_choice == computer_choice:
print("平局!")
elif (user_choice == '石頭' and computer_choice == '剪刀') or \
(user_choice == '剪刀' and computer_choice == '布') or \
(user_choice == '布' and computer_choice == '石頭'):
print("恭喜你,你贏了!")
user_win_count += 1
else:
print("很遺憾,你輸了。")
computer_win_count += 1
# 列印本局游戲的結果
print(f"你出了{user_choice},電腦出了{computer_choice}")
print(f"當前比分:你 {user_win_count} - {computer_win_count} 電腦\n")
# 增加回合數並判斷是否達到三局兩勝的條件
round_count += 1
if user_win_count == 2:
print("你已經獲得三局兩勝了,你贏了!")
break
elif computer_win_count == 2:
print("很遺憾,電腦獲得了三局兩勝,你輸了!")
break
# 根據用戶的選擇決定是否繼續游戲
replay = input("是否再玩一局?(y/n)").strip().lower()
if replay != 'y':
break
# 詢問用戶是否再次開啟游戲
play_again = input("是否再次開啟游戲?(y/n)").strip().lower()
if play_again == 'y':
exec(open(__file__).read())
else:
print("游戲結束!")
實現方式六:函數
對while迴圈的代碼進行重構使用函數進行優化
import random
from time import sleep
# 定義一個字典,用於映射石頭剪刀布的勝負規則
rps_dict = {'石頭': {'name': '石頭', 'defeat': '布'},
'剪刀': {'name': '剪刀', 'defeat': '石頭'},
'布': {'name': '布', 'defeat': '剪刀'}}
# 清屏函數,用於在每次輸出前清空屏幕
def clear_screen():
print('\033c', end='')
# 美化輸出函數,用於列印美觀的輸出界面
def print_beautiful(message):
print('='*50)
print(f"{message:^50}")
print('='*50)
# 獲取用戶輸入函數,用於獲取用戶選擇
def get_user_choice():
while True:
user_input = input("請選擇 石頭、剪刀、布:")
if user_input not in rps_dict:
print_beautiful("選擇無效,請重新選擇")
else:
break
return rps_dict[user_input]
# 電腦隨機選擇函數
def get_computer_choice():
return random.choice(list(rps_dict.values()))
# 判斷勝負函數
def judge(user_choice, computer_choice):
if user_choice == computer_choice:
result = "平局!"
winner = None
elif user_choice['defeat'] == computer_choice['name']:
result = "很遺憾,你輸了。"
winner = 'computer'
else:
result = "恭喜你,你贏了!"
winner = 'user'
return result, winner
# 列印結果函數
def print_result(result, user_choice, computer_choice):
print_beautiful(result)
sleep(1)
print(f"你出了【{user_choice['name']}】,電腦出了【{computer_choice['name']}】")
# 根據勝負結果更新勝利次數函數
def update_win_count(winner, win_count):
if winner == 'user':
win_count['user'] += 1
elif winner == 'computer':
win_count['computer'] += 1
# 列印當前比分函數
def print_score(win_count):
print(f"當前比分:你 {win_count['user']} - {win_count['computer']} 電腦\n")
# 判斷是否達成勝利條件函數
def check_victory(win_count):
if win_count['user'] == 2:
print_beautiful("恭喜你,你已經獲得三局兩勝了,你贏了!")
return True
elif win_count['computer'] == 2:
print_beautiful("很遺憾,電腦獲得了三局兩勝,你輸了!")
return True
else:
return False
# 再玩一局函數
def ask_replay():
while True:
replay = input("是否再玩一局?(y/n)").strip().lower()
if replay not in ['y', 'n']:
print_beautiful("輸入無效,請重新輸入")
else:
break
return replay == 'y'
# 游戲結束函數
def game_over():
print_beautiful("游戲結束!")
sleep(2)
# 主函數,實現游戲邏輯
def main():
clear_screen()
print_beautiful("歡迎來到猜拳游戲!")
win_count = {'user': 0, 'computer': 0}
while True:
user_choice = get_user_choice()
computer_choice = get_computer_choice()
result, winner = judge(user_choice, computer_choice)
print_result(result, user_choice, computer_choice)
update_win_count(winner, win_count)
print_score(win_count)
if check_victory(win_count):
if not ask_replay():
break
else:
win_count = {'user': 0, 'computer': 0}
clear_screen()
game_over()
if __name__ == '__main__':
main()