从Scratch到Python 15 石头剪刀布

石头剪刀布这个小游戏我们在学习Scratch的时候已经写过了,这次我们用Python来实现它,并复习前面学习的Python知识。

程序分析

石头剪刀布游戏的规则很简单,其实就是两个变量的比较和判断问题,其中一个变量从计算机从“石头”、“剪刀”、”布“中随机挑选的,另一个是玩家挑选的,因此我们可以想到,把”石头“、”剪刀“、”布“放到一个列表中,计算机可以使用前面我们学习的random库提供的choice方法从中随机选一个,再提示玩家输入石头、剪刀、布中的一个,那如果玩家输入的不是这三个选项当中的一个呢?就提示重新输入,然后对两个变量进行判断就可以了。

第一个版本的程序

我们按照刚才分析的逻辑把程序写出来:

import random

# 出拳
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
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 == '石头'):
    print('你赢了!')
else:
    print('你输了!')

简化的方法

在上面的程序中,最后的判断特别长,即(user_choice == '石头' and computer_choice == '剪刀') or (user_choice == '剪刀' and computer_choice == '布') or (user_choice == '布' and computer_choice == '石头')这个条件。我们能否想办法把它简化一下呢?

请仔细观察 ['石头','剪刀','布']这个列表,你会发现前一个正好克制后一个。也就是如果我的选择在列表中的索引比计算机小一,我就会胜利。比如我计算机出剪刀,剪刀在列表中的索引是1,我出石头,在列表中索引是0,正好克制剪刀。你可能会说不对啊,石头的索引是0,布的索引是2,虽然布克制石头,但石头的前一项不等于是布的索引2呀。是的,但你可能忘记了,列表是可以倒序索引的。石头的索引是0,用0-1得到-1,正好是布的索引!是不是很奇妙!

所以,我们在判断的时候,只要把计算机选择项的索引减一,以此为索引找出列表项,如果正好等于玩家的选择,那就是玩家胜利了。

代码如下:

import random

# 出拳
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
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('平局!')
# 电脑的选择有3种,索引位置分别是:0石头、1剪刀、2布。
# 假设在电脑索引位置上减1,对应:-1布,0石头,1剪刀,皆胜。
elif user_choice == punches[punches.index(computer_choice)-1]:
    print('你赢了!')
else:
    print('你输了!')

总结

通过这个小游戏的制作,你复习了分支和循环的使用、random库的使用以及如何巧妙地利用列表索引来判断胜负。在Python中还存在许多像这样的小技巧,你可以在以后的学习中留心记忆,有时候会起到事半功倍的效果。

给TA赞助
共{{data.count}}人
人已赞助
综合资讯

从Scratch到Python 14 文件读写

2023-6-5 10:44:00

综合资讯

从Scratch到Python 16 小游戏:逃离僵尸岛

2023-6-5 10:52:26

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索