Python编写石头剪刀布小游戏

3.1 问题

编写game.py脚本,实现以下目标:

  1. 计算机随机出拳
  2. 玩家自己决定如何出拳
  3. 代码尽量简化

3.2 方案

引用random模块生成0-2的随机数,提示并获取用户的整数输入值,应用if扩展语句对随机数与输入值进行对比判断,满足指定条件,输出结果

为简化代码,玩家获胜条件中用and和or两个逻辑运算符进行多个条件内容的判断,用括号来区分运算优先级,所以用户获胜条件为以下3项中任意一项:

1.用户输入剪刀并且随机数是布

2.用户输入石头并且随机数是剪刀

3.用户输入布并且随机数是石头

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:编写脚本


[root@localhost day02]# vim game.py
#!/usr/bin/env python3

import random

#1. 提示并获取用户的输入
player = int(input("请输入 0剪刀 1石头 2布:"))

#2. 让电脑出一个随机数
computer = random.randint(0,2)

#3. 判断用户的输入,然后显示对应的结果
#if 玩家获胜的条件:
if (player==0 and computer==2) or (player==1 and computer==0) or (player==2 and computer==1):
print("赢了,,,,可以去买奶粉了.....")
#elif 玩家平局的条件:
elif player==computer:
print("平局了,,,洗洗手决战到天亮....")
else:
print("输了,,,回家拿钱 再来....")

或将上面的代码改为以下写法:

引用random模块choice方法随机生成‘石头’、‘剪刀’、‘布’中任意一项,提示并获取用户的输入字符,应用if扩展语句对随机数与输入值进行对比判断,满足指定条件,输出结果问题结果


import random

computer = random.choice(['石头', '剪刀', '布'])
player = input('请出拳(石头/剪刀/布):')

# print('您出了:', player, '计算机出的是:', computer)
print('您出了: %s, 计算机出的是: %s' % (player, computer))
if player == '石头':
if computer == '石头':
print('平局')
elif computer == '剪刀':
print('You WIN!!!')
else:
print('You LOSE!!!')
elif player == '剪刀':
if computer == '石头':
print('You LOSE!!!')
elif computer == '剪刀':
print('平局')
else:
print('You WIN!!!')
else:
if computer == '石头':
print('You WIN!!!')
elif computer == '剪刀':
print('You LOSE!!!')
else:
print('平局')

步骤二:测试脚本执行


[root@localhost day02]# python3 game.py
请输入 0剪刀 1石头 2布:1
平局了,,,洗洗手决战到天亮....
[root@localhost day02]# python3 game.py
请输入 0剪刀 1石头 2布:0
赢了,,,,可以去买奶粉了.....
[root@localhost day02]# python3 game.py
请输入 0剪刀 1石头 2布:2
平局了,,,洗洗手决战到天亮....
[root@localhost day02]# python3 game.py
请输入 0剪刀 1石头 2布:1
赢了,,,,可以去买奶粉了.....
[root@localhost day02]# python3 game.py
请输入 0剪刀 1石头 2布:1
输了,,,回家拿钱 再来....
[root@localhost day02]# python3 game.py
请出拳(石头/剪刀/布):石头
您出了: 石头, 计算机出的是: 石头
平局
[root@localhost day02]# python3 game.py
请出拳(石头/剪刀/布):剪刀
您出了: 剪刀, 计算机出的是: 剪刀
平局
[root@localhost day02]# python3 game.py
请出拳(石头/剪刀/布):布
您出了: 布, 计算机出的是: 剪刀
You LOSE!!!
[root@localhost day02]# python3 game.py
请出拳(石头/剪刀/布):石头
您出了: 石头, 计算机出的是: 剪刀
You WIN!!!

步骤三:改进脚本

执行代码后,在终端显示中,根据提示输入‘石头、剪刀、布’对应数值,通过列表切片获取用户输入字符,引用random模块choice方法电脑随机生成‘石头’、‘剪刀’、‘布’中任意一项字符,将可赢组合放入列表中,如果随机生成电脑值与用户获取字符在可赢列表中,则为可赢组合,输出‘you win’,否则,输出‘you lose’


import random

all_choices = ['石头', '剪刀', '布']
win_list = [['石头', '剪刀'], ['剪刀', '布'], ['布', '石头']]
prompt = '''(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):'''
computer = random.choice(all_choices)
ind = int(input(prompt))
player = all_choices[ind]

print('您出了: %s, 计算机出的是: %s' % (player, computer))
if player == computer:
print('\033[32;1m平局\033[0m')
elif [player, computer] in win_list:
print('\033[31;1mYou WIN!!!\033[0m')
else:
print('\033[31;1mYou LOSE!!!\033[0m')

测试脚本执行:


[root@localhost day02]# python3 game2.py
(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):2
您出了: 布, 计算机出的是: 布
平局
[root@localhost day02]# python3 game2.py
(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):1
您出了: 剪刀, 计算机出的是: 剪刀
平局
[root@localhost day02]# python3 game2.py
(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):0
您出了: 石头, 计算机出的是: 石头
平局
[root@localhost day02]# python3 game2.py
(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):1
您出了: 剪刀, 计算机出的是: 石头
You LOSE!!!
[root@localhost day02]# python3 game2.py
(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):2
您出了: 布, 计算机出的是: 剪刀
You LOSE!!!
[root@localhost day02]# python3 game2.py
(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):1
您出了: 剪刀, 计算机出的是: 石头
You LOSE!!!
[root@localhost day02]# python3 game2.py
(0) 石头
(1) 剪刀
(2) 布
请选择(0/1/2):0
您出了: 石头, 计算机出的是: 剪刀
You WIN!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章