十二课Python不同数据类型的拼接方式,使用【格式符%】来处理 不过它还没有全部解决:打印出每局结果,三局两胜打印最终战果。这就是版本3.0需要做的事情。

打印战果,三局两胜。


对比2.0版本,在3.0版本中,我们想要增加的功能是:1、打印战果:每局战斗后,根据胜负平的结果打印出不同的提示。2、三局两胜:双方战斗三局,胜局多的为最终赢家。


回来看项目,当小鱼儿与花无缺PK的时候,血量都会开始递减,经过多次攻击,会出现如下结果。


来,增加这次战局结果的判定。


是不是好多了。现在只剩下最后一步,三局两胜。


三局两胜,怎么办?


双方3局2胜,得记录胜负的结果,那我们引入一个变量,来记录胜负得分结果,最后进行判断,输出战果。

开始带大家完成第一步,3局比赛。

双方要战3局, 也就是循环一局比赛三次,我们一局的比赛已经写完,这就是循环体,循环3次,使用for循环。

来,看代码:

import time
import random
#也可合并写成一行:import time,random
for i in range(1,4):
time.sleep(1) # 让局与局之间有较明显的有时间间隔
print(' \n——————现在进行第'+str(i)+'局,3,2,1,go!——————') # 作为局的标记
# 生成随机属性
freeLi_life = random.randint(100,150) # “freeLi_life” 代表花无缺血量
freeLi_attack = random.randint(20,30) # “freeLi_attack” 代表花无缺攻击BOSS_life = random.randint(100,150) # “BOSS_life” 代表小鱼儿血量
BOSS_attack = random.randint(20,30) # “BOSS_attack” 代表小鱼儿攻击# 展示双方角色的属性
print('【花无缺】\n'+'血量:'+str(freeLi_life)+'\n攻击:'+str(freeLi_attack))#freeLi_life和freeLi_attack的数据类型都是整数,所以拼接时需要先用str()转换
print('------------------------')
time.sleep(1)
#暂停一秒再执行后续代码
print('【小鱼儿】\n'+'血量:'+str(BOSS_life)+'\n攻击:'+str(BOSS_attack))print('------------------------')
# 自动PK阶段
while(freeLi_life>0) and (BOSS_life>0):
freeLi_life = freeLi_life - BOSS_attack
BOSS_life = BOSS_life - freeLi_attack
print('花无缺发起了攻击,【小鱼儿】剩余血量'+str(BOSS_life))#freeLi_life是整数,所以拼接时要先用str()转换
print('小鱼儿向花无缺发起了攻击,【花无缺】剩余血量'+str(freeLi_life))print('------------------------')
time.sleep(2)
# 为了体现出战斗回合,这里停顿2秒
# 打印战果
if freeLi_life > 0 and BOSS_life <= 0:
print('小鱼儿挂了,花无缺赢了')
elif freeLi_life <= 0 and BOSS_life > 0:
print('悲催,小鱼儿把花无缺遥干掉了!')
else:
print('哎呀,花无缺和小鱼儿同归于尽了!')


好了,三局比赛的效果已经完成, 现在只差“统计三局两胜”的结果了。
我们想想,平时比赛如何记录比赛结果呢?

使用积分牌啊,只要赢一局,就增加得分+1,最后比较双方得分大小。
既然记录得分,我们首先要给计算机制定“计分牌”, 用于存放【李逍遥】和【拜月教主】的每一局得分。
freeLi_score = 0存放花无缺赢的局数。
BOSS_score = 0存放小鱼儿赢的局数。
那么,在什么情况下得分才会+1呢??当然是每一局比完之后,我们去增加得分。
if freeLi_life > 0 and BOSS_life <= 0:
freeLi_score=freeLi_score+1
print('小鱼儿挂了,无缺赢了')
elif freeLi_life <= 0 and BOSS_life > 0:
BOSS_score = BOSS_score +1
print('悲催,小鱼儿把无缺赢干掉了!')
else:
print('哎呀,无缺和小鱼儿同归于尽了!')

然后,我们将小鱼儿和花无缺各自赢得局数算出来。

最后,再做一次判断,比较一下李逍遥赢得局数和拜月教主赢得局数。


也就是


看到上面分析情况,需要注意得是,因为你是最后需要判断三局两胜的结果,你就需要把最终结果的判断放在for循环的外面,不要缩进。


终于做完项目了。做完人生中的第一个Python项目,开心不?

为自己鼓掌,仅仅不到50行的代码,完成了小鱼儿大花无缺游戏,感觉Python是不是很简单?

还是那一句,人生苦短,我用Python!

好了,项目已经做完了,但还是要追求尽善尽美。有个地方需要【格式化字符串】

What?什么叫格式化字符串?

在上面代码中,双方角色属性的地方:

print('【花无缺】\n'+'血量:'+str(freeLi_life)+'\n攻击:'+str(freeLi_attack))

print('【小鱼儿】\n'+'血量:'+str(BOSS_life)+'\n攻击:'+str(BOSS_attack))

在这里,我们使用【+】拼接字符串和变量的时候,常常要考虑变量是什么类型的数据,如果不是字符串类型的,还要先使用str()函数转换,然后再拼接。 这里才有两个变量,就使用【‘’】开始包裹拼接,好麻烦。

Python为我们提供了一种不同数据类型的拼接方式,使用【格式符%】来处理。


如上图,我们看到格式符%后面有一个字母,这个字母用来控制数据显示的。【%s】就是占住这个位置,将变量转换成字符串。

那么我们项目中的代码就可以改成:

print('【花无缺】\n血量:%s\n攻击力:%s' %( freeLi_life, freeLi_attack))print('【小鱼儿】\n血量:%s\n攻击力:%s' %(BOSS_life, BOSS_attack))

看一下,是不是代码更好读了。

运行一下替换后的代码,观察终端里的效果。


码结构是不是很清爽? perfect,完美结束。

湖秘籍:【%】后面的类型码用什么,取决于你希望这个【%】占住的这个位置的数据以什么类型展示出来,如果你希望它以字符串形式展示,那就写【%s】,如果你希望它以整数形式展示,那就写【%d】。