猜拳游戏文档

本文介绍了一款基于Python编写的猜拳游戏,涉及名称转换、随机选择和计算游戏结果的概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rock-Paper-Scissors 游戏文档

简介

这个程序实现了一个简单的猜拳游戏,包括转换名称和数字代码、随机喊拳、对决计算等功能。

函数说明

name_to_number(name)

将名称转换为对应的数字代码。

参数:

  • name (str): 要转换的名称

返回值:

  • int: 对应的数字代码,若名称无效返回-1

number_to_name(number)

将数字代码转换为对应的名称。

参数:

  • number (int): 要转换的数字代码

返回值:

  • str: 对应的名称,若数字代码无效返回"所喊无效!"

shout_out(name)

根据给定的名称返回对应喊拳的数字代码。

参数:

  • name (str): 可以为“随机”、“杠子”、“老虎”、“鸡”或“虫子”

返回值:

  • int: 对应的数字代码

play_one_round(player1_name, player1_code, player2_name, player2_code, print_msg=True)

进行一轮对决,并输出结果信息。

参数:

  • player1_name (str): 玩家1的名称
  • player1_code (int): 玩家1的数字代码
  • player2_name (str): 玩家2的名称
  • player2_code (int): 玩家2的数字代码
  • print_msg (bool): 是否打印信息,默认为True

返回值:

  • int: 胜利者的标识,0表示平局,1表示玩家1获胜,2表示玩家2获胜

result_probability()

验证对决结果的概率并输出。

示例代码

import random

# 辅助函数
def name_to_number(name):
    # 用if/elif/else将name转换为对应数字代码,-1表示name无效
    if name == "虫子":
        return 0
    elif name == "鸡":
        return 1
    elif name == "老虎":
        return 2
    elif name == "杠子":
        return 3
    else:
        # 无效的name
        return -1


def number_to_name(number):
    # 用if/elif/else将数字代码number转换为对应的字符名称,number无效时返回"所喊无效!"
    if number == 0:
        return "虫子"
    elif number == 1:
        return "鸡"
    elif number == 2:
        return "老虎"
    elif number == 3:
        return "杠子"
    else:
        # 无效的number
        return ("所喊无效!")


def shout_out(name):
    # name参数可以为“随机”、“杠子”、“老虎”、“鸡”或“虫子”,返回对应喊拳的数字代码
    number = -1
    if name == "随机":
        number = random.randrange(0, 4)
    else:
        number = name_to_number(name)
    # play_sound(number)  #播放音效,有兴趣的同学可以尝试实现次函数
    return number


def play_one_round(player1_name, player1_code, player2_name, player2_code, print_msg=True):
    # 游戏的主要逻辑在该函数中实现
    if print_msg == True:
        print("")  # 输出空白行
    if player1_code == -1 or player1_code > 3:
        if print_msg == False:
            print("")  # 输出空白行
        print(player1_name + "所喊无效!")
        return
    if player2_code == -1 or player2_code > 3:
        if print_msg == False:
            print("")  # 输出空白行
        print(player2_name + "所喊无效!")
        return
    player1_choice = number_to_name(player1_code)
    player2_choice = number_to_name(player2_code)
    if print_msg == True:
        print(player1_name + "喊的为:" + player1_choice)
        print(player2_name + "喊的为:" + player2_choice)

    # 计算player1_code和player2_code之差对4的模
    diff_mod_four = (player1_code - player2_code) % 4

    # 用if/elif/else判定输赢结果,并输出结果信息
    if diff_mod_four == 0 or diff_mod_four == 2:
        if print_msg == True:
            print(player1_name + "和" + player2_name + "打成平手!")
        return 0
    elif diff_mod_four == 1:
        if print_msg == True:
            print("%s获胜!" % player1_name)
        return 1
    else:
        if print_msg == True:
            print("%s获胜!" % player2_name)
        return 2


# 验证概率理论
def result_probability():
    # 变量声明及初始化
    play_times = 0  # 对决总次数
    player1_win_times = 0  # 甲方获胜次数
    player1_loss_times = 0  # 甲方失败次数
    tie_times = 0  # 双方平局次数

    # 第1次对决
    result = play_one_round("甲", shout_out("随机"), "乙", shout_out("随机"), False)
    play_times = play_times + 1
    if result == 0:
        tie_times = tie_times + 1
    elif result == 1:
        player1_win_times = player1_win_times + 1
    else:
        player1_loss_times = player1_loss_times + 1

    # 第2次对决
    result = play_one_round("甲", shout_out("随机"), "乙", shout_out("随机"), False)
    play_times = play_times + 1
    if result == 0:
        tie_times = tie_times + 1
    elif result == 1:
        player1_win_times = player1_win_times + 1
    else:
        player1_loss_times = player1_loss_times + 1

    # 第3次对决
    result = play_one_round("甲", shout_out("随机"), "乙", shout_out("随机"), False)
    play_times = play_times + 1
    if result == 0:
        tie_times = tie_times + 1
    elif result == 1:
        player1_win_times = player1_win_times + 1
    else:
        player1_loss_times = player1_loss_times + 1

    # 第4次对决
    result = play_one_round("甲", shout_out("随机"), "乙", shout_out("随机"), False)
    play_times = play_times + 1
    if result == 0:
        tie_times = tie_times + 1
    elif result == 1:
        player1_win_times = player1_win_times + 1
    else:
        player1_loss_times = player1_loss_times + 1

    player1_win_prob = player1_win_times / play_times  # 甲方获胜概率
    tie_prob = tie_times / play_times  # 双方平局概率
    player1_loss_prob = player1_loss_times / play_times  # 甲方失败概率
    print("")  # 输出空白行
    print("甲乙随机比赛" + str(play_times) + "次,验证对决结果的概率为:")
    print("甲方获胜的概率为:" + str(player1_win_prob))
    print("双方平局的概率为:" + str(tie_prob))
    print("甲方失败的概率为:" + str(player1_loss_prob))


# 测试name_to_number()函数
print(name_to_number('虫子'))
print(name_to_number('鸡'))
print(name_to_number('老虎'))
print(name_to_number('杠子'))
print(name_to_number('豹子'))

# 测试number_to_name()函数
print(number_to_name(0))
print(number_to_name(1))
print(number_to_name(2))
print(number_to_name(3))
print(number_to_name(10))

# 测试shout_out()函数
print(shout_out("随机"))
print(shout_out("虫子"))
print(shout_out("鸡"))
print(shout_out("老虎"))
print(shout_out("杠子"))
print(shout_out("棍子"))

# 测试play_one_round()函数
result1 = play_one_round("计算机", 1, "玩家", 1)
print(result1)
result2 = play_one_round("张太红", 2, "白涛", 3)
print(result2)
result3 = play_one_round("甲", 3, "乙", 1)
print(result3)
result4 = play_one_round("A", 2, "B", 1)
print(result4)
print(play_one_round("A", 4, "B", 1))
print(play_one_round("张太红", shout_out("随机"), "白涛", shout_out("随机")))
print(play_one_round("张太红", shout_out("老虎"), "白涛", shout_out("虫子")))
print(play_one_round("计算机", shout_out("随机"), "糊涂玩家", shout_out("豹子"), False))
print(play_one_round("计算机", shout_out("随机"), "糊涂玩家", shout_out("豹子")))

# 测试result_probability()函数
result_probability()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

力江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值