最近看了这篇知乎文章,深受启发:
Python之石头剪刀布小游戏(史上最详细步骤) - 真小凡的文章 - 知乎
Python中实现剪刀石头布游戏的方式有很多种,这个博主允许直接输入石头、剪刀、布,执行起来丝滑许多。但目前一局定胜负、三局两胜、五局三胜都是固定的游戏模式,我想加入一个功能,允许用户自行选择游戏局数。
所以,我这篇文章直接在博主的基础上扩充啦!
1、输入总局数,只能为奇数。若输入的不是奇数,就提示重新输入。
获胜规则:
(1)石头打赢剪刀,剪刀打赢布,布打赢石头;
(2)每一轮电脑随机出拳
(3)【新增】若用户或者电脑获胜次数>总局数/2的整数部分,如,总局数为5,则单方获胜次数>2时游戏结束;
(4)【新增】若所有局都正常结束,则在结束以后根据胜负次数判断最终输赢。
2、出拳阶段
3、亮拳阶段
4、本局胜负判定
5、【新增】游戏最终胜负判定
6、【新增】每一次游戏结束后,都可以选择再玩一次
import random
N=5
# 剪刀石头布
punches = ['石头','剪刀','布']
user_choice = ''
computer_choice = ''
win = 0
lose = 0
mode = 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 +1
print('这一局你赢了!玩家积分:%d VS 系统积分:%d' % (win, lose))
else:
# 若要指定游戏模式,就要累计输赢次数
lose = lose +1
print('这一局你输了!玩家积分:%d VS 系统积分:%d' % (win, lose))
# 若输赢次数已经超过一半,已经分出胜负,循环要提前结束
if win > mode//2:
break
elif 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_mode
def 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_choice
def 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 + 1
print('这一局你赢了!玩家积分:%d VS 系统积分:%d' % (win_time, lose_time))
else:
lose_time = lose_time + 1
print('这一局你输了!玩家积分:%d VS 系统积分:%d' % (win_time, lose_time))
return win_time, lose_time
my_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:
break
elif lose > my_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_mode
def 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_choice
def 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 + 1
print('这一局你赢了!玩家积分:%d VS 系统积分:%d' % (win_time, lose_time))
else:
lose_time = lose_time + 1
print('这一局你输了!玩家积分:%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 = 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:
break
elif lose > my_mode // 2:
break
if 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=0
print('游戏结束!')
else:
print('输入错误,游戏结束!')
新手学习,如有疏漏,欢迎指正!