当前位置:首页>python>Python 从零到精通(十一):实战篇——写一个能自定义局数的剪刀石头布游戏

Python 从零到精通(十一):实战篇——写一个能自定义局数的剪刀石头布游戏

  • 2026-09-10 15:30:58
Python 从零到精通(十一):实战篇——写一个能自定义局数的剪刀石头布游戏

PYTHON 从零到精通

第 11 讲 · 实战:剪刀石头布

进阶阶段第 4 篇:做一个能玩 N 局的小游戏

前面 10 讲学的都是"零件":变量、循环、判断、字符串、字典……今天把它们组装成一个完整的小游戏。这也是你写的第一个"能反复玩"的程序——做完会有真正的成就感。

一、我们要实现什么:自定义循环次数的剪刀石头布

这个游戏要满足 4 个要求:

① 自定义局数:开局先问"想玩几局",玩家说几就玩几局。
② 玩家出拳:每局手输"剪刀/石头/布"。
③ 电脑随机:电脑每局随机出拳,不让你猜到。
④ 统计战绩:玩完告诉你是几胜几平几负。

先看成品跑起来长什么样(这是后面要一步步做出来的最终效果):

想玩几局:3

—— 第 1 局 ——
你出(剪刀/石头/布):石头
电脑出了:布
你输了!

—— 第 2 局 ——
你出(剪刀/石头/布):布
电脑出了:剪刀
你输了!

—— 第 3 局 ——
你出(剪刀/石头/布):剪刀
电脑出了:剪刀
平局!

===== 最终战绩 =====
总场次:3
胜:0  平:1  负:2

二、需要什么技术(先认个脸熟)

做这个游戏,一共用到 6 个知识点,全是我们前面学过的。先一句话复习:

技术
干啥用
一句话
import random
引入随机模块
让电脑"随便"出拳
random.choice()
从列表随机取一个
电脑出拳就靠它
input()
收集玩家输入
局数/出拳都靠它(局数要 int)
for + range
控制循环次数
"玩几局"就循环几次
if/elif/else
判胜负
平 / 赢 / 输 三种情况
字典 win_map
存胜负规则
替代一堆 if,更清爽

三、一步步教学:5 步拼出这个游戏

▍第 1 步:让电脑随机出拳

先引入 random 模块,再用 random.choice(列表) 从三个选项里随机抽一个:

import random

choices = ["剪刀", "石头", "布"]
com = random.choice(choices)
print("电脑出了:", com)
电脑出了: 石头

▍第 2 步:让玩家出拳,并拦住乱输的

用 input() 收集玩家出拳。但玩家可能打错字,所以先判断他输的是不是在合法选项里(呼应第 9 讲字典的 in):

choices = ["剪刀", "石头", "布"]
you = input("你出(剪刀/石头/布):")

if you not in choices:
    print("输入不对,请出 剪刀/石头/布")
else:
    print("你出了:", you)
你出(剪刀/石头/布):石头
你出了: 石头

▍第 3 步:判一局胜负(用字典存规则)

剪刀石头布的胜负是有规律的:石头赢剪刀、剪刀赢布、布赢石头。用一个字典 win_map 把"谁赢谁"存起来,判胜负就一行,比写一堆 if 清爽:

win_map = {"剪刀": "布", "石头": "剪刀", "布": "石头"}  # key 赢 value

you = "石头"
com = "剪刀"

if you == com:
    print("平局!")
elif win_map[you] == com:   # 你的拳能赢电脑的拳
    print("你赢了!")
else:
    print("你输了!")
你赢了!

▍第 4 步:加上"玩几局"的循环

开局先问局数,再用 for i in range(1, rounds + 1) 循环对应次数。注意 range(1, n+1) 是从 1 开始数(第 1 局而不是第 0 局):

import random

choices = ["剪刀", "石头", "布"]
rounds = int(input("想玩几局:"))

for i in range(1, rounds + 1):
    print(f"\n—— 第 {i} 局 ——")
    you = input("你出(剪刀/石头/布):")
    com = random.choice(choices)
    print(f"电脑出了:{com}")
想玩几局:3

—— 第 1 局 ——
你出(剪刀/石头/布):石头
电脑出了:布
—— 第 2 局 ——
你出(剪刀/石头/布):布
电脑出了:剪刀
—— 第 3 局 ——
你出(剪刀/石头/布):剪刀
电脑出了:剪刀

▍第 5 步:统计总战绩

开三个计数器 win / draw / lose,每局结束按结果 +1,循环外打印总结:

win = draw = lose = 0

# 循环里每判完一局:
#   平局 → draw += 1
#   赢   → win += 1
#   输   → lose += 1

print("\n===== 最终战绩 =====")
print(f"总场次:{rounds}")
print(f"胜:{win}  平:{draw}  负:{lose}")
===== 最终战绩 =====
总场次:3
胜:0  平:1  负:2

四、最终成品代码:把 5 步拼起来

把上面 5 步按顺序写进一个文件,就是完整可运行的剪刀石头布游戏:

# 剪刀石头布游戏(自定义循环次数)
# 功能:玩家设定局数,逐局出拳,电脑随机出拳,结束统计战绩
# 作者:小黄Apollo

import random

choices = ["剪刀", "石头", "布"]
# 胜负规则:key 能赢 value
win_map = {
    "剪刀": "布",
    "石头": "剪刀",
    "布": "石头",
}

rounds = int(input("想玩几局:"))
win = draw = lose = 0

for i in range(1, rounds + 1):
    print(f"\n—— 第 {i} 局 ——")
    you = input("你出(剪刀/石头/布):")
    if you not in choices:
        print("输入不对,这局算你输~")
        lose += 1
        continue
    com = random.choice(choices)
    print(f"电脑出了:{com}")

    if you == com:
        print("平局!")
        draw += 1
    elif win_map[you] == com:
        print("你赢了!")
        win += 1
    else:
        print("你输了!")
        lose += 1

print("\n===== 最终战绩 =====")
print(f"总场次:{rounds}")
print(f"胜:{win}  平:{draw}  负:{lose}")

五、测试终端输出:实测跑一遍

把上面的代码存成 game.py,在终端运行 python game.py,输入"3"开局、连出"石头/布/剪刀",真实运行输出如下(和开头预览完全一致):

$ python game.py
想玩几局:3

—— 第 1 局 ——
你出(剪刀/石头/布):石头
电脑出了:布
你输了!

—— 第 2 局 ——
你出(剪刀/石头/布):布
电脑出了:剪刀
你输了!

—— 第 3 局 ——
你出(剪刀/石头/布):剪刀
电脑出了:剪刀
平局!

===== 最终战绩 =====
总场次:3
胜:0  平:1  负:2

读一下输出你能确认逻辑都对:电脑随机出拳、你输错会被判负、相同出拳算平局、战绩统计准确。你的第一个能反复玩的小游戏,做出来了。

五个新手必踩的坑

① random 没 import:直接用 random.choice() 会 NameError,先写 import random。
② 局数没 int():input() 返回字符串,range("3") 直接报错,要 int(input())。
③ 出拳拼错字:先 if you not in choices 拦住,否则后面 win_map[you] 直接 KeyError。
④ range 从 0 开始:想显示"第 1 局"要用 range(1, rounds+1)。
⑤ 胜负规则写反:win_map 存的是"key 赢 value",写成"被谁赢"判定就全反了。

记住这三句话,游戏就稳了

① random.choice(列表) 从列表里随机取一个,电脑出拳全靠它。
② for i in range(1, n+1) 是"循环 n 次且从 1 数"的标准写法。
③ 用字典存规则比一堆 if 清爽,但查之前先校验 key 存在,避免 KeyError。

动手才有手感

把上面的游戏跑一遍,试试连赢三局!再挑战一下:加一个"再来一局?"的提示,输入 y 就整体重开(提示:外面再套一层 while True)。把你的战绩截图发到评论区,下一篇我们把这个游戏拆成函数,让代码更整洁!

Python 学习群:618215568

下一篇预告:第 12 讲 · 函数入门——把今天的游戏拆成可复用的函数,让重复代码消失


作者:小黄Apollo | B站:apollo小黄 | QQ群:618215568
关注「小黄Apollo」,Python 从零到精通,一篇一个知识点。

最新文章

随机文章