Bootstrap

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

引言

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

游戏规则

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

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

练习目标

这个虽然是一个小游戏,但是具体实现起来做法有很多汇总,那咱们就先按照最简单的方式来实现,力求能掌握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

创建选项列表:

创建一个包含石头、剪刀和布的列表,例如:options = [“石头”, “剪刀”, “布”]。

punches = ['石头','剪刀','布']

验证用户输入:

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

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

;