You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:55:35