社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python写个“点球大战”小游戏

Crossin的编程教室 • 3 年前 • 402 次点击  

零基础python入门教程:python666.cn


大家好,欢迎来到 Crossin的编程教室 !


看过我Python入门教程的朋友应该会看到其中有提到一个点球小游戏的作业。(参考:“罚点球”小游戏


在世界杯决赛即将到来之际,我们再来回顾一下这个小游戏。对于刚刚学习编程不久的同学,这是个不错的练手习题,可以尝试自己写一写。


先说下题目:


首先这个游戏的核心,就是判断玩家和电脑选择的方向是不是一样。


玩家的选择通过input输入获取,电脑的选择我们可以用random随机数模块来产生


要注意的点在于两种结果的类型要一致,不然怎么比都是不相等。


import random
you = int(input('玩家罚球,请选择射门方向 (1)左 (2)中 (3)右:'))com = random.randint(1, 3)print('电脑选择了', com)if you != com: print('球进了!')else:    print('球没进')


每一轮,玩家踢完电脑踢,所以这段代码要再来一遍。或者我们可以借助于列表和循环来复用代码。


import random
kicker = ['玩家', '电脑']action = ['射门', '扑救']
for i in range(2): you = int(input(f'{kicker[i]}罚球,请玩家选择{action[i]}方向 (1)左 (2)中 (3)右:')) com = random.randint(1, 3) print('电脑选择了', com) if you != com: print('球进了!') else: print('球没进')

踢5轮就是在外面加一层5次的循环。


可以选择把这段代码封装成函数,让代码结构更清晰。


另外,再记录一下分数。同样是用一个列表变量来记录双方的得分,谁踢进了,就给谁加1分。


import random
kicker = ['玩家', '电脑']action = ['射门', '扑救']score = [0, 0]
def kick(): for i in range(2): you = int(input(f'{kicker[i]}罚球,请玩家选择{action[i]}方向 (1)左 (2)中 (3)右:')) com = random.randint(1, 3) print('电脑选择了', com) if you != com: print('球进了!') score[i] += 1 else: print('球没进') print(f'比分 {score[0]} : {score[1]}')
for n in range(5): print(f'======== 第{n+1}轮 ========')    kick()


对于5轮踢完是平局的情况处理,可以再加个while循环,只要双方分数相等,就继续踢下去。


不过既然用了while,前面的for也可以省掉了,只要在条件里增加对轮数的判断就好了。


n = 0while n < 5 or score[0


    
] == score[1]:    n += 1    print(f'======== 第{n}轮 ========')    kick()


点球大战可以提前结束,条件是领先的一方后面不进球,而落后一方全踢进也追不上比分。


换句话说就是:一方领先的分数要超过另一方剩余的机会。


那么我们就再增加一个列表,记录双方剩余的机会数,开始都是5,每当一方踢完一球,不管进不进,机会都要减1。


并且判断一下,是不是存在一方的分数,比另一方的分数加上机会数还要大,如果是,那就直接结束函数返回True,表示比赛提前结束了。


在调用函数的循环里,判断一下函数的返回值,如果是True,就break跳出循环结束比赛。


import random
kicker = ['玩家', '电脑']action = ['射门', '扑救']score = [0, 0]chance = [5, 5]
def kick(): for i in range(2): you = int(input(f'{kicker[i]}罚球,请玩家选择{action[i]}方向 (1)左 (2)中 (3)右:')) com = random.randint(1, 3) print('电脑选择了', com) if you != com: print('球进了!') score[i] += 1 else: print('球没进') print(f'比分 {score[0]} : {score[1]}')
if chance[i] > 0: chance[i] -= 1 j = 1 - i # 获取对手的index if (score[i] > score[j] + chance[j]) or ( score[j] > score[i] + chance[i]): return True return Falsen = 0while n < 5 or score[0] == score[1]: n += 1 print(f'======== 第{n}轮 ========') if kick(): break
if score[0] > score[1]: print('你赢啦!')else:    print('你输了')


如此,一共30多行代码就可以搞定这个小游戏了。


如果你尚处于初学阶段,无法一下子写出很精简的代码,那也没关系,先把功能实现,再逐步优化调整。可以先从简单的功能写起,比如不考虑提前结束的情况。


完成比完美更重要。


感谢转发点赞的各位~

_往期文章推荐_

ChatGPT被玩坏了




如需了解付费精品课程教学答疑服务
请在Crossin的编程教室内回复: 666


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/150561