我如何将这三个变量的值与函数内的值从函数中取出?

  • 本文关键字:函数 变量 三个 python python-3.x
  • 更新时间 :
  • 英文 :


哪里是代码,我想采取勇士turnorder,祭司turnorder和敌人turnorder,与函数内的值。

def initiative_phase(): #Function for setting the turn order
    WarriorTurnOrder = 0
    PriestTurnOrder = 0
    enemy_turnOrder = 0
    
    WarriorTurnOrder = WarriorTurnOrder + random.randint(0,20) + warrior[4] #Random Value for the Warrior's turn number
    PriestTurnOrder = PriestTurnOrder + random.randint(0,20) + priest[4] #Random Value for the Priest's turn number
    enemy_turnOrder = enemy_turnOrder + random.randint(0,20) + vampire[4] #Random Value for the Vampire's turn number
    
    print("nThe warrior got " + str(WarriorTurnOrder)) 
    print("The vampire got " + str(enemy_turnOrder))
    print("The priest got " + str(PriestTurnOrder))

我试图做一个系统的回合顺序,但它总是给我一个错误或0在每个值。

def first_turn():
    if (WarriorTurnOrder > enemy_turnOrder) and (WarriorTurnOrder > PriestTurnOrder): #Warrior first
        warrior_turn()
    elif (PriestTurnOrder > enemy_turnOrder) and (PriestTurnOrder > WarriorTurnOrder): #Priest first
        priest_turn()
    elif (enemy_turnOrder > WarriorTurnOrder) and (enemy_turnOrder > PriestTurnOrder): #Enemy goes first
        enemy_turn()
    elif (WarriorTurnOrder == enemy_turnOrder) or (WarriorTurnOrder == PriestTurnOrder): #In case of draw return to turn order
        initiative_phase()
    elif (PriestTurnOrder == enemy_turnOrder) or (PriestTurnOrder == WarriorTurnOrder): #In case of draw return to turn order
        initiative_phase()
    elif (enemy_turnOrder == WarriorTurnOrder) or (enemy_turnOrder == PriestTurnOrder): #In case of draw return to turn
        initiative_phase()
        
def second_turn():
    if (WarriorTurnOrder > enemy_turnOrder) and (WarriorTurnOrder < PriestTurnOrder): #Warrior second
        warrior_turn()
    elif (PriestTurnOrder > enemy_turnOrder) and (PriestTurnOrder < WarriorTurnOrder): #Priest second
        priest_turn()
    elif (enemy_turnOrder > WarriorTurnOrder) and (enemy_turnOrder < PriestTurnOrder): #Enemy second
        enemy_turn()
def third_turn():
    if (WarriorTurnOrder < enemy_turnOrder) and (WarriorTurnOrder < PriestTurnOrder): #Warrior third
        warrior_turn()
    elif (PriestTurnOrder < enemy_turnOrder) and (PriestTurnOrder < WarriorTurnOrder): #Priest second
        priest_turn()
    else: #Enemy third
        enemy_turn()

你在函数中声明的所有变量都是局部变量。在函数中使用global variable。例如:global WarriorTurnOrder。对所有3个变量都这样做,它应该像你想的那样工作。

def initiative_phase(): #Function for setting the turn order
    global WarriorTurnOrder
    global PriestTurnOrder
    global enemy_turnOrder
    WarriorTurnOrder = 0
    PriestTurnOrder = 0
    enemy_turnOrder = 0
    
    WarriorTurnOrder = WarriorTurnOrder + random.randint(0,20) + warrior[4] #Random Value for the Warrior's turn number
    PriestTurnOrder = PriestTurnOrder + random.randint(0,20) + priest[4] #Random Value for the Priest's turn number
    enemy_turnOrder = enemy_turnOrder + random.randint(0,20) + vampire[4] #Random Value for the Vampire's turn number
    
    print("nThe warrior got " + str(WarriorTurnOrder)) 
    print("The vampire got " + str(enemy_turnOrder))
    print("The priest got " + str(PriestTurnOrder))

方法2(更好的做法):使用变量作为函数参数,并在函数结束时添加return语句,其中包含所有3个变量的元组或列表(这将返回一个元组或带有其值的列表)。您可以稍后在其他函数中传递这些值。

def initiative_phase(): #Function for setting the turn order
    WarriorTurnOrder = 0
    PriestTurnOrder = 0
    enemy_turnOrder = 0
    WarriorTurnOrder = WarriorTurnOrder + random.randint(0,20) + warrior[4] #Random Value for the Warrior's turn number
    PriestTurnOrder = PriestTurnOrder + random.randint(0,20) + priest[4] #Random Value for the Priest's turn number
    enemy_turnOrder = enemy_turnOrder + random.randint(0,20) + vampire[4] #Random Value for the Vampire's turn number
    print("nThe warrior got " + str(WarriorTurnOrder)) 
    print("The vampire got " + str(enemy_turnOrder))
    print("The priest got " + str(PriestTurnOrder))
    #the order of these variables is the order you need to unpack them
    return (WarriorTurnOrder, PriestTurnOrder, enemy_turnOrder)

解压这些值:

WarriorTurnOrder, PriestTurnOrder, enemy_turnOrder = initiative_phase()

其他函数应该这样定义:

def function(WarriorTurnOrder, PriestTurnOrder, enemy_turnOrder):
    #put your code here

最新更新