Ciao @matteo
premetto che non ho nessuna esperienza di programmazione e sto preparando un esame all'università.
Ahi!
mi stavo esercitando su classi, listelinkate e alberi... riporto uno script che sto facendo per esercitarmi ma non capisco perche mi da errore :AttributeError: 'str' object has no attribute 'val'
Il discorso è semplice, quando Tu istanzi il Tuo oggetto Lista assegni "e" alla proprietà lista.next ed è e una stringa, tipo di oggetto che NON possiede la proprietà "val"
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> class Lista():
def __init__(self, val=None, next_e=None):
self.val = val
self.next = next_e
def __repr__(self):
return f'valore: {self.val}, prossimo: {self.next}'
>>> l = Lista('w', 'e')
>>> l
valore: w, prossimo: e
>>> type(l)
<class '__main__.Lista'>
>>> type(l.next)
<class 'str'>
P.S. : "next" è una funzione builtin di python, eviterei di usarlo quale nome di variabile
Confesso di NON essere un informatico, sono solo uno scarso autodidatta che sta cercando di apprendere python, ma stando a
wikipedia una lista linkata sarebbe :
In informatica, una lista concatenata (o linked list) è una struttura dati dinamica, tra quelle fondamentali usate nella programmazione. Consiste di una sequenza di nodi, ognuno contenente campi di dati arbitrari ed uno o due riferimenti ("link") che puntano al nodo successivo e/o precedente
... ora, cosa è l'oggetto "Lista()" da Te definito? ... sbaglierò ma così, ad orecchio, sembrerebbe che con esso Tu voglia definire un "nodo" costituente un elemento di una collezione di nodi; se così fosse la proprietà next dovrebbe puntare ad un oggetto "Lista" non ad una stringa ... abbisognerebbe, quindi, un insieme di oggetti "Lista" da referenziare, proviamo a definirne uno con il Tuo oggetto, magari che punti al Tuo nik-name
>>> nik = 'matteo.bas'
>>> linked_nik = [Lista(c) for c in nik]
>>> for i in range(len(linked_nik) -1):
linked_nik[i].next = linked_nik[i+1]
>>> linked_nik[0]
valore: m, prossimo: valore: a, prossimo: valore: t, prossimo: valore: t, prossimo: valore: e, prossimo: valore: o, prossimo: valore: ., prossimo: valore: b, prossimo: valore: a, prossimo: valore: s, prossimo: None
>>> linked_nik[6]
valore: ., prossimo: valore: b, prossimo: valore: a, prossimo: valore: s, prossimo: None
>>> type(linked_nik[0])
<class '__main__.Lista'>
>>> type(linked_nik[0].next)
<class '__main__.Lista'>
>>>
... sorprendente, vero? Ma un oggetto "Lista" è una linked list? ... qui entra in ballo la mia ignoranza, agli utenti più esperti la parola, come potremmo, comunque utilizzarlo, ad esempio per stampare il nick?, così?
>>> l = linked_nik[0]
>>> while not l.next == None:
print(l.val, end='')
l = l.next
else:
print(l.val)
matteo.bas
>>>
... discorso senz'altro da approfondire, e parecchio pure