选择与循环:剪刀石头布_python项目11石头剪刀布游戏

项目说明

本项目我们尝试用Python语言设计一个计算机程序来模拟“石头剪刀布”的双人对决游戏。对垒的甲乙双方同时任意喊“石头剪刀布”中的一种(名称或代码),然后按照游戏规则“石头打剪刀,布包石头,剪刀剪布”来判定哪边玩家赢。假如我们用数字代码0、1、2分别表示石头、剪刀、布,则甲乙双方对决的结果也可以用对应数字代码的差值来表示,见下图 85f5b37f64149b5a4401dece2e98201f.png 我们注意到:甲方-乙方的差为2或-1时甲方获胜;当差为0时,双方打成平手;当差为1或-2时乙方获胜。 程序将用到import、def、if/elif/else、return等Python关键词,也会用到print( )、random.randrange( )等Python函数,还会用到变量、数学表达式、逻辑表达式、字符串表达式、自定义函数、代码格式、注释等Python语言的一些特性。

项目模板

# -*- coding: utf-8 -*-"""
石头剪刀布游戏
该程序的关键点是把“石头”、“剪刀”、“布”映射为以下数字:
石头 - 0
剪刀 - 1
布 - 2
"""import random   # 包含random.randrange(start, stop)函数的模块# 定义辅助函数def name_to_number(name):# 用if/elif/else将name转换为对应数字代码,-1表示name无效if name == "石头":return 0elif name == "剪刀":return 1elif name == "布":return 2else:return -1          # 无效的name返回-1def number_to_name(number):# 用if/elif/else将数字代码number转换为对应的字符名称,number无效时返回"无效"pass# 代码写在这里# 程序从此执行while True:
    print("石头剪刀布游戏开始!")
    print("输入'石头'、'剪刀'或'布',输入'结束'游戏结束。")
    cmd = input("请出拳: ")if cmd == '结束':
        print("游戏结束。")break
    player_number = name_to_number(cmd)if player_number == -1:
        print("出拳无效,游戏重新开始。")
        print("--------------------------------------\n")continue
    print("你出的拳是:" + cmd)
    computer_number = random.randrange(0, 3)  # 电脑随机出拳
    print("电脑出的拳是:" + number_to_name(computer_number))# 计算player_number和computer_number之差对3的模
    diff_mod_three = (player_number - computer_number) % 3# 用if/elif/else判定输赢结果,并输出结果信息if diff_mod_three == 0:
        print("你和电脑平手!")
        print("--------------------------------------\n")elif diff_mod_three == 1:
        print("电脑获胜!")
        print("--------------------------------------\n")else:
        print("你获胜!")
        print("--------------------------------------\n")

编码步骤

建议在提供的模板中按照以下步骤完成编码。(可用电脑打开文章将模板代码复制到PyCharm中进行编写) (1)阅读程序中的name_to_number(name)函数,理解该函数的作用。该函数用于实现将玩家所喊的名称转换为数字代码。该函数的唯一参数是一个字符串,可能取值为:“石头”、“剪刀”、“布”等名称。函数的返回值为名称所对应的数字代码。如果参数取值为“石头”,该函数会返回0;如果参数取值为“剪刀”,该函数会返回1;如果参数取值为“布”,该函数会返回2。如果参数的值不是一个有效名称,则返回-1(代表参数无效)。 (2)完善程序框架中的number_to_name(number)函数。该函数用于实现将玩家喊的数字代码转换为名称。该函数的唯一参数是一个数字,可能取值为:0、1、2。函数的返回值为数字代码所对应的名称。如果参数的值不是0、1、2中的一个,则返回“出拳无效”。 独立思考和编写代码后若遇到问题可参考以下代码

参考代码

# -*- coding: utf-8 -*-"""
石头剪刀布游戏
该程序的关键点是把“石头”、“剪刀”、“布”映射为以下数字:
石头 - 0
剪刀 - 1
布 - 2
"""import random  # 包含random.randrange(start, stop)函数的模块# 定义辅助函数def name_to_number(name):# 用if/elif/else将name转换为对应数字代码,-1表示name无效if name == "石头":return 0elif name == "剪刀":return 1elif name == "布":return 2else:return -1  # 无效的name返回-1def number_to_name(number):# 用if/elif/else将数字代码number转换为对应的字符名称,number无效时返回"无效"# 代码写在这里if number == 0:return'石头'elif number == 1:return'剪刀'elif number == 2:return'布'else:return'出拳无效'# 程序从此执行while True:
    print("石头剪刀布游戏开始!")
    print("输入'石头'、'剪刀'或'布',输入'结束'游戏结束。")
    cmd = input("请出拳: ")if cmd == '结束':
        print("游戏结束。")break
    player_number = name_to_number(cmd)if player_number == -1:
        print("出拳无效,游戏重新开始。")
        print("--------------------------------------\n")continue
    print("你出的拳是:" + cmd)
    computer_number = random.randrange(0, 3)  # 电脑随机出拳
    print("电脑出的拳是:" + number_to_name(computer_number))# 计算player_number和computer_number之差对3的模
    diff_mod_three = (player_number - computer_number) % 3# 用if/elif/else判定输赢结果,并输出结果信息if diff_mod_three == 0:
        print("你和电脑平手!")
        print("--------------------------------------\n")elif diff_mod_three == 1:
        print("电脑获胜!")
        print("--------------------------------------\n")else:
        print("你获胜!")
        print("--------------------------------------\n")

END

fa1a8c177115a664a8029cf6e6d793b6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值