python - 在声明的函数之外调用类函数
问题描述
我试图在另一个未声明的函数中调用类函数player.Decide() 。我收到错误'未定义播放器。我将如何解决这个问题?
def BattleLogic():
global enemy, enemy_race, name, level, strength, dexterity, cunning, enemy_speed, player_speed, type_speed
global move, turn, prefix
if enemy in ['deer']:
enemy_race = 'animal'
if enemy_race == 'animal':
chance = random.randint(1,1000)
if chance <= 10:
prefix = 'crippled'
elif chance > 10 and chance <= 50:
prefix = 'old'
elif chance >50 and chance <= 250:
prefix = 'young'
elif chance > 250 and chance <= 750:
prefix = None
elif chance > 750 and chance <= 950:
prefix = 'strong'
elif chance > 950 and chance <= 990:
prefix = 'alpha'
elif chance > 990 and chance <= 999:
prefix = 'possessed'
elif chance == 1000:
prefix = '*CONVERTED*'
else:
prefix = 'error'
opponent = Enemy(str(prefix),str(enemy),str(enemy_race))
player = Player(str(name),level,strength,dexterity,cunning)
player.Initiative()
opponent.Initiative()
if enemy_speed > player_speed:
move = 0
elif player_speed > enemy_speed:
move = 1
else:
move = random.randint(0,1)
turn = 0
Battle()
def Battle():
global turn, move, prefix, enemy, type_speed, enemy_title
if turn == 0:
print('\n\n')
if prefix == None:
enemy_title = enemy.capitalize()
else:
enemy_title = prefix.capitalize()+' '+enemy.capitalize()
SlowPrint('A '+enemy_title+' gets into position for battle',type_speed,0.5)
if move == 1:
SlowPrint(enemy_title+' makes the first move',type_speed,0.25)
else:
SlowPrint('You make the first move',type_speed,0.25)
if move == 0:
turn += 1
move = 1
player.Decide()
else:
turn += 1
move = 0
opponent.Decide()
解决方案
只需将播放器对象传递给函数即可。您可以免费使用 player.Decide()。
我个人认为,您的编码的主要问题是您没有将某些东西传递给函数的习惯,这会迫使您声明太多的全局变量。
一个简单的示例(在您的情况下,您希望对象成为玩家)
def Battle(obj):
return obj.Decide()
推荐阅读
- python - 如何组合具有不同名称的 2 列以用第二个的值填充第一个的空值?
- javascript - 在路由模板中使用 Vue 方法需要帮助
- vba - 错误 1004:SaveAs 方法失败,accessMode:=xlShared
- html - Youtube 和 Twitter 的 HTML href “拒绝连接”
- unity3d - 我正在尝试将标准 URP(通用渲染管道)着色器提供给我制作的网格
- pandas - 如何在熊猫中格式化日期时间字段
- php - PHP 在 LAMP DigitalOcean 中返回任何内容
- vim - 字符串中的语法高亮
- sql - 每当我尝试在 SQL 中进行除法时,我都会得到 0(我该如何解决这个问题)?
- r - 通过倾斜对 facet_wrap 中的直方图进行排序