Reto día 14/100 con Python
Tags: codenewbie, 100daysofcode, python, spanish
Published: 2021-02-09 19:20:20

### Ejercicio

* Realizar un programa que enseñe al usuario el nombre y tipo de dos Pokémon y elija cual cree que tiene mayor experiencia base. 
* Si acierta gana 10 puntos. Si falla o empata no obtiene nada.
* El usuario escoge si desea seguir jugando después de cada desafío.
* Al final si decide no seguir se le mostrará el puntaje final

Este ejercicio se realiza con el fin de afianzar un poco más el uso de los diccionarios. Para ello los datos del pokémon deben ir almacenados en diccionarios, dentro de una lista, donde almacenamos el nombre, tipo y base de experiencia.

```python
pokemon_random = [
    {
        "name":"pikachu",
        "type":"electric",
        "base_experience": 112
    },
    {
        "name":"charmander",
        "type":"fire",
        "base_experience":62
    },
    {
        "name":"bulbasaur",
        "type":"grass",
        "base_experience":64
    },
    {
        "name":"pidgeotto",
        "type":"flying",
        "base_experience":122
    },
    {
        "name":"zubat",
        "type":"flying",
        "base_experience":49
    },
    {
        "name":"mankey",
        "type":"fighting",
        "base_experience":61
    }
]
```
Para darle un poco más de funcionalidad este diccionario se crea en un archivo aparte que nos va a servir como un módulo para el programa principal.

El programa principal debe comenzar mostrando solo dos datos de cada pokémon y solo se va a pedir que se decida por uno de ellos

```python
print(f"Pokemon del equipo 'a', su nombre es: {poke_a['name']} y es de tipo {poke_a['type']}")
print(f"Pokemon del equipo 'b', su nombre es: {poke_b['name']} y es de tipo {poke_b['type']}")

opcion = input("Escoja 'a' o 'b' cual tiene mas base experiencia\t")
print(winner_pokemon(opcion))

```
Del anterior código se puede observar que para mostrar los datos se pueden obtener de una lista llamada `poke_a` y `poke_b`, cada una me debe traer un pokémon diferente:

```python
poke_a = choice_pokemon()
poke_b = choice_pokemon()

while poke_a == poke_b:
    poke_b = choice_pokemon()
```

La función que se esta invocando dos veces para obtener el pokémon hace esta elección de manera aleatoria con el método `choice` del módulo `random`

```python
import data as d
import random as r
def choice_pokemon():
    return r.choice(d.pokemon_random)
```

El módulo `data ` es el archivo que creamos inicialmente con la lista de pokémon. Pero volviendo al menú inicial donde se le solicita al usuario que se decida por alguno de los dos pokémon presentados aleatoriamente, se hace uso del método local `winner_pokemon` el cual va a comparar la base de experiencia de cada uno y si el jugador acierta se le asigna un puntaje.

```python

def asignar_puntaje():
    global score
    score += 10
    return score

def winner_pokemon(op):
    experience_a = poke_a["base_experience"]
    experience_b = poke_b["base_experience"]

    if experience_a > experience_b:
        if op == 'a':
            asignar_puntaje()
            return f"El ganador es {poke_a['name']} con experiencia {experience_a} y usted obtiene 10 puntos"            
        elif op == 'b':
            return f"El ganador es {poke_a['name']} con experiencia {experience_a} y usted no obtiene puntos"
    elif experience_a < experience_b:
        if op == 'a':
            return f"El ganador es {poke_b['name']} con experiencia {experience_b} y usted no obtiene puntos"
        elif op == 'b':
            asignar_puntaje()
            return f"El ganador es {poke_b['name']} con experiencia {experience_b} y usted obtiene 10 puntos"
    else:
        return "No hay ganador, es empate"

```

El ejercicio completo lo pueden descargar del repositorio [Github](https://github.com/WilsonGLan/Reto_100_dias/tree/main/dia_14)