【发布时间】:2021-03-22 00:14:07
【问题描述】:
我正在创建一个程序来重新创建 Pokemon TV/Anime 系列中的 Pokedex(以训练自己如何使用 Classes 和 tkinter 模块),但即使用户输入在 Pokedex 的数据库中。 意思是,如果用户的输入是 7,那么它应该使用类中的“显示”功能来显示 Pokedex 中的条目 7(这将是 Squirtle);像这样:“这是一只 Squirtle。Squirtle 高 0.5m,重 9kg。Squirtle 是水型,对 Grass & Electric 较弱。”但它并没有这样做,它只是总是打印“Pokedex 上找不到口袋妖怪”的错误消息。
如果我删除“for”循环的后半部分,搜索功能就会起作用,这意味着返回错误消息并允许用户输入另一个数字进行搜索。但是当我重新添加循环的错误消息部分时,即使它应该工作,它也总是显示错误消息。
代码如下:
class Pokemon:
'Class base for all Pokemon inside the Pokedex'
def __init__(self, pkdx_num, name, height, weight, type, weaknesses):
self.pkdx_num = pkdx_num
self.name = name
self.height = height
self.weight = weight
self.type = type
self.weaknesses = weaknesses
def display(self):
print(f"This is a {self.name}.")
print(f"The {self.name} is {self.height} tall and weighs {self.weight}.")
print(f"The {self.name} is a {self.type} type and is weak against {self.weaknesses}.")
#Pokedex Database
pkdx_1 = Pokemon(1, "Bulbasaur", "0.7m", "6.9kg", "Grass" "Poison", "Fire, Psychic, Flying & Ice")
pkdx_2 = Pokemon(2, "Ivysaur", "1m", "13kg", "Grass" "Poison", "Fire" "Psychic" "Flying" "Ice")
pkdx_3 = Pokemon(3, "Venusaur", "2m", "100kg", "Grass" "Poison", "Fire" "Psychic" "Flying" "Ice")
pkdx_4 = Pokemon(4, "Charmander", "0.6m", "8.5kg", "Fire", "Water, Ground & Rock")
pkdx_5 = Pokemon(5, "Charmeleon", "1.1m", "19kg", "Fire", "Water, Ground & Rock")
pkdx_6 = Pokemon(6, "Charizard", "1.7m", "90.5kg", "Fire", "Water, Ground & Rock")
pkdx_7 = Pokemon(7, "Squirtle", "0.5m", "9kg", "Water", "Grass & Electric")
pkdx_8 = Pokemon(8, "Wartortle", "1m", "22.5kg", "Water", "Grass & Electric")
pkdx_9 = Pokemon(9, "Blastoise", "1.6m", "85.5kg", "Water", "Grass & Electric")
pokedex = [pkdx_1, pkdx_2, pkdx_3, pkdx_4, pkdx_5, pkdx_6, pkdx_7, pkdx_8, pkdx_9]
#-Pokedex Search Debugging
#Pokemon.display(pkdx_7)
#pkdx_search = "7" #-Pokedex Search Function Debugger/Tester
pkdx_search = int(input("What Number in the Pokedex do you want to search? "))
for Pokemon in pokedex:
if Pokemon.pkdx_num == pkdx_search:
Pokemon.display()
break
else:
print("Pokemon not found on Pokedex")
break
【问题讨论】:
-
你可以试试
for p in pokedex,因为Pokemon(类)和Pokemon(迭代器)之间存在名称冲突 -
老实说,这看起来像是字典的工作。
标签: python for-loop if-statement