Quanto segue avrà più senso se hai mai giocato a Minecraft. Dato che molti di voi no, cercherò di spiegarlo nel miglior modo possibileLettura dati ricorsiva in Python
Sto provando a scrivere una funzione ricorsiva in grado di trovare i passaggi per creare qualsiasi oggetto di minecraft da un flatfile di ricette di minecraft. Questo mi ha davvero sconcertato.
Il file flat è un po 'lungo, quindi l'ho incluso in this gist.
def getRecipeChain(item, quantity=1):
#magic recursive stuffs go here
Quindi, in pratica ho bisogno di guardare la prima ricetta poi cercare le ricette per tutti i componenti di tale prima ricetta e così via fino ad arrivare a oggetti con ricette. Ogni volta che ho bisogno di aggiungere la ricetta per una lista in modo da ottenere una sorta di set di istruzioni di ciò al fine di oggetti artigianali in.
Così qui è la funzione che ho ora (quella che il non funziona)
def getRecipeChain(name, quantity=1):
chain = []
def getRecipe(name1, quantity1=1):
if name1 in recipes:
for item in recipes[name1]["ingredients"]["input"]:
if item in recipes:
getRecipe(item, quantity1)
else:
chain.append(item)
getRecipe(name, quantity)
return chain
Ecco l'output ideale che sto cercando. È un dizionario con il nome dell'articolo e la quantità in esso memorizzati.
>>> getRecipeChain("solar_panel", 1):
{"insulated_copper_cable":13, "electronic_circuit":2, "re_battery":1, "furnace":1, "machine":1, "generator":1, "solar_panel":1}
Quindi la domanda è: come faccio?
So che chiedere alla gente di fare del lavoro per voi è accigliato qui, quindi se pensate che questo sia un po 'troppo vicino a voi, semplicemente facendo il codice per me, basta dirlo.
Basta dire, ma penso che l'output del campione non è giusto ... – PearsonArtPhoto
In che modo è corretta? – giodamelio
Beh, insulated_copper_cable non è un articolo base, vero? Né è elettronica_circuito. Sembra che tu voglia ottenere gli ingredienti base, non quelli complessi. – PearsonArtPhoto