Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Testo non chiaro hw4bis es2

G
Gianluca98 (810 points)
3 14 25
in HW4bis by (810 points)
Salve, vorrei chiederle se gentilmente può rispiegare tutti i punti (dal punto A ad F) dell'esercizio 2 hw4 bis, dato che non ho capito praticamente nulla e le domande gia poste non mi hanno aiutato molto.
Volevo inoltre sapere il tipo dell'input della funzione es2().
Grazie.
534 views
closed

1 Answer

Best answer
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
selected by
  • l'input è una istanza della classe albero
  • l'albero va esplorato ricorsivamente per costruirne la rappresentazione testuale
  • caso base: il nodo è una foglia
    • in questo caso la rappresentazione testuale è data dalla stringa di due caratteri della sua etichetta
  • caso ricorsivo: esiste almeno un figlio
    • tutte le stringhe che rappresentano i sottoalberi dei figli vanno opportunamente incollate una a fianco all'altra con l'accortezza di:
      • fare in modo che abbiano tutti la stessa altezza (numero di righe) aggiungendo se necessario delle righe vuote sotto i più corti
      • inserire due spazi di separazione tra le righe di ciascun sottoalbero e il suo vicino
    • in testa vanno aggiunte le 3 righe che rappresentano il padre con i collegamenti ai sottoalberi
      • per far questo bisogna sapere, per ciascun sottoalbero, dove di trova la sua radice nella prima stringa

Prova a farlo con un editor di testo (di costruire due alberi e incollarli una a fianco dell'altro aggiungendo la radice), così è più chiaro.

G
Gianluca98 (810 points)
3 14 25
by (810 points)
Scusi prof, ho fatto l'esercizio e la stringa è palesemente la stessa di quella attesa, solo che se vado a testare mi dice cosi:

test_albero_12_nodi (__main__.Test)
... ERROR
test_albero_17_nodi (__main__.Test)
... ERROR
test_albero_41_nodi (__main__.Test)
... ERROR
test_albero_5_nodi (__main__.Test)
... ERROR

======================================================================
ERROR: test_albero_12_nodi (__main__.Test)
...
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 54, in test_albero_12_nodi
    return self.do_test(r1, stringa1)
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 19, in do_test
    result   = program.es2(rad)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 85, in es2
    k=funzione(r)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 93, in funzione
    valore=albero.Albero(r[0])
TypeError: 'Albero' object does not support indexing

======================================================================
ERROR: test_albero_17_nodi (__main__.Test)
...
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 76, in test_albero_17_nodi
    return self.do_test(r2, stringa2)
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 19, in do_test
    result   = program.es2(rad)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 85, in es2
    k=funzione(r)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 93, in funzione
    valore=albero.Albero(r[0])
TypeError: 'Albero' object does not support indexing

======================================================================
ERROR: test_albero_41_nodi (__main__.Test)
...
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 99, in test_albero_41_nodi
    return self.do_test(r3, stringa3)
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 19, in do_test
    result   = program.es2(rad)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 85, in es2
    k=funzione(r)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 93, in funzione
    valore=albero.Albero(r[0])
TypeError: 'Albero' object does not support indexing

======================================================================
ERROR: test_albero_5_nodi (__main__.Test)
...
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 36, in test_albero_5_nodi
    return self.do_test(r0, stringa0)
  File "C:/Users/circe/Desktop/HW4bis/test_02.py", line 19, in do_test
    result   = program.es2(rad)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 85, in es2
    k=funzione(r)
  File "C:\Users\circe\Desktop\HW4bis\program02.py", line 93, in funzione
    valore=albero.Albero(r[0])
TypeError: 'Albero' object does not support indexing

----------------------------------------------------------------------
Ran 4 tests in 0.016s

FAILED (errors=4)
4 test passed, 0 tests failed

Ora, io ho considerato fin dall'inizio che l'input sia una lista di liste tipo questa:

['60', [['66', [['56', [['36', [['70', []], ['99', []], ['05', []]]], ['33', [['28', []], ['52', []], ['80', []], ['84', []]]],
        ['55', [['79', []], ['66', []]]]]], ['58', [['67', [['48', []], ['80', []], ['16', []]]], ['66', [['57', []]]], ['05', []]]],
        ['19', [['54', [['28', []], ['86', []]]], ['50', [['84', []]]]]]]], ['25', [['96', []], ['77', [['52', [['03', []]]],
        ['42', [['89', []]]], ['72', [['94', []], ['87', []], ['85', []], ['26', []]]]]]]]]]

e poi la converto subito in istanza di albero cosi:

valore=albero.Albero(r[0])  #r è l'input della funzione

E' sbagliato? (Ho consegnato anche l'esercizio così nel caso può vedere)
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
No, l'input un oggetto della classe Albero

guarda nel file albero.py com'è definita la classe
G
Gianluca98 (810 points)
3 14 25
by (810 points)
Quindi per cedere se ho capito bene.
Se nella funzione faccio subito r.id mi da il valore, mentre se faccio r.f mi da la lista dei figli. Giusto?
G
Gianluca98 (810 points)
3 14 25
by (810 points)
Sono riuscito a fare tutto. Grazie prof.