La función see_inventory () imprime las comillas en el bucle for dentro de ella, ¿cómo hago para que la función imprima la lista sin las comillas? Soy un principiante por cierto.

class Person:

    equipped_armor = {
    "head": {"name": "cap", "defense": 1},
    "chest": {"name": "mail", "defense": 2},
    "legs": {"name": "wooden leggings", "defense": 1},
    }
    gold = 10


    stored_armor = {"Stored Armor: ": ["rash leggings"]}
    weapons = {"Weapons: ": ["wooden_sword", "mythrill_staff"]}
    potions = {"Potions: ": ["HP potion"]}
    ui_gold = {"Gold: ": gold}

    inv = [
        stored_armor,
        weapons,
        potions,
        ui_gold
    ]

    def __init__(self):
        self.name = "Cavalex"

    def see_inventory(self):
        for element in self.inv:
            print(element)

Al ejecutar esto:

player = Person()
player.see_inventory()

Entiendo esto:

{'Stored Armor: ': ['rash leggings']}
{'Weapons: ': ['wooden sword', 'mythril staff']}
{'Potions: ': ['HP potion']}
{'Gold: ': 10}
-1
Cavalex 14 sep. 2018 a las 02:09

3 respuestas

La mejor respuesta

Primero, reduzcamos su ejemplo; La estructura de clases es irrelevante para el problema.

gold = 10
stored_armor = {"Stored Armor: ": ["rash leggings"]}
weapons = {"Weapons: ": ["wooden_sword", "mythrill_staff"]}
potions = {"Potions: ": ["HP potion"]}
ui_gold = {"Gold: ": gold}

inv = [ 
    stored_armor,
    weapons,
    potions,
    ui_gold
]

Ahora, está intentando imprimir la lista de elementos sin la puntuación que viene naturalmente con el almacenamiento de datos que eligió. Para hacer esto, debe alcanzar dentro ese almacenamiento y volver a formatear los elementos de la forma en que desea verlos.

En este caso, no es trivial qwuite , ya que ha elegido una estructura no homogénea para la mochila de su jugador: una lista de diccionarios cuyos valores son de diferentes tipos. Resolví esto recorriendo la lista (después de corregir el nombre de la variable mal escrita) y verificando el tipo del valor antes de construir la salida.

for element in inv:
    for key, val in element.items():
        if type(val) == list:
            inventory = ' '.join([item for item in val])
        else:
            inventory = str(val)

        print(key, inventory)

Salida:

Stored Armor:  rash leggings
Weapons:  wooden_sword mythrill_staff
Potions:  HP potion
Gold:  10
2
Prune 13 sep. 2018 a las 23:26

Aquí tienes, solo haz este pequeño cambio a see_inventory, esto hará el trabajo

def see_inventory(self):
    for element in self.inv:
        for k, v in element.items():
            if type(v) == list:

                print(k, ' '.join(v))
            else:
                print(k, v)

Salida

(xenial)vash@localhost:~/python$ python3.7 armor.py 
Stored Armor:  rash leggings
Weapons:  wooden_sword mythrill_staff
Potions:  HP potion
Gold:  10
0
vash_the_stampede 14 sep. 2018 a las 01:24

Aquí hay una forma muy simple de hacerlo.

str(player.see_inventory()).replace("'", "")

O en la función algo como:

print(str(element).replace("'", ""))

0
Mike 13 sep. 2018 a las 23:25