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

Python随机宝可梦函数Bug求助:Pidgey始终随选中宝可梦显示

问题

生成随机数对应不同宝可梦,但选中非Pidgey的宝可梦时,总会同时显示Pidgey的出现提示。

原代码

def random_pokemon_for_battle():
    variables.random_pokemon_counter = random.randint(1, 6)
    if variables.random_pokemon_counter == 1:
        variables.random_pokemon_encounter = "Pidgey"
        from sounds import pidgey_sound
        winsound.PlaySound(pidgey_sound, winsound.SND_FILENAME)
        variables.pidgey_level = random.randint(1, 10)
        variables.pidgey_hp = 100
        variables.pidgey_attack = random.randint(10, 25)
        variables.pidgey_defense = random.randint(15, 35)
        print("A wild Pidgey appeared!")
        print(f"Level: {variables.pidgey_level}")
        print(f"HP: {variables.pidgey_hp}")
        print(f"Attack: {variables.pidgey_attack}")
        print(f"Defense: {variables.pidgey_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 2:
        variables.random_pokemon_encounter = "Weedle"
        from sounds import weedle_sound
        winsound.PlaySound(weedle_sound, winsound.SND_FILENAME)
        variables.weedle_level = random.randint(1, 10)
        variables.weedle_hp = 100
        variables.weedle_attack = random.randint(10, 25)
        variables.weedle_defense = random.randint(15, 35)
        print("A wild Weedle appeared!")
        print("A wild Pidgey appeared!")
        print(f"Level: {variables.weedle_level}")
        print(f"HP: {variables.weedle_hp}")
        print(f"Attack: {variables.weedle_attack}")
        print(f"Defense: {variables.weedle_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 3:
        variables.random_pokemon_encounter = "Pikachu"
        from sounds import pikachu_sound
        winsound.PlaySound(pikachu_sound, winsound.SND_FILENAME)
        print("A wild Pikachu appeared!")
        variables.pikachu_level = random.randint(1, 10)
        variables.pikachu_hp = 100
        variables.pikachu_attack = random.randint(10, 25)
        variables.pikachu_defense = random.randint(15, 35)
        print("A wild Pidgey appeared!")
        print(f"Level: {variables.pikachu_level}")
        print(f"HP: {variables.pikachu_hp}")
        print(f"Attack: {variables.pikachu_attack}")
        print(f"Defense: {variables.pikachu_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 4:
        variables.random_pokemon_encounter = "Nidoran_M"
        from sounds import nidoran_male_sound
        winsound.PlaySound(nidoran_male_sound, winsound.SND_FILENAME)
        print("A wild Nidoran appeared!")
        variables.nidoran_M_level = random.randint(1, 10)
        variables.nidoran_M_hp = 100
        variables.nidoran_M_attack = random.randint(10, 25)
        variables.nidoran_M_defense = random.randint(15, 35)
        print("A wild Pidgey appeared!")
        print(f"Level: {variables.nidoran_M_level}")
        print(f"HP: {variables.nidoran_M_hp}")
        print(f"Attack: {variables.nidoran_M_attack}")
        print(f"Defense: {variables.nidoran_M_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 5:
        variables.random_pokemon_encounter = "Nidoran_F"
        from sounds import nidoran_female_sound
        winsound.PlaySound(nidoran_female_sound, winsound.SND_FILENAME)
        print("A wild Nidoran^ appeared!")
        variables.nidoran_F_level = random.randint(1, 10)
        variables.nidoran_F_hp = 100
        variables.nidoran_F_attack = random.randint(10, 25)
        variables.nidoran_F_defense = random.randint(15, 35)
        print("A wild Pidgey appeared!")
        print(f"Level: {variables.nidoran_F_level}")
        print(f"HP: {variables.nidoran_F_hp}")
        print(f"Attack: {variables.nidoran_F_attack}")
        print(f"Defense: {variables.nidoran_F_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 6:
        variables.random_pokemon_encounter = "Caterpie"
        from sounds import caterpie_sound
        winsound.PlaySound(caterpie_sound, winsound.SND_FILENAME)
        print("A wild Caterpie appeared!")
        variables.caterpie_level = random.randint(1, 10)
        variables.caterpie_hp = 100
        variables.caterpie_attack = random.randint(10, 25)
        variables.caterpie_defense = random.randint(15, 35)
        print("A wild Pidgey appeared!")
        print(f"Level: {variables.caterpie_level}")
        print(f"HP: {variables.caterpie_hp}")
        print(f"Attack: {variables.caterpie_attack}")
        print(f"Defense: {variables.caterpie_defense}")
        variables.random_pokemon_counter = 0

解决方法

核心修复

问题出在所有非Pidgey的elif分支中,每个分支都额外添加了print("A wild Pidgey appeared!")语句,直接删除这些多余的打印代码即可解决同时显示Pidgey的问题。

修复后的代码

def random_pokemon_for_battle():
    variables.random_pokemon_counter = random.randint(1, 6)
    if variables.random_pokemon_counter == 1:
        variables.random_pokemon_encounter = "Pidgey"
        from sounds import pidgey_sound
        winsound.PlaySound(pidgey_sound, winsound.SND_FILENAME)
        variables.pidgey_level = random.randint(1, 10)
        variables.pidgey_hp = 100
        variables.pidgey_attack = random.randint(10, 25)
        variables.pidgey_defense = random.randint(15, 35)
        print("A wild Pidgey appeared!")
        print(f"Level: {variables.pidgey_level}")
        print(f"HP: {variables.pidgey_hp}")
        print(f"Attack: {variables.pidgey_attack}")
        print(f"Defense: {variables.pidgey_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 2:
        variables.random_pokemon_encounter = "Weedle"
        from sounds import weedle_sound
        winsound.PlaySound(weedle_sound, winsound.SND_FILENAME)
        variables.weedle_level = random.randint(1, 10)
        variables.weedle_hp = 100
        variables.weedle_attack = random.randint(10, 25)
        variables.weedle_defense = random.randint(15, 35)
        print("A wild Weedle appeared!")
        print(f"Level: {variables.weedle_level}")
        print(f"HP: {variables.weedle_hp}")
        print(f"Attack: {variables.weedle_attack}")
        print(f"Defense: {variables.weedle_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 3:
        variables.random_pokemon_encounter = "Pikachu"
        from sounds import pikachu_sound
        winsound.PlaySound(pikachu_sound, winsound.SND_FILENAME)
        print("A wild Pikachu appeared!")
        variables.pikachu_level = random.randint(1, 10)
        variables.pikachu_hp = 100
        variables.pikachu_attack = random.randint(10, 25)
        variables.pikachu_defense = random.randint(15, 35)
        print(f"Level: {variables.pikachu_level}")
        print(f"HP: {variables.pikachu_hp}")
        print(f"Attack: {variables.pikachu_attack}")
        print(f"Defense: {variables.pikachu_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 4:
        variables.random_pokemon_encounter = "Nidoran_M"
        from sounds import nidoran_male_sound
        winsound.PlaySound(nidoran_male_sound, winsound.SND_FILENAME)
        print("A wild Nidoran appeared!")
        variables.nidoran_M_level = random.randint(1, 10)
        variables.nidoran_M_hp = 100
        variables.nidoran_M_attack = random.randint(10, 25)
        variables.nidoran_M_defense = random.randint(15, 35)
        print(f"Level: {variables.nidoran_M_level}")
        print(f"HP: {variables.nidoran_M_hp}")
        print(f"Attack: {variables.nidoran_M_attack}")
        print(f"Defense: {variables.nidoran_M_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 5:
        variables.random_pokemon_encounter = "Nidoran_F"
        from sounds import nidoran_female_sound
        winsound.PlaySound(nidoran_female_sound, winsound.SND_FILENAME)
        print("A wild Nidoran^ appeared!")
        variables.nidoran_F_level = random.randint(1, 10)
        variables.nidoran_F_hp = 100
        variables.nidoran_F_attack = random.randint(10, 25)
        variables.nidoran_F_defense = random.randint(15, 35)
        print(f"Level: {variables.nidoran_F_level}")
        print(f"HP: {variables.nidoran_F_hp}")
        print(f"Attack: {variables.nidoran_F_attack}")
        print(f"Defense: {variables.nidoran_F_defense}")
        variables.random_pokemon_counter = 0

    elif variables.random_pokemon_counter == 6:
        variables.random_pokemon_encounter = "Caterpie"
        from sounds import caterpie_sound
        winsound.PlaySound(caterpie_sound, winsound.SND_FILENAME)
        print("A wild Caterpie appeared!")
        variables.caterpie_level = random.randint(1, 10)
        variables.caterpie_hp = 100
        variables.caterpie_attack = random.randint(10, 25)
        variables.caterpie_defense = random.randint(15, 35)
        print(f"Level: {variables.caterpie_level}")
        print(f"HP: {variables.caterpie_hp}")
        print(f"Attack: {variables.caterpie_attack}")
        print(f"Defense: {variables.caterpie_defense}")
        variables.random_pokemon_counter = 0

额外优化建议

当前代码重复逻辑过多,可通过字典统一管理宝可梦数据,简化代码结构:

import random
import winsound
from sounds import (
    pidgey_sound, weedle_sound, pikachu_sound,
    nidoran_male_sound, nidoran_female_sound, caterpie_sound
)

def random_pokemon_for_battle():
    pokemon_config = {
        1: {"name": "Pidgey", "sound": pidgey_sound, "var_prefix": "pidgey"},
        2: {"name": "Weedle", "sound": weedle_sound, "var_prefix": "weedle"},
        3: {"name": "Pikachu", "sound": pikachu_sound, "var_prefix": "pikachu"},
        4: {"name": "Nidoran", "sound": nidoran_male_sound, "var_prefix": "nidoran_M"},
        5: {"name": "Nidoran^", "sound": nidoran_female_sound, "var_prefix": "nidoran_F"},
        6: {"name": "Caterpie", "sound": caterpie_sound, "var_prefix": "caterpie"}
    }

    variables.random_pokemon_counter = random.randint(1, 6)
    config = pokemon_config[variables.random_pokemon_counter]
    
    variables.random_pokemon_encounter = config["name"]
    winsound.PlaySound(config["sound"], winsound.SND_FILENAME)
    
    level = random.randint(1, 10)
    hp = 100
    attack = random.randint(10, 25)
    defense = random.randint(15, 35)
    
    setattr(variables, f"{config['var_prefix']}_level", level)
    setattr(variables, f"{config['var_prefix']}_hp", hp)
    setattr(variables, f"{config['var_prefix']}_attack", attack)
    setattr(variables, f"{config['var_prefix']}_defense", defense)
    
    print(f"A wild {config['name']} appeared!")
    print(f"Level: {level}")
    print(f"HP: {hp}")
    print(f"Attack: {attack}")
    print(f"Defense: {defense}")
    
    variables.random_pokemon_counter = 0

修改后新增宝可梦只需在字典中添加配置,无需重复编写分支逻辑,代码更易维护。


内容的提问来源于stack exchange,提问作者user20791491

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:49:51