【python基础知识】10.用Python实现石头剪刀布小游戏-函数实操篇

简介: 【python基础知识】10.用Python实现石头剪刀布小游戏-函数实操篇

引言


石头剪刀布是一款经典的手势猜拳游戏,在全球范围内都备受欢迎。通过编程语言Python,我们可以轻松实现这个有趣的小游戏。本文将介绍石头剪刀布游戏的规则,并提供一个使用Python编写的完整代码示例1.jpeg

游戏规则


石头剪刀布游戏的规则非常简单。它包括三种选项:石头、剪刀和布。它们之间的胜负关系如下:


石头胜剪刀:当玩家选择石头,计算机选择剪刀时,石头获胜。


剪刀胜布:当玩家选择剪刀,计算机选择布时,剪刀获胜。


布胜石头:当玩家选择布,计算机选择石头时,布获胜。


练习目标


这个虽然是一个小游戏,但是具体实现起来做法有很多汇总,那咱们就先按照最简单的方式来实现,力求能掌握python的基本语法和random模块的使用。


所以,咱们将实现的目标明确如下:


和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。


步骤拆解


双方出拳:


首先,我们要让双方选择出拳,才能判断胜负。


我们可以设置变量computer_choice代表电脑的出拳选择,设置变量user_choice代表你的出拳选择。


电脑的出拳,我们可以使用random.choice()来随机选择;我们的出拳,可以手动输入我们出拳的类型。


另外,判断下输入:当输入的内容不是石头剪刀布时,电脑会提醒’输入有误,请重新出拳’,并重新出拳。


此处的代码实现为:

import random
# 出拳
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
while True:
    user_choice=input('请输入‘石头’或者‘剪刀’或者‘布’:')
    if user_choice not in punches:
        print('您的输入有误,请重新出拳')
    else:
        break

双方亮拳:


刚刚已经实现了你和电脑的出拳,接下来,我们需要知道双方各自出的拳是什么。


使用print()函数即可打印亮拳的结果,示例代码如下:

# 亮拳
print('————战斗过程————')
print('电脑出拳为:{},你的出拳为{}'.format(computer_choice,user_choice))

判断胜负:


在前面两步,电脑和你已经选择完出拳的类型并亮拳后,只差最后一步:根据结果判断胜负。


根据游戏规则,咱们可以很清楚的知道,规则是这样的:


石头胜剪刀:当玩家选择石头,计算机选择剪刀时,石头获胜


剪刀胜布:当玩家选择剪刀,计算机选择布时,剪刀获胜。


布胜石头:当玩家选择布,计算机选择石头时,布获胜。


那具体怎么用代码来实现呢?通过if方法将这所有情况分别判断一下应该就可以了,示例代码如下:

# 判断胜负
if computer_choice==user_choice:
    print('这一把是平局')
elif computer_choice=='石头'and user_choice=='布':
    print('恭喜你赢了!')
elif computer_choice=='剪刀'and user_choice=='石头':
    print('恭喜你赢了!')
elif computer_choice=='布'and user_choice=='剪刀':
    print('恭喜你赢了!')
elif computer_choice=='石头'and user_choice=='剪刀':
    print('遗憾!电脑赢了这局!')
elif computer_choice=='剪刀'and user_choice=='布':
    print('遗憾!电脑赢了这局!')
elif computer_choice=='布'and user_choice=='石头':
    print('遗憾!电脑赢了这局!')
else:
    print('这是不可能的一种—————结果—————')

判断输赢逻辑优化:


上面的这种方式固然可以实现,并且也一目了然,但是总感觉很冗余,善于思考的小伙伴应该也会有这种感觉,那么是不是可以优化呢,答案必须是肯定的!优化后示例代码如下:

# 判断胜负
if user_choice == computer_choice:  # 使用if进行条件判断
    print('平局!')
elif (user_choice == '石头' and computer_choice == '剪刀') or (user_choice == '剪刀' and computer_choice == '布') or (user_choice == '布' and computer_choice == '石头'):
    print('你赢了!')
else:
    print('你输了!')

具体实现


使用Python编写石头剪刀布小游戏的步骤如下:


引入random模块:


在代码的开头,使用import random来引入Python的random模块,这样我们就可以在游戏中随机选择计算机的选项。

import random

验证用户输入:


使用一个循环,让用户输入他们的选择,并进行验证。如果用户输入的不是石头、剪刀或布,给出相应的错误提示并重新要求输入。

user_choice = ''
user_choice = input('请出拳:(石头、剪刀、布)')  # 请用户输入选择
while user_choice not in punches:  # 当用户输入错误,提示错误,重新输入
    print('输入有误,请重新出拳')
    user_choice = input()

计算机随机选择:


使用random.choice(options)从选项列表中随机选择计算机的选项。

punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)

判断胜负关系:


根据游戏规则,通过比较玩家和计算机的选择,判断胜负关系,并输出对应的结果。

if user_choice == computer_choice:  # 使用if进行条件判断
    print('平局!')
elif (user_choice == '石头' and computer_choice == '剪刀') or (user_choice == '剪刀' and computer_choice == '布') or (user_choice == '布' and computer_choice == '石头'):
    print('你赢了!')
else:
    print('你输了!')

完整代码


以下是完整的Python代码示例:

import random
options = ["石头", "剪刀", "布"]
while True:
    player_choice = input("请出拳(石头/剪刀/布):")
    if player_choice not in options:
        print("请输入有效的选择!")
        continue
    computer_choice = random.choice(options)
    print("玩家选择:" + player_choice)
    print("计算机选择:" + computer_choice)
    if player_choice == computer_choice:
        print("平局!")
    elif (player_choice == "石头" and computer_choice == "剪刀") or 
         (player_choice == "剪刀" and computer_choice == "布") or 
         (player_choice == "布" and computer_choice == "石头"):
        print("玩家获胜!")
    else:
        print("计算机获胜!")
    break

运行示例


以下是一些示例输入和输出:

请出拳(石头/剪刀/布):石头
玩家选择:石头
计算机选择:剪刀
玩家获胜!
请出拳(石头/剪刀/布):剪刀
玩家选择:剪刀
计算机选择:布
玩家获胜!
请出拳(石头/剪刀/布):布
玩家选择:布
计算机选择:石头
玩家获胜

总结


通过本文,我们学习了如何使用Python编写石头剪刀布小游戏。我们引入了random模块来实现计算机的随机选择,并根据游戏规则判断了胜负关系。这个小游戏的实现过程并不复杂,同时也给了我们扩展和改进代码的空间。


在实际生活中玩这个游戏的时候,可能是一局定胜负,也有可能是三局两胜、五局三胜、七局四胜…


如果考虑把这种情况也实现进入,代码应该是什么样的呢,下面给出更加高级的一版完整代码,基础比较扎实的小伙伴们可以参详一下,对功能增长很有帮助~

import random
import time
pool=['石头','剪刀','布']
#creatChoice函数用来生成AI的出拳结果和玩家的出拳结果
def creatChoice ():
    AI=random.choice(pool)
    player=''
    while player not in pool:
        player=input('请出拳:(选择石头、剪刀、布)')
    print('玩家出拳为:'+player)
    print('AI出拳为:'+AI)
    return AI,player
#fighting函数是单局战斗结果的计算
def fighting (AI,player):
    if AI==player:
        print('平局')
        return 0
    elif pool.index(AI)-pool.index(player)==-1:
        print('AI赢')
        return -1
    else:
        print('玩家赢')
        return 1
#print(fighting('剪刀','石头'))
#统计胜利次数函数(参数为游戏总局数)
def fightCount (sumnum):
    result=0
    for i in range(sumnum):
        print('      -----第{}次猜拳-----'.format(i+1))
        a,b=creatChoice()
#        fighting(a,b)
        result+=fighting(a,b)
        time.sleep(1.5)
    print('-------------最终结果--------------')
    if result<0:
        print('AI获胜,多赢了{}次'.format(abs(result)))
    elif result>0:
        print('玩家获胜,多赢了{}次'.format(result))
    else:
        print('竟然是平局,玩家和AI各赢了{}次'.format(result))
#config函数是让用户输入猜拳的总局数的
def config ():
    sumnum=int(input('请输入一共要猜拳几次:(请输入整数)'))
    return sumnum
#jixu函数是判断用户是否继续玩
def jixu():
    flag=False
    choice=input('输入 y 继续游戏,其他任意键退出游戏')
    if choice=='y'or choice=='Y':
        flag=True
    else:
        flag=False
    return flag        
def main():
    print('---------------游戏开始--------------')
    gamecount=config()
    fightCount(gamecount)
    while jixu():
        gamecount=config()
        fightCount(gamecount)
    else:
        print('------游戏结束,欢迎下次再来玩-----')
main()

结语


请尝试运行这个小游戏,并自己进行举一反三进行修改应用。通过这个过程,你可以更好地理解Python编程语言,并提高自己的编程技能。


如果你想深入学习Python,请关注我的博客,跟着大师兄不迷路,带你在编程之路上取得更多的成功!

相关文章
|
8天前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
5天前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
147 67
|
12天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
25 3
|
16天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
27 2
|
1天前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
5 0
|
1月前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
55 18
|
1月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
70 8
|
1月前
|
Python
Python中的函数
Python中的函数
49 8
|
2月前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####