我的程序遇到了一些麻烦。它会根据所选字符随机生成属性。
代码:
import random
not_e = {"Bulbasaur": ["Overgrow", "Tackle", "Leech Seed"],
"Charmander": ["Blaze", "Scratchy", "Growl"],
"Squirtle": ["Torrent", "Tackle", "Tail Whip"],
"Pikachu": ["Static", "Tail Whip", "Thunder Shock"],
"Haunter": ["Levitate", "Hypnosis", "Spite"],}
evolved = {"Venusaur": ["Overgrow", "Vine Whip", "Tackle", "Growl", "Poison Powder"],
"Charizard": ["Blaze", "Growl", "Ember", "Dragon Rage", "Dragon Claw"],
"Blastoise": ["Torrent", "Tackle", "Water Gun", "Withdraw", "Bite"],
"Raichu": ["Static", "Thunderbolt", "Quick Attack", "Thunder Shock", "Electro Ball"],
"Gengar": ["Levitate", "Hypnosis", "Spite", "Curse", "Night Shade"]}
class YourPokemon(object):
name = ""
hp = 0 #health points
power = 0 # the pokemons power
wwyd = ["FIGHT", "CHANGE POKEMON", "OPEN BAG", "RUN"]
pokemon_type = ""
not_e_powers = []
def getRandomPokemon_Powers(self):
name = random.choice(list(not_e.keys())) # gets random pokemon
not_e_powers = not_e[name] # gets list of powers from randomly selected pokemon
print("Your pokemon is: " + name + "! And it's powers are: " + str(not_e_powers))
return name, not_e_powers;
def healthPointsAndPower(self):
r = random.randrange
if self.name == "Bulbasaur":
self.hp = r(45,50)
self.power = r(40,45)
self.pokemon_type = "Grass"
elif self.name == "Charmander":
self.hp = r(35,40)
self.power = (45,50)
self.pokemon_type = "Fire"
elif self.name == "Squirtle":
self.hp = r(40,45)
self.power = (45,50)
self.pokemon_type = "Water"
elif self.name == "Pikachu":
self.hp = r(30,35)
self.power = r(45,50)
self.pokemon_type = "Electric"
elif self.name == "Haunter":
self.hp = r(40,45)
self.power = r(45,50)
self.pokemon_type = "Ghost"
print("Your pokemons Health Points and Power Points are: ", self.hp, " and ", self.power, "!")
your_character = YourPokemon()
your_character.getRandomPokemon_Powers()
your_character.healthPointsAndPower()
使用healthPointsAndPower方法中的r = random.randrange更新了代码。
当我多次运行它时,它会打印出生成的点数为0.一直都是。
它出了什么问题?
答案 0 :(得分:1)
您的self.name
始终为空,因此if
个测试都不匹配。永远不会调用random.randrange
,self.hp
和self.power
保留其类默认值0
。
self.name
为空,因为您的getRandomPokemon_Powers
方法从不设置它:
name = random.choice(list(not_e.keys())) # gets random pokemon
设置本地变量name
,而不是self.name
。将该功能更改为:
def getRandomPokemon_Powers(self):
self.name = random.choice(list(not_e.keys())) # gets random pokemon
self.not_e_powers = not_e[name] # gets list of powers from randomly selected pokemon
print("Your pokemon is: " + self.name + "! And it's powers are: " + str(self.not_e_powers))
return self.name, self.not_e_powers
或在其他地方的实例上设置name
属性:
>>> your_character.name = 'Bulbasaur'
>>> your_character.not_e_powers = ['Overgrow', 'Tackle', 'Leech Seed']
>>> your_character.healthPointsAndPower()
('Your pokemons Health Points and Power Points are: ', 48, ' and ', 40, '!')
答案 1 :(得分:1)
为什么不在主程序中打印random.randrange
,然后在方法打印r
中打印,这会告诉您它们是否相同?
即使提供稍微粗略的信息,您似乎也不太可能正在呼叫random.randrange()
。此测试将验证该假设,然后您可以开始查找r
与其他内容绑定的位置。在你知道自己在寻找什么之前,你可以看到所有你喜欢的东西,而没有太大的希望得到积极的结果。
如果事实证明它们是相同的,那么我们需要看到更多的代码。
与你的问题真正相关的最后一件事:随着你的技能发展,你将开始意识到,只是想出代码并不总是最好的,因为一点点思考可以为你节省很多打字并减少你的程序大小,使其更容易阅读(由经验丰富的程序员)。这里有一些(未经测试的)代码可以让你思考。
pokemons = {
"Bulbasaur": (45, 50, 40, 45, "Grass"),
"Charmander": (35, 40, 45, 50, "Fire"),
"Squirtle": (40, 45, 45, 50, "Water"),
"Pikachu": (30, 35, 45, 50, "Electric"),
"Haunter": (40, 45, 45, 50, "Ghost")
}
...
def healthPointsAndPower(self):
hp_lo, hp_hi, pow_lo, pow_hi, ptype = pokemons[self.name]
sef.hp = r(hp_lo, hp_hi)
self.power = r(pow_lo, pow_hi)
self.pokemon_type = ptype
编辑:问题已被编辑,或者编写的代码多于我在制定答案时所看到的代码。