Executando verificação de segurança...
4

O for que você disse que tem dois valores está apenas desestruturando o retorno de pokemon.items(), que é basicamente um objeto retornando chave e valor em uma tupla, que pode ser iterada no loop for, por exemplo:

pokemon = {
    "Taurus": {
        "Attack": 45,
        "Defense": 45,
        "HP": 60,
        "Speed": 40,
    }
}

Pra cada pokemon ele vai pegar chave e valor e retornar um array com varias tuplas.

pokemon = {
    "Taurus": [
        ("Attack", 45),
        ("Defense", 45),
        ("HP", 60),
        ("Speed", 40)
    ]
}

Seria esse o retorno, quando voce declara um for com duas variáveis, você tá basicamente dizendo que atributo = "Attack", valor = 45.

Mas é meio inútil você simplesmente jogar um print, porque você não tá salvando esses dados em nenhum lugar, eu faria um pouco diferente.

class Pokemon:
    def __init__(self, name, attibutes):
        self.name = name
        self.attributes = attributes
        
pokedex = [
    (1, Pokemon(
    "Bulbasaur", {
        "Attack": 49,
        "Defense": 49,
        "HP": 45,
        "Speed": 45
    })),
    (2, Pokemon(
    "Ivysaur", {
        "Attack": 49,
        "Defense": 49,
        "HP": 45,
        "Speed": 45
    })),
]

Daria pra ser mais eficiente e puxar a pokedex toda de dentro de um JSON e criar uma classe pokedex com métodos para filtrar e encontrar os pokémons a qualquer momento. Mas seguindo esse exemplo acredito que você possa escalar melhor seu código.

Carregando publicação patrocinada...
1

ah, eu acho que entendi o for, eu usei print porque não queria que o codigo refizesse isso toda vez que iniciasse o programa, mas só queria automatizar minha tarefa de fazer só uma lista com os 151 em vez de uma lista de listas

1

Entendi que oque você quis fazer era apenas transformar em outra estrutura de dados, a opção que eu dei fo apenas pra facilitar sua criação de funções e conseguir manipular os atributos de uma forma melhor. Como por exemplo criar funções de atacar, sofrer dano, etc.

No final do arquivo seria interessante acionar um script que salvasse os dados atuais dos pokémon em um arquivo JSON, para não perder os dados ao parar o programa. Creio que não vá precisar disso agora, mas seria essencial mais pra frente.

Inclusive sua ideia me inspirou a tentar fazer algo parecido com isso, sempre joguei muito pokémon desde criança kkkkkk. Mas acho que vou focar em algo mais parecido com o pokémon showdown. Enfim, boa sorte com o código, abçs!

1

Já que acabaste por criar uma classe para criar os pokémons, em vez de armazerar os dados em atributes criaria um atributo para cada dado para ser guardado:

class Pokemon:
    def __init__(self, name, atk, defense, hp, speed):
    self.name = name
    self.Attack = atk
    self.Defense = defense
    self.HP = hp
    self.Speed = speed
    
pokemon = Pokemon(Bulbasaur, 49, 49, 45, 45)

Assim para acessar os dados passamos depokemon.atributes["Attack"] parapokemon.Attack.

Só uma sugestão, na mesma um bom trabalho e espero que aprendas bastante com este projeto.

1

Com certeza, a única coisa que poderia ser diferente na sua sugestão é que, ao invés de passar cada atributo como prop, apenas desestruturar no init:

class Pokemon:
    def __init__(self, name, attibutes):
        self.name = name
        
        for attr_key, attr_value in attributes.items():
            # Example: self.HP = attributes["HP"]
            self.__dict__[attr_key] = attr_value

Desse jeito não ficaria tão verboso e facilitaria na hora de implementar novos atributos.

1
1

Cara, só uma ideia que talvez va te ajudar no futuro, ou talvez agora se for bem persistente...
Tu poderia mudar a estrutura de como organiza os pokemons pra uma estrutura de arvore pra facilitar a busca depois. Ainda não pensei muito bem em como estruturar nem se da pra implementar, mas adicionaria um desafio a mais e por experiencia propria acho que a sensação de entender como uma arvore binaria funciona é muito boa.

1

Entendo oque quer dizer, se fosse um projeto meu com certeza faria diferente. Deixei dessa maneira mais intuitiva pois queria que o OP conseguisse entender. Deixer muito complexo apenas criaria mais confusão, ainda mais pra quem tá iniciando.

Mas bom olhar crítico o seu!