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
相关产品推荐
相关产品推荐

