【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,请关注我的博客,跟着大师兄不迷路,带你在编程之路上取得更多的成功!

相关文章
|
1月前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
63 0
|
28天前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
29天前
|
存储 数据安全/隐私保护 索引
|
18天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
20天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
23天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
27 4
|
24天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
18 1
|
30天前
|
索引 Python
Python中的其他内置函数有哪些
【10月更文挑战第12天】Python中的其他内置函数有哪些
15 1
|
24天前
|
安全 数据处理 数据安全/隐私保护
python中mod函数怎么用
通过这些实例,我们不仅掌握了Python中 `%`运算符的基础用法,还领略了它在解决实际问题中的灵活性和实用性。在诸如云计算服务提供商的技术栈中,类似的数学运算逻辑常被应用于数据处理、安全加密等关键领域,凸显了基础运算符在复杂系统中的不可或缺性。
17 0
|
30天前
|
开发者 索引 Python
Python中有哪些内置函数
【10月更文挑战第12天】Python中有哪些内置函数
18 0