前言

最近看了这篇知乎文章,深受启发:
Python之石头剪刀布小游戏(史上最详细步骤) - 真小凡的文章 - 知乎

Python中实现剪刀石头布游戏的方式有很多种,这个博主允许直接输入石头、剪刀、布,执行起来丝滑许多。但目前一局定胜负、三局两胜、五局三胜都是固定的游戏模式,我想加入一个功能,允许用户自行选择游戏局数。

所以,我这篇文章直接在博主的基础上扩充啦!

一、游戏模式说明

1、输入总局数,只能为奇数。若输入的不是奇数,就提示重新输入。
获胜规则:
(1)石头打赢剪刀,剪刀打赢布,布打赢石头;
(2)每一轮电脑随机出拳
(3)【新增】若用户或者电脑获胜次数>总局数/2的整数部分,如,总局数为5,则单方获胜次数>2时游戏结束;
(4)【新增】若所有局都正常结束,则在结束以后根据胜负次数判断最终输赢。
2、出拳阶段
3、亮拳阶段
4、本局胜负判定
5、【新增】游戏最终胜负判定
6、【新增】每一次游戏结束后,都可以选择再玩一次

二、加M局N胜制——参考代码

import random
N=5
# 剪刀石头布
punches = ['石头','剪刀','布']
user_choice = ''
computer_choice = ''
win = 0
lose = 0mode = int(input("这是一个猜拳游戏,请输入总局数,要求必须是奇数:"))
# 这里只允许输入正整数和奇数,不限制次数上限
while mode<0 or mode%2==0:print("输入有误,请重新输入!")mode = input("请输入总局数,要求必须是奇数:")
# //符号为取整,比如输入mode=3,mode/2=1.5,mode//2就是1;若输入mode=5,mode//2就是2,这里标明几局几胜更清楚
print("您选择了%d局%d胜制" % (game_mode, game_mode // 2 + 1))# 这里加入循环,输入几局最多就能玩几局,若中途提前分出胜负则break跳出循环
for i in range(mode):# 出拳computer_choice = random.choice(punches)user_choice = input('请出拳:(石头、剪刀、布)')  # 请用户输入选择while  user_choice not in punches:print('输入有误,请重新出拳')  # 当用户输入错误,提示错误,重新输入user_choice = input()# 亮拳print('————战斗过程————')print('电脑出了:%s' % computer_choice)print('你出了:%s' % user_choice)# 本局胜负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 == '石头'):# 若要指定游戏模式,就要累计输赢次数win = win +1print('这一局你赢了!玩家积分:%d VS 系统积分:%d' % (win, lose))else:# 若要指定游戏模式,就要累计输赢次数lose = lose +1print('这一局你输了!玩家积分:%d VS 系统积分:%d' % (win, lose))# 若输赢次数已经超过一半,已经分出胜负,循环要提前结束if win > mode//2:breakelif lose > mode//2:break# 只有循环结束,才会判定最终结果
if win > lose:print("========最终结果========\n恭喜你赢了!")
elif lose > win:print("========最终结果========\n很遗憾你输了!")
else:print("========最终结果========\n势均力敌,平局!")

三、 改为函数版——参考代码

import random# 剪刀石头布def mode():game_mode = int(input("这是一个猜拳游戏,请输入总局数,要求必须是奇数:"))while game_mode < 0 or game_mode % 2 == 0:print("输入有误,请重新输入!")game_mode = input("请输入总局数,要求必须是奇数:")print("您选择了%d局%d胜制" % (game_mode, game_mode // 2 + 1))return game_modedef punches():punches = ['石头', '剪刀', '布']computer_choice = random.choice(punches)user_choice = input('请出拳:(石头、剪刀、布)')  # 请用户输入选择while user_choice not in punches:print('输入有误,请重新出拳')  # 当用户输入错误,提示错误,重新输入user_choice = input()print('你出了:%s VS 电脑出了:%s' % (user_choice, computer_choice))return user_choice, computer_choicedef judge(user_choice, computer_choice, win_time, lose_time):# 本局胜负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 == '石头'):win_time = win_time + 1print('这一局你赢了!玩家积分:%d VS 系统积分:%d' % (win_time, lose_time))else:lose_time = lose_time + 1print('这一局你输了!玩家积分:%d VS 系统积分:%d' % (win_time, lose_time))return win_time, lose_timemy_mode = mode()
lose = 0
win = 0
for i in range(my_mode):# 双方出拳user_choice, computer_choice = punches()win, lose = judge(user_choice, computer_choice, win, lose)# 提前终止if win > my_mode // 2:breakelif lose > my_mode // 2:breakif win > lose:print("—————最终结果—————\n恭喜你赢了!")
elif lose > win:print("—————最终结果—————\n很遗憾你输了!")
else:print("—————最终结果—————\n势均力敌,平局!")

四、加入“是否下一轮”逻辑

import random# 剪刀石头布def mode():game_mode = int(input("这是一个猜拳游戏,请输入总局数,要求必须是奇数:"))while game_mode < 0 or game_mode % 2 == 0:print("输入有误,请重新输入!")game_mode = input("请输入总局数,要求必须是奇数:")print("您选择了%d局%d胜制" % (game_mode, game_mode // 2 + 1))return game_modedef punches():punches = ['石头', '剪刀', '布']computer_choice = random.choice(punches)user_choice = input('请出拳:(石头、剪刀、布)')  # 请用户输入选择while user_choice not in punches:print('输入有误,请重新出拳')  # 当用户输入错误,提示错误,重新输入user_choice = input()print('你出了:%s VS 电脑出了:%s' % (user_choice, computer_choice))return user_choice, computer_choicedef judge(user_choice, computer_choice, win_time, lose_time):# 本局胜负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 == '石头'):win_time = win_time + 1print('这一局你赢了!玩家积分:%d VS 系统积分:%d' % (win_time, lose_time))else:lose_time = lose_time + 1print('这一局你输了!玩家积分:%d VS 系统积分:%d' % (win_time, lose_time))return win_time, lose_time# 在最前面立个flag,设为1,再加个循环,只要flag为1,就进行游戏,这样的话,只要你不强行改动flag的值,while循环中的内容就会一直执行下去。
flag=1
while flag==1:my_mode = mode()lose = 0win = 0for i in range(my_mode):# 双方出拳user_choice, computer_choice = punches()win, lose = judge(user_choice, computer_choice, win, lose)# 提前终止if win > my_mode // 2:breakelif lose > my_mode // 2:breakif win > lose:print("—————最终结果—————\n恭喜你赢了!")elif lose > win:print("—————最终结果—————\n很遗憾你输了!")else:print("—————最终结果—————\n势均力敌,平局!")# 以下为控制是否下一轮的代码,这里只接受Y和N两种输入方式next_game=input("是否进行下一轮?Y/N\n")if next_game == 'Y':print('新一轮游戏开始啦!\n———————————————')elif next_game == 'N':flag=0print('游戏结束!')else:print('输入错误,游戏结束!')

五、更正

  • 在加是否下一轮逻辑的时候,出现了一个问题TypeError: ‘int’ object is not callable
    百度了一下,说是变量名和函数名冲撞了,因此原代码中的变量mode我改名为my_mode,就可以了。
    这里不能也叫game_mode,原则上函数内部的变量名和也要有唯一性,才符合规范。

新手学习,如有疏漏,欢迎指正!

Python趣味案例——剪刀石头布小游戏改进版(自由实现三局两胜五局三胜七局四胜。。。)相关推荐

  1. python实现剪刀石头布_用Python Tkinter实现剪刀石头布小游戏的方法

    用Python Tkinter实现剪刀石头布小游戏的方法 发布时间:2020-12-07 10:38:11 来源:亿速云 阅读:90 作者:小新 这篇文章将为大家详细讲解有关用Python Tkint ...

  2. 如何用Python Tkinter实现剪刀石头布小游戏?

    编写剪刀石头布游戏 让我们使用Python 3和Tkinter开发相同的游戏.我们可以将游戏命名为Rock-Paper-Scissors-Lizard-Spock. 规则和玩法 Rock crushe ...

  3. Python实现人机交互剪刀石头布小游戏(七局四胜制)

    1.游戏要求 # 实现人机对战石头剪刀布 # 需求:实现用户登录并可以定义用户昵称 # 可以选择对战英雄 # 实现石头剪刀布对决(七局四胜制) # 实现遇到恶意用户警告处理或者强制退出 # 要求打印最 ...

  4. python简单实现剪刀石头布小游戏

    源码: python3: import randomname = 'player' hero_name = '' #hero's name ren_win = 0 com_win = 0 pk_sum ...

  5. python剪刀石头布小游戏源码下载_Python Tkinter实现剪刀石头布小游戏

    Python Tkinter实现剪刀石头布小游戏 发布时间:2020-10-26 14:56:52 来源:亿速云 阅读:67 作者:Leah 本篇文章给大家分享的是有关Python Tkinter实现 ...

  6. python人机猜拳游戏_Python实现剪刀石头布小游戏(与电脑对战)

    具体代码如下所述: srpgame.py #!/urs/bin/env python import random all_choice = ['石头','剪刀','布'] win_list = [[' ...

  7. 手把手教你用Python做个可视化的“剪刀石头布”小游戏

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 众里寻他千百度.蓦然回首,那人却在 ...

  8. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...

    /1 前言/ 最近在学习PyQt5可视化界面,这是一个内容非常丰富的gui库,相对于tkinter库,功能更加强大,界面更加美观,操作也不难.于是我开始小试牛刀,用PyQt5做个可视化的"剪 ...

  9. python剪刀石头布程序_使用Python Tkinter实现剪刀石头布小游戏功能

    编写剪刀石头布游戏 让我们使用Python 3和Tkinter开发相同的游戏.我们可以将游戏命名为Rock-Paper-Scissors-Lizard-Spock. 规则和玩法 ock crushes ...

最新文章

  1. go语言复数包_Go语言中包的风格指南
  2. Python-爬取2345电影并写入文件
  3. eclipse创建Maven的动态web工程
  4. java plug机制_【maven实战】20-插件解析机制
  5. php 扩展 返回字符串,PHP扩展函数返回字符串一定需要使用spprintf吗?
  6. 游戏理论研究四:RPG游戏
  7. pandas多行合并一行_Pandas函数妙用
  8. 身份证验证TW WordPress
  9. javascript-----日历控件
  10. JS 解决IE浏览器出现Automation 服务器不能创建对象
  11. html中引号的作用,引号的作用是什么
  12. 统计机器学习相关性分析
  13. 增量式编码器 绝对值编码器
  14. Java环境下运行fastqc_在Ubuntu上安装FastQC
  15. 【科软课程-信息安全】Lab12 SQL Injection Attack
  16. 收藏的软件测试学习资源
  17. 光武1号守卫盾,一款让优秀非凡的重疾产品【保通保险】
  18. 检讨书应该怎么写,我来做个示范
  19. 前端项目 - 博客系统(纯页面)
  20. Verilog HDL 硬件描述语言基础

热门文章

  1. 影响世界的大事情:2018年11月16日BCH/BSV算力战
  2. ubuntu输入法篇
  3. springboot+uniapp商城源码
  4. 部分业务系统英文缩写及释义
  5. 电信禁止路由上网的破解方法
  6. 测试经理的职责,管理岗位
  7. maven 的 pom 文件与打包详解
  8. 01-Linux设备树系列-基本语法
  9. tpg色卡查询_PANTONE潘通TPG色卡是家居+纺织色彩指南 (原TPX新版)_FHIP100 _ 深圳千通彩色彩管理有限公司...
  10. 软件工程作业六:了解JAVA反射机制