last day (15 days later) » 

11:39 AM
A ver
 
Buenas
 
Así aquí no molestamos a todos los demás que están con sus cosas :)
Tienes tu inventario del jugador en un dict
 
Claro, no sabia realmente como hacerlo
 
Y el loot es una lista, cierto?
 
Si Exactamente
inv = {'gold coin':42,'rope':1}
dragonLoot = ['gold coin','dagger','gold coin','gold coin','ruby']
 
11:40 AM
Cuando matas al bicho, obtienes todo su loot, o es aleatorio?
 
obtengo la lista
q te he enviado
 
Ok, y en qué cantidades?
 
basicamente al ser una lista, la cantidad es de 1
por ejemplo en esa, ves que esta gold coin repetido 3 veces ?
yo lo he convertido en un diccionario y si se repite el valor se suma
Podrias decirme alguna web donde pueda colocar todo el codigo para q lo veas mejor ?
 
Aquí puedes ponerlo todo usando tres backticks -> `
```
codigo
y para terminar tres ` mas
 
```
from collections import Counter
def displayInventory(inventory):
print("Inventory:")
itemTotal = 0
for k,v in inventory.items():
print(f'{v} {k}')
itemTotal+=v

print("Total number of items: " + str(itemTotal))


def addToInventory(inventory, addItems):
loot={}

for v in addItems:
loot.setdefault(v,0)
loot[v] = loot[v] + 1

Cdict = Counter(loot) + Counter(inventory)

return Cdict

inv = {'gold coin':42,'rope':1}
dragonLoot = ['gold coin','dagger','gold coin','gold coin','ruby']

inv = addToInventory(inv, dragonLoot)
Funciona bien
 
11:43 AM
Te faltó un intro tras los tres backticks
Osea, quieres hacer lo mismo que con counter, pero sin importarlo, cierto?
 
Exactooo
:D
 
Vale, dame un segundo que paso el código a mi máquina y corro a ver
 
Gracias
 
Esta salida es válida? {'gold coin': 45, 'rope': 1, 'dagger': 1, 'ruby': 1}
Con tus parámetros:
```
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
```
Oh vaya, no funciona el triple backtick aquí? Qué raro en la sala general funciona
 
@Benito-B Si
 
11:51 AM
Ahí lo tienes pues
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']


# Es buena costumbre tipar las variables, así además de verlas mejor podrás usar autocompletar en el IDE!
def add_to_inventory(inventory: dict, items: list):
    # Simplemente recorro la lista para añadirlos uno a uno
    for item in items:
        # .get te permite especificar la clave a obtener y un VALOR POR DEFECTO, que en este caso es 0
        # Es decir, si no existe ese objeto, el inventory.get devolvera un 0 y se añadirá al diccionario como 1 :)
Vale, para enviar código en bloque se usa el botón fixed font que aparece a la derecha de upload! (Sorry, no suelo usar mucho el chat jaja)
 
Vale, Perfecto
estoy leyendo tus anotaciones
Tengo una duda
 
Dime
 
# Es decir, si no existe ese objeto, el inventory.get devolvera un 0 y se añadirá al diccionario como 1 :)
        inventory[item] = inventory.get(item, 0) + 1
ese +1 al final de esa linea
 
Para añadir un objeto nuevo a un diccionario en python, simplemente le das un valor:
`inventario["test"] = 0` crearía el objeto con valor 0
Ese +1 lo que hace es incrementar el valor de los campos que existen
Esa línea se podría escribir de la siguiente forma:
valor_actual = inventory.get(item, 0)
valor_final = valor_actual + 1
inventory[item] = valor_final
Es decir, primero miro cuanto vale esa clave en el diccionario, y si no existe le pongo un valor 0
Luego le incremento uno al valor
Y luego lo asigno de nuevo para actualizarlo
Puesto que si tienes 40 monedas, por cada moneda que recibes necesitas hacer un +1
 
Entiendo
 
12:02 PM
En realidad, el Counter hace algo muy similar
Basicamente cuenta cuantas veces aparece cada cosa y las asigna. Esto es lo mismo, pero vas incrementando el contador tú manualmente
Y el inventario en realidad es un contador de cuantos objetos tienes de cada
 
Pensaba que el get() solo evaluaba si existia y con el setdefault() debia asignar el nuevo valor
 
Nop, el get() permite dos parámetros, la clave y el valor por defecto
Esta es la documentación de dict.get()
 
Vale
lo he entendido mejor
Muchas Gracias
 
De nada, para eso estamos
 
Estoy leyendo este libro : automate the boring stuff with python 2nd Edition
me ha ayudado mucho a entender pero quizas hay cosas que no interiorizo del todo, Muchas Gracias por los detalles !
 

last day (15 days later) »