Logo

郎哥编程

石头、剪子、布

2020-05-11 192

1、游戏场景设定

石头、剪子、布是我们经常玩的一个小游戏,在一些事情的决定上,为了解决争议,也会使用石头、剪子、布决出胜负。

游戏的具体规则是:石头赢剪子、布赢石头、剪子赢布。

游戏的玩家有两个,玩家在同一时间喊出石头、剪子、布的任何一个词语,按照游戏规则胜出的赢。

在本案例中,玩家分别是用户和程序,用户输入石头、剪子、布的任何一个游戏词语,程序随机产生一个1至3范围内的数字,数字1表示石头、数字2表示剪子、数字3表示布。

程序判断用户是否胜出:若用户胜出,程序输出“很棒,你赢了”,程序结束;若平局,程序输出“平局,再来一次”,用户可再次输入石头、剪子、布的任何一个游戏词语;若用户输了,程序输出“你输了,再来一次”,用户可再次输入石头、剪子、布的任何一个游戏词语。

2、编程思路

从案例程序需求来看,程序要处理用户和程序之间的博弈。用户可以随意输入石头、剪子、布的任何一个游戏词语,程序将游戏词语转换为介于1至3范围内对应的数字,同时程序也会创建一个介于1至3范围内的随机数,程序按照游戏规则对比两个数字,就可以判断出用户和程序谁胜出。

01.png

上图是数据流图模型,程序需要处理的数据为:用户喊出的石头、剪子、布、程序创建的随机数。

根据数据流向,程序可以划分为三个处理过程:

数字化处理过程将用户输入的石头、剪子、布游戏词语进行数字化处理,将游戏词语转换为介于1至3范围内对应的数字。

创建随机数处理过程会创建一个介于1至3范围内对应的随机数,该随机数为程序一方喊出的石头、剪子、布。

判断输赢处理过程判断双方的输赢,判断方式是按照游戏规则进行判断,并返回输赢结果。

3、程序流程图

02.png

(1)提示用户输入游戏词语;

(2)判断游戏词语的正确性;

(3)对用户输入的游戏词语进行数字化处理,将游戏词语转换为介于1至3范围内对应的数字;

(4)调用输赢判断函数,在输赢判断函数内部创建一个介于1至3范围内的随机数,用该随机数和函数传入的数字进行判断,判断方式是按照游戏规则进行判断,并返回判断结果;

(5)如果函数返回的ret为“0”,输出“很棒,你赢了”,程序结束;否则输出ret,跳转到步骤(1)。

03.png

digit函数将用户输入的游戏词语转换为介于1至3范围内的数字,具体转换规则是:“石头”转换为数字1;“剪子”转换为数字2;“布”转换为数字3。

输赢判断函数就不给出流程图了,输赢判断函数的判断规则相对比较复杂,感兴趣的同学可自行绘制流程图。

4、程序代码及解读

代码如下:

'''
程序文件:main.py
功能描述:石头剪子布
代码编写时间:2020/05/11
作者:编程训练营
 
游戏词语的数字化表示
1:石头
2:剪子
3:布
'''
# 导入random模块
import random as rm
 
# 创建随机数
def random_number():
    # 创建1至3范围内的随机数
    num = rm.randint(1,3)
    return num
 
# 判断输赢
# n1:用户输入  n2:随机数
def judge(n1,n2):
    # 若n1==n2,返回平局
    if n1 == n2:
        return "平局"
    # 用户赢
    elif n1 == 1 and n2 == 2:
        return "0"
    # 用户赢
    elif n1 == 2 and n2 == 3:
        return "0"
    # 用户赢
    elif n1 == 3 and n2 == 1:
        return "0"
    # 计算机赢
    else:
        return "你输了,再来一次"
 
# 游戏词语数字化
def digit(word):
    if word == "石头":
        return 1
    elif word == "剪子":
        return 2
    elif word == "布":
        return 3
    else:
        return "error"
# 程序入口
if __name__ == '__main__':
 
    # 输出提示内容
    print("和计算机玩石头、剪子、布游戏")
    while(True):
        # 要求用户输入一个数
        word = input("请输入石头或剪子或布:")
        # 调用digit函数
        n1 = digit(word)
        # 如果用户输入正确
        if n1 != "error":
            # 创建随机数
            n2 = random_number()
            # 调用judge函数判断输赢
            ret = judge(n1,n2)
            if ret == "0":
                print("很棒,你赢了")
                break;
            elif ret == "平局":
                print("打了平手,继续努力")
            else:
                print("你输了,再来一次")
        else:
            print("输入错误,请重新输入")

代码解读

代码定义了random_number函数、judge函数和digit函数。

random_number函数创建1至3范围内的随机数,用来模拟程序一方喊出的游戏词语。

digit函数将用户输入的游戏词语数字化为1至3范围的数字,并对用户的输入进行判断,当用户输入错误时,返回error。

judge函数按照游戏规则判断双方的输赢,judge函数需要传入n1和n2两个参数,n1是用户喊出的游戏词语的数字表示,n2是程序喊出游戏词语的数字表示。

主体代码使用while循环来执行游戏过程。在游戏过程中,用户输入一个游戏词语,代码调用digit函数将游戏词语数字化,如果digit函数返回error,说明用户输入错误,提示用户重新输入。

在用户输入正确的情况下,digit函数返回游戏词语的数字化表示,然后代码调用random_number函数创建一个介于1至3范围内的随机数,该随机数用于模拟计算机喊出的游戏词语,最后调用judge函数判断双方的输赢。

04.png


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论