大家好,欢迎来到Crossin的编程课堂!看过我的Python入门教程的朋友应该看到里面提到了一个penaltygame。随着世界杯决赛的临近,让我们再次回顾一下这场小比赛。对于刚学编程的同学来说,这是一个很好的练习题,可以自己尝试写一下。https://www.bilibili.com/video...先说正题:首先这个游戏的核心是判断玩家和电脑选择的方向是否一致。玩家的选择通过输入获得,计算机的选择可以使用随机数模块生成。需要注意的一点是,两个结果的类型一定要一致,否则无论如何都是不相等的。importrandomyou=int(input('球员罚球,请选择投篮方向(1)左(2)中(3)右:'))com=random.randint(1,3)print('电脑选择',com)ifyou!=com:print('球进了!')else:print('球没进')每一轮,玩家踢完后踢电脑,所以这段代码必须是重复。或者我们可以在列表和循环的帮助下重用代码。importrandomkicker=['player','computer']action=['shoot','save']foriinrange(2):you=int(input(f'{kicker[i]}罚球,请选择玩家{action[i]}方向(1)left(2)middle(3)right:'))com=random.randint(1,3)print('computerselected',com)ifyou!=com:print('球进了!')else:print('球没进')打5轮就是在循环外加一层5次。你可以选择将这段代码封装成一个函数,让代码结构更加清晰。另外,再次记录分数。同样用一个列表变量记录双方的得分,谁得分谁就得1分。importrandomkicker=['player','computer']action=['shoot','save']score=[0,0]defkick():foriinrange(2):you=int(input(f'{kicker[i]}罚球,请选择{action[i]}方向(1)左(2)中(3)右:'))com=random.randint(1,3)print('电脑选择了',com)ifyou!=com:print('Goalscored!')score[i]+=1else:print('Noballscored')print(f'score{score[0]}:{score[1]}')forninrange(5):print(f'========{n+1}round========')kick()for5rounds处理对于开球后平局的情况,可以加一个while循环,只要双方得分相等,就继续开球。但是既然用了while,那么前面的for也可以省略,只要在条件中加上轮数的判断即可。n=0whilen<5orscore[0]==score[1]:n+=1print(f'========{n}round========')kick()点球大战可以提前结束,前提是领先的一方不落后,落后的一方全进球不能追上比分。换句话说:一方领先的分数超过了另一方剩余的机会。然后我们再添加一个列表,记录双方剩余的机会。一开始是5,每当一方踢完一个球,不管有没有得分,机会都减1,判断是否有一方的得分大于对方的得分对方加的次数。如果是,那么end函数直接返回True,说明游戏提前结束了。在调用函数的循环中,判断函数的返回值,如果为True则跳出循环结束游戏。importrandomkicker=['player','computer']action=['shoot','save']score=[0,0]chance=[5,5]defkick():foriinrange(2):you=int(input(f'{kicker[i]}罚球,请选择{action[i]}方向(1)左(2)中(3)右:'))com=random.randint(1,3)print('电脑已经选择',com)ifyou!=com:print('球进了!')score[i]+=1else:print('球没有进')print(f'score{score[0]}:{score[1]}')ifchance[i]>0:chance[i]-=1j=1-i#获取对手的索引if(score[i]>score[j]+chance[j])or(score[j]>score[i]+chance[i]):returnTruereturnFalsen=0whilen<5orscore[0]==score[1]:n+=1print(f'========{n}round========')ifkick():breakifscore[0]>score[1]:print('你赢了!')else:print('你输了')这样一共30多行代码就可以搞定这个小游戏了。如果你还处于初级阶段,一下子写不出非常精简的代码,没关系,先实现功能,再逐步优化调整。可以从简单的功能入手,比如不考虑提前终止的情况。完成比完美更重要。感谢大家的转发和点赞~
