今天分享一个自己做的游戏:石头剪刀布
感兴趣可以看小甲鱼的《零基础入门学习Python(最新版)》
会用到分支和循环的语法{:5_109:}
import random
print("石头剪刀布游戏,现在开始!\
\n游戏共五场,最后根据得分定胜负!")
scorea = 0
scoreb = 0
i = 0
for m in range(5):
b = input("请输入石头,剪刀或布:")
a = random.randint(1,3)
if b == "石头":
b = 1
elif b == "剪刀":
b = 2
elif b == "布":
b = 3
else:
print("非法输入!请输入石头,剪刀或布!")
print("游戏结束,不玩啦^_^")
i = 1
if i == 1:
break
else:
if b == 1:
if a == 1:
print("我出的也是石头^_^,平局!")
elif a == 2:
print("我出的是剪刀,你赢了!")
scoreb += 1
elif a == 3:
print("我出的是布,我赢了!")
scorea += 1
elif b == 2:
if a == 1:
print("我出的是石头,我赢了!")
scorea += 1
elif a == 2:
print("我出的也是剪刀^_^,平局!")
elif a == 3:
print("我出的是布,你赢了!")
scoreb += 1
elif b == 3:
if a == 1:
print("我出的是石头,你赢了!")
scoreb += 1
elif a == 2:
print("我出的是剪刀,我赢了!")
scorea += 1
elif a == 3:
print("我出的也是布^_^,平局!")
print("现在分数:我",scorea,":",scoreb,"你")
if i != 1:
if scorea > scoreb:
print("这场游戏我赢啦^_^")
elif scorea < scoreb:
print("这场游戏你赢啦^_^")
else:
print("这场游戏我们平局!")
print("游戏结束,不玩啦^_^")
你好!感谢分享你的石头剪刀布游戏代码。这是一个很好的练习项目,确实涵盖了分支和循环的语法,正如小甲鱼教程中所讲。你的代码逻辑清晰,能正确运行,但有一些地方可以优化,让代码更简洁、易读。
代码优点:
1. 使用了 random.randint 来生成随机选择,简单有效。
2. 通过 for 循环控制游戏轮数,符合要求。
3. 有基本的输入验证,能处理非法输入。
改进建议:
1. 输入验证:当用户输入非法时,当前代码会直接结束游戏。可以改为循环提示用户重新输入,直到输入有效。
2. 减少重复代码:比较胜负的逻辑可以用字典或列表来映射,避免多个 if-elif 嵌套。
3. 变量命名:使用更具描述性的变量名,比如 player_score 和 computer_score,提高可读性。
4. 游戏逻辑优化:将选择映射和胜负判断封装成简单结构。
改进代码示例:
以下是一个优化后的版本,使用字典来简化逻辑,并改进输入验证。
import random
print("石头剪刀布游戏,现在开始!")
print("游戏共五场,最后根据得分定胜负!")
# 使用字典映射选择
choices = {"石头": 1, "剪刀": 2, "布": 3}
results = {
(1, 1): "平局",
(1, 2): "你赢了",
(1, 3): "我赢了",
(2, 1): "我赢了",
(2, 2): "平局",
(2, 3): "你赢了",
(3, 1): "你赢了",
(3, 2): "我赢了",
(3, 3): "平局"
}
player_score = 0
computer_score = 0
for round_num in range(5):
while True:
player_input = input("请输入石头、剪刀或布:")
if player_input in choices:
player_choice = choices
break
else:
print("非法输入!请重新输入。")
computer_choice = random.randint(1, 3)
# 判断胜负
result = results[(player_choice, computer_choice)]
print(f"我出的是{list(choices.keys())},{result}!")
# 更新分数
if result == "我赢了":
computer_score += 1
elif result == "你赢了":
player_score += 1
print(f"现在分数: 我 {computer_score} : {player_score} 你")
# 最终结果
if computer_score > player_score:
print("这场游戏我赢啦^_^")
elif computer_score < player_score:
print("这场游戏你赢啦^_^")
else:
print("这场游戏我们平局!")
print("游戏结束,不玩啦^_^")
主要改动:
- 使用 choices 字典将输入映射到数字,便于比较。
- 使用 results 字典存储所有可能的胜负结果,避免冗长的 if-elif 链。
- 输入验证使用 while 循环,直到输入有效为止。
- 变量名更清晰,分数更新更直接。
希望这个改进版本能帮助你写出更优雅的代码!继续加油学习Python,如果有问题,随时来问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 {:5_106:}
加油 FishC 发表于 2025-12-14 18:13
你好!感谢分享你的石头剪刀布游戏代码。这是一个很好的练习项目,确实涵盖了分支和循环的语法,正如小 ...
可以给每行代码后面都加一个注释吗 27142556 发表于 2025-12-14 18:35
FishC 发表于 2025-12-14 18:13
你好!感谢分享你的 ...
import random# 导入random模块,用于生成随机数
print("石头剪刀布游戏,现在开始!")# 打印游戏开始提示
print("游戏共五场,最后根据得分定胜负!")# 打印游戏规则
# 创建一个字典,将用户输入的字符串映射为数字,方便比较
choices = {"石头": 1, "剪刀": 2, "布": 3}
# 创建一个字典,键是(玩家选择, 电脑选择)的元组,值是对应的胜负结果
results = {
(1, 1): "平局",
(1, 2): "你赢了",
(1, 3): "我赢了",
(2, 1): "我赢了",
(2, 2): "平局",
(2, 3): "你赢了",
(3, 1): "你赢了",
(3, 2): "我赢了",
(3, 3): "平局"
}
player_score = 0# 初始化玩家得分
computer_score = 0# 初始化电脑得分
# 进行5轮游戏
for round_num in range(5):
# 使用while循环确保用户输入合法
while True:
player_input = input("请输入石头、剪刀或布:")# 获取用户输入
if player_input in choices:# 检查输入是否在字典的键中
player_choice = choices# 将输入转换为对应的数字
break# 输入合法,跳出循环
else:
print("非法输入!请重新输入。")# 提示用户重新输入
computer_choice = random.randint(1, 3)# 电脑随机生成1、2或3
# 根据玩家和电脑的选择,从results字典中获取结果字符串
result = results[(player_choice, computer_choice)]
# 将电脑的数字选择转换回文字,以便输出
# 遍历字典找到值为computer_choice的键
for key, value in choices.items():
if value == computer_choice:
computer_choice_text = key# 获取对应的文字
break
print(f"我出的是{computer_choice_text},{result}!")# 输出电脑选择和结果
# 根据结果更新分数
if result == "我赢了":
computer_score += 1# 电脑得分加1
elif result == "你赢了":
player_score += 1# 玩家得分加1
# 平局不加分
print(f"现在分数: 我 {computer_score} : {player_score} 你")# 打印当前分数
# 游戏结束,判断最终胜负
if computer_score > player_score:
print("这场游戏我赢啦^_^")
elif computer_score < player_score:
print("这场游戏你赢啦^_^")
else:
print("这场游戏我们平局!")
print("游戏结束,不玩啦^_^")# 打印结束语
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 加油 import tkinter as tk
from tkinter import font
import random
class RockPaperScissorsGame:
def __init__(self, master):
self.master = master
master.title("石头剪刀布")
master.geometry("400x300+500+100")
master.configure(bg="#F0F0F0")
# 初始化得分
self.player_score = 0
self.computer_score = 0
# 创建自定义字体
self.title_font = font.Font(family="Arial", size=16, weight="bold")
self.result_font = font.Font(family="Arial", size=14)
self.score_font = font.Font(family="Arial", size=12)
# 创建界面元素
self.create_widgets()
def create_widgets(self):
# 电脑选择显示
self.computer_choice_label = tk.Label(
self.master,
text="电脑出拳:等待中...",
font=self.title_font,
bg="#F0F0F0"
)
self.computer_choice_label.pack(pady=10)
# 结果显示
self.result_label = tk.Label(
self.master,
text="点击下方按钮开始游戏",
font=self.result_font,
bg="#F0F0F0",
fg="#333333"
)
self.result_label.pack(pady=15)
# 玩家选择按钮
button_frame = tk.Frame(self.master, bg="#F0F0F0")
button_frame.pack(pady=10)
choices = ["石头", "剪刀", "布"]
colors = ["#FF6666", "#66CC66", "#6666FF"]
for choice, color in zip(choices, colors):
btn = tk.Button(
button_frame,
text=choice,
font=self.title_font,
bg=color,
width=8,
command=lambda c=choice: self.play_round(c)
)
btn.pack(side=tk.LEFT, padx=5)
# 比分显示
self.score_label = tk.Label(
self.master,
text=f"玩家 {self.player_score} : {self.computer_score} 电脑",
font=self.score_font,
bg="#F0F0F0",
fg="#444444"
)
self.score_label.pack(pady=20)
# 重置按钮
reset_btn = tk.Button(
self.master,
text="重置比分",
font=self.score_font,
command=self.reset_scores
)
reset_btn.pack()
def play_round(self, player_choice):
# 电脑随机选择
computer_choice = random.choice(["石头", "剪刀", "布"])
self.computer_choice_label.config(text=f"电脑出拳:{computer_choice}")
# 判断胜负
result = self.get_result(player_choice, computer_choice)
# 更新比分和显示
if "赢" in result:
self.player_score += 1
color = "green"
elif "输" in result:
self.computer_score += 1
color = "red"
else:
color = "blue"
self.result_label.config(text=result, fg=color)
self.score_label.config(text=f"玩家 {self.player_score} : {self.computer_score} 电脑")
def get_result(self, player, computer):
if player == computer:
return "平局!"
winning_combinations = {
"石头": "剪刀",
"剪刀": "布",
"布": "石头"
}
if winning_combinations == computer:
return "你赢了!(*^▽^*)"
return "你输了!(>﹏<)"
def reset_scores(self):
self.player_score = 0
self.computer_score = 0
self.score_label.config(text=f"玩家 {self.player_score} : {self.computer_score} 电脑")
self.computer_choice_label.config(text="电脑出拳:等待中...")
self.result_label.config(text="比分已重置", fg="#333333")
if __name__ == "__main__":
root = tk.Tk()
game = RockPaperScissorsGame(root)
root.mainloop() 加油 很棒了,加油加油{:10_256:} 学习了 加油 注释真香 加油 学习中
页:
[1]