Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-06-2013, 19:39   #1
Heretic Curse
Member
 
Iscritto dal: Mar 2011
Messaggi: 125
[Python] Salvare e rigenerare Alberi

Sono all''ultimo esercizio di Pensare in Python, e non da pochi giorni, siccome mi sa che mi sono impelagato seguendo la strada non esattamente più consigliabile, che tuttavia non riesco a capire perché non funzioni.
Ho questo tipo di TDA:
Codice:
class Albero:
	def __init__(self, Contenuto = None, Sinistra = None, Destra = None):
		self.Contenuto = Contenuto
		self.Sinistra = Sinistra
		self.Destra = Destra

	def __str__(self):
		return str(self.Contenuto)
Devo poter salvare questi Alberi su un file:
Codice:
def SalvaAlbero(Albero, Livello = 0):
	if Albero == None: return
	SalvaAlbero(Albero.Destra, Livello+1)
	if Albero.Destra == None and Albero.Sinistra != None:
		f.write(' '*Livello + ' ' + "\n")
	if Albero.Destra != None and Albero.Sinistra == None:
		f.write(' '*Livello + ' ' + "\n")
	else:
		f.write(' '*Livello + str(Albero.Contenuto))
	if "\n" not in Albero.Contenuto:
		f.write("\n")
	SalvaAlbero(Albero.Sinistra, Livello+1)
E infine, e qui viene la parte dove ho compiuto un errore che ancora non ho individuato, partendo da un file testo devo poter ricreare un Albero:
Codice:
def Componi():
	file = f.readlines()
	i = 0
	while i < len(file):
		stringa = file[i]
		if stringa[0] != " ":
			stringa = stringa[0:len(stringa)-1]
			Radice = Albero(stringa)
			del file[i]
		else:
			i += 1
	Scorri(Radice, file, Spazio = " ")
	return Radice

def Scorri(Radice, file, Spazio = " "):
	if Radice == None: return
	i = 0
	while i < len(file):
		if Spazio in file[i] and Spazio + " " not in file[i]:
			stringa = file[i]
			if Spazio == stringa[0:len(Spazio)]:
				stringa = stringa[0:len(stringa)-1]
				stringa = stringa[0:len(Spazio)].replace(" ", "") + stringa[len(Spazio):len(stringa)]
				Radice.Destra = Albero(stringa)
				del file[i]
				break
			else:
				continue
		if file[i] == Spazio + " ":
			Radice.Destra = None
			break
		else:
			i += 1
	i = 0
	while i < len(file):
		if Spazio in file[i] and Spazio + " " not in file[i]:
			stringa = file[i]
			if Spazio == stringa[0:len(Spazio)]:
				stringa = stringa[0:len(stringa)-1]
				stringa = stringa[0:len(Spazio)].replace(" ", "") + stringa[len(Spazio):len(stringa)]
				Radice.Sinistra = Albero(stringa)
				del file[i]
				break
			else:
				continue
		if file[i] == Spazio + " ":
			Radice.Sinistra = None
			break
		else:
			i += 1
	Scorri(Radice.Destra, file, Spazio + " ")
	Scorri(Radice.Sinistra, file, Spazio + " ")

f = open("/home/meurem/Scrivania/SaveTree", "w")          
Radice = Albero("a", Albero("b", Albero("3", Albero("7"), Albero("9"))), Albero("c", Albero("4", Albero("8")), Albero("6", Albero("12"), Albero("14"))))
SalvaAlbero(Radice)
f.close()
f = open("/home/meurem/Scrivania/SaveTree", "r")
Tree = Componi()
print Tree                    #a
print Tree.Sinistra           #b
print Tree.Destra             #c
print Tree.Sinistra.Sinistra  #3
print Tree.Sinistra.Destra    #None
print Tree.Sinistra.Sinistra.Sinistra #7
print Tree.Sinistra.Sinistra.Destra #9
print Tree.Destra.Destra #6
print Tree.Destra.Destra.Destra # 14
print Tree.Destra.Destra.Sinistra #12
print Tree.Destra.Sinistra #4
print Tree.Destra.Sinistra.Sinistra #8
print Tree.Destra.Sinistra.Destra #None
Al di là del fatto che ho scritto il tutto in modo un po' antiestetico, non riesco a capire come mai non tutti i print restituiscono il corretto valore (che per praticità ho anche scritto come commento a lato):
Codice:
a
b
c
3

None
None
6
14
12
4
8

[Finished in 0.0s]
So che è un po' lunghetto, ma spero riusciate ad aiutarmi perché le ho provate tutte D: Seguendo il programma passo passo, segnandomi ogni variazione di variabile su di un foglio, sembra che il tutto funzioni correttamente, e invece l'IDE mi sfasa alcuni risultati. Chiaramente l'errore è nei miei ragionamenti, non sto dicendo che sia nell'IDE. Ci sono per qualsiasi delucidazioni, visto che forse in certi punti il mio codice potrebbe apparire un po' strano.
Heretic Curse è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2013, 18:06   #2
Heretic Curse
Member
 
Iscritto dal: Mar 2011
Messaggi: 125
UP
Heretic Curse è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v