Python全局变量修改问题:Pokemon游戏分数无法累加
问题解决:Pokemon对战游戏分数无法累加
错误点分析
- 分数累加语法错误:
add_to_score()函数里的score =+ 1是赋值为1,正确的累加写法是score += 1。 - 函数无返回值:
add_to_score()和current_score()没有返回当前分数,导致打印分数时输出None,需要在函数末尾返回score。 - 技能值逻辑错误:
random_move()里错误地将技能使用次数move['pp']作为power返回,实际应该取技能威力move['power'],这才是对战胜负的判断依据。 - 递归调用风险:反复递归调用
run()会随着游戏轮次增加导致栈溢出,换成while循环更稳妥。 - 空值判断错误:判断技能威力是否为空时,
player_stat == 'None'是判断字符串,正确应该用player_stat is None(API返回的power是整数或None)。
修改后的完整代码
import random import requests def random_pokemon(): pokemon_number = random.randint(1, 151) url = 'https://pokeapi.co/api/v2/pokemon/{}/'.format(pokemon_number) response = requests.get(url) pokemon = response.json() return { 'name': pokemon['name'], 'Pokedex ID': pokemon['id'], 'Height': pokemon['height'], 'Weight': pokemon['weight'], } def random_move(): pokemon_move = random.randint(1, 844) url = 'https://pokeapi.co/api/v2/move/{}/'.format(pokemon_move) response = requests.get(url) move = response.json() # 修正:取技能威力power,而非使用次数pp return { 'name': move['name'], 'power': move['power'] if move['power'] is not None else 0, } score = 0 def add_to_score(): global score score += 1 # 修正累加语法 return score # 返回当前分数 def current_score(): global score return score # 返回当前分数 def run(): global score score = 0 # 初始化分数 while True: # 换成while循环替代递归 player_pokemon = random_pokemon() print('Your Pokemon is {}'.format(player_pokemon['name'])) player_move = random_move() print('Your move is {}'.format(player_move['name'])) opponent_pokemon = random_pokemon() print('The opponents Pokemon is {}'.format(opponent_pokemon['name'])) opponent_move = random_move() print('The opponents move is {}'.format(opponent_move['name'])) player_stat = player_move['power'] opponent_stat = opponent_move['power'] print('Your Stat is {}'.format(player_stat)) print('The opponents Stat is {}'.format(opponent_stat)) # 调整判断顺序,先处理空值/0的情况 if player_stat is None or player_stat == 0: print('You Lose! Better Luck Next Time!') break if opponent_stat is None or opponent_stat == 0: print('You Win! Congratulations!\n') print('Your score is {}'.format(add_to_score())) continue if player_stat > opponent_stat: print('You Win! Congratulations!\n') print('Your score is {}'.format(add_to_score())) elif player_stat < opponent_stat: print('You Lose! Better Luck Next Time!') break else: print('Its a Tie!\n') print('Your score is {}'.format(current_score())) run()
额外说明
- 修正了技能威力的获取逻辑,确保对战比较的是正确的数值。
- 用
while True循环替代递归,避免栈溢出问题,游戏会持续运行直到玩家失败。 - 空值处理时将
None转为0,避免类型错误,同时明确判断玩家技能无效时直接失败。
内容的提问来源于stack exchange,提问作者Indiia Potts
相关产品推荐
相关产品推荐

