1、显示效果
2、功能拆分
3、程序设计
当程序需要同时调用多个函数的话,一个习惯的用法是定义一个主函数main(),将其他函数放在主函数main()内部,起到一种封装的效果。
#第一个函数:打印我喜欢的两个数字
def fav_num(num1,num2):
print('我喜欢的数字是%d,还有%d。' % (num1,num2))
#第二个函数:打印两个这两个数字之和
def add_num(num1,num2):
print('这两个数字相加的和为%d。'% (num1 + num2))
#定义主函数,让我们可以一次性调用两个函数
def main(num1,num2):
fav_num(num1,num2)
add_num(num1,num2)
main(7,9)
main(4,7)
>>>
我喜欢的数字是7,还有9。
这两个数字相加的和为16。
我喜欢的数字是4,还有7。
这两个数字相加的和为11。
版本1.0:封装函数,自定属性
#双方属性,函数式代码
import time
def show_role(player_life,player_attack,enemy_life,enemy_attack):
print('【玩家】\n血量:%s\n攻击:%s'%(player_life,player_attack))
time.sleep(1.5)
print('【敌人】\n血量:%s\n攻击:%s'%(enemy_life,enemy_attack))
#双方PK,函数式代码
def pk_role(player_life,player_attack,enemy_life,enemy_attack):
while (player_life>0)and (enemy_life)>0:
player_life=player_life-enemy_attack
enemy_life=enemy_life-player_attack
print('你发起攻击,【玩家】剩余血量为%s'%player_life)
print('玩家发起攻击,【敌人】剩余血量为'+str(enemy_life))
show_result(player_life,enemy_life)
#函数调用在定义之前也是可以的,与C语言的区别
#打印战果,函数式代码
def show_result(player_life,enemy_life):
if player_life>0 and enemy_life<=0:
print('敌人死翘翘了,这局你赢了')
elif player_life<=0 and enemy_life>0:
print('悲催,这局敌人把你干掉了!')
else:
print('哎呀,这局你和敌人同归于尽了!')
def main(player_life,player_attack,enemy_life,enemy_attack):
show_role(player_life,player_attack,enemy_life,enemy_attack)
pk_role(player_life,player_attack,enemy_life,enemy_attack)
#show_result(player_life,enemy_life)
#这样会始终输出平局,因为player_life和enemy_life的参数是100和105,属于else情况
main(100,35,105,33)
>>>
版本2.0:随机角色,随机属性
目标是:随机生成游戏的不同角色及属性。具体来说,是在一定数量的角色名单里各为双方随机选出3个角色,并为他们随机生成血量值和攻击值。
1、从列表中随机选取多个元素
random.sample(population, k)
其中,population:序列(列表、字符串、元组) k:随机返回的个数
注意:即使k=1,抽到的也是含一个元素的序列
poppulation = [4,5,9,2,1,5,3,0]
import random
random.sample(poppulation,3)
>>>
[3, 2, 5]
2、从列表中随机选取一个元素
random.choice(seq)
其中,seq:序列
poppulation = [4,5,9,2,1,5,3,0]
import random
random.choice(poppulation)
>>>
5
3、Python的函数返回值可以是多个,多个返回值的数类型是元组
思路:另一种存储血量和攻击力的方法,就是将血量和攻击力放在一个列表或者元组里,当成是字典的值,比如说player_info = {’【狂血战士】’: (135,40)}
import random
player = ['狂血战士']
#角色列表,有一个元素
dict1 = {
}
#创建一个字典,存放角色属性信息
def info():
a = random.randint(1,3)
b = random.randint(4,6)
return a,b # return 多个值时,返回一个元组(a,b)
data = info()
#调用info()函数,将返回的元组(a,b)赋值给变量data
print(data)
dict1[player[0]] = data
#往空字典添加键值对,player[0]即'狂血战士'为键,data(元组)为值。
print(dict1)
print(dict1[player[0]]) # 打印出字典的值
print(dict1[player[0]][0]) # 打印出字典的值data的第0个元素
print(dict1[player[0]][1]) # 打印出字典的值data的第1个元素
>>>
(1, 6)
{
'狂血战士': (1, 6)}
(1, 6)
1
6
程序:
import random
player_list=['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
enemys_list=['【暗黑战士】','【黑暗弩手】','【骷髅骑士】','【嗜血刀客】','【首席刺客】','【陷阱之王】']
players=random.sample(player_list,3) #从列表里随机选取三个元素
enemys=random.sample(enemy_list,3)
player_info={
}#字典里最终嵌套元组
enemy_info={
}
# 随机生成角色的属性,并用return语句返回元组
def born_role():
life=random.randint(100,180)
attack=random.randint(30,50)
return life,attack
#用元组参数给键players[i]赋值
def show_role():
for i in range(3):
player_info[players[i]]=born_role()
enemy_info[players[i]]=born_role()
show_role()
print('----------------- 玩家角色信息 -----------------')
for i in range(3):
print('%s 血量:%d 攻击:%d'%(players[i],player_info[players[i]][0],player_info[players[i]][1]))
print('--------------------------------------------------')
print('----------------- 敌人角色信息 -----------------')
for i in range(3):
print('%s 血量:%d 攻击:%d'%(enemys[i],enemy_info[players[i]][0],enemy_info[players[i]][1]))
print('--------------------------------------------------')
>>>
--------