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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

programma 02 homework 4

t
teresa (960 points)
3 9 17
in Es2 by (960 points)
recategorized by
Quando clicco su Run appare questo:

runfile('/Users/teresa/Desktop/homework04/es2/program02.py', wdir='/Users/teresa/Desktop/homework04/es2')
Reloaded modules: testlib, program01
Traceback (most recent call last):

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2879, in run_code
    self.showtraceback(running_compiled_code=True)

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 1792, in showtraceback
    self.showsyntaxerror(filename, running_compiled_code)

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 1854, in showsyntaxerror
    stb = self.SyntaxTB.structured_traceback(etype, value, elist)

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/site-packages/IPython/core/ultratb.py", line 1406, in structured_traceback
    newtext = linecache.getline(value.filename, value.lineno)

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/linecache.py", line 16, in getline
    lines = getlines(filename, module_globals)

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/linecache.py", line 47, in getlines
    return updatecache(filename, module_globals)

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/linecache.py", line 137, in updatecache
    lines = fp.readlines()

  File "/Users/teresa/Desktop/anaconda3/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 500: invalid continuation byte

E' dovuto a qualche sciocchezza che ho scritto nel programma?

Tra l'altro , non riesco a scaricare la versione zip dell'homework 4.

Ringrazio anticipatamente chiunque mi possa aiutare.

Teresa
760 views

1 Answer

P
Powner (5600 points)
36 68 85
by (5.6k points)
edited by
è un problema che abbiamo avuto in diversi.

Io ho risolto cancellando la traccia dell'esercizio (ovvero il mega-commento che spiega le richieste), ci deve essere qualche carattere problematico lì.

(Che poi in realtà io ho riavuto lo stesso problema anche dopo, me ne sono lamentato qui sul forum ma niente ha funzionato, alla fine ho copia-incollato il codice in un nuovo file .py e ha smesso di darmi quel problema)

Prova a fare almeno una di queste due cose e dovresti risolvere!
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
Sarà colpa delle maledette accentate che stavolta mi sono dimenticato di togliere?
Provate a sostituire tutte le accentate con lettere apostrofate e fatemi sapere, plis.
è -> e'
à -> a'
eccetera
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
A me aveva dato quest'errore perchè avevo corretto i caratteri codificati male con le lettere corrette :D
Poi ripristinato e si è fixato
P
Powner (5600 points)
36 68 85
by (5.6k points)
In realtà la sostituzione di lettere accentate con lettere apostrofate è la prima cosa che ho fatto (anche se dubbioso, visto che non mi avevano mai dato problemi) ma non è cambiato niente, poi non so (think)

Ah anche io avevo fatto la stessa cosa di Leonardo :^)
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
Se me ne mandate una copia corretta la confronto con quello nello zip
t
teresa (960 points)
3 9 17
by (960 points)
Grazie, con il programma funziona togliendo il testo dell'esercizio ma con il grade no. Ho provato a controllare le lettere accentate (ho fatto diventare tutte le 'è' congiunzioni ma niente).
Grazie comunque perché almeno una parte è risolta.
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
prova a consegnarlo, magari qui su Linux l'errore non lo da
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
Ma lo esegui con ipython o con python? devi usare python
t
teresa (960 points)
3 9 17
by (960 points)
Uso Spyder (Python 3.6).
Ho provato a sottometterlo e sto aspettando il risultato.
Uso questo grade:
#! /usr/bin/env python3 -B

from testlib import check, runtests

from  program02 import *
g0=[['', '', ''], ['', '', ''], ['', '', '']]
g1=[['x', 'o', 'o'], ['x', 'x', 'o'], ['', '', '']]
g2=[['x', 'o', 'o'], ['x', 'x', 'o'], ['o', 'x', 'o']]
g3=[['x', 'o', 'o'], ['x', 'x', 'o'], ['o', '', 'x']]
g4=[['o', 'x', 'x'], ['x', 'o', 'o'], ['o', 'o', 'x']]

g5=[['', 'x', ''], ['', 'o', ''], ['', '', '']]
g6=[['', 'o', ''], ['', 'x', ''], ['', '', '']]
g7=[['', 'x', 'o'], ['', '', ''], ['', '', '']]
g8=[['', 'o', 'x'], ['', '', ''], ['', '', '']]

lista=[g1, g2, g3, g4]
listab=[g5, g6, g7, g8]
lista1=[gen_tree(x) for x in lista]
rad=None

def test_program2_1():
    '''\nsi applica il metodo tipo() a 4 diversi nodi della classe  NodoTris.
    I 4 nodi sono radici di alberi da gioco che partono dalle seguenti configurazioni\n
    [['x', 'o', 'o'], ['x', 'x', 'o'], ['', '', '']]\n
    [['x', 'o', 'o'], ['x', 'x', 'o'], ['o', 'x', 'o']]\n
    [['x', 'o', 'o'], ['x', 'x', 'o'], ['o', '', 'x']]\n
    [['o', 'x', 'x'], ['x', 'o', 'o'], ['o', 'o', 'x']]\n
    '''
    args        = ''
    expected    = ['?', 'o', 'x', '-']
    explanation = "il secondo e' l'output corretto"
    lista=[y.tipo() for y in lista1]
    check(lista, expected, args, explanation,'')
    return 1
    

def test_program2_2():
    '''\nsi applica il metodo esiti() a 4 diversi nodi della classe  NodoTris.
    I 4 nodi sono radici di alberi da gioco che partono dalle seguenti configurazioni\n
    [['x', 'o', 'o'], ['x', 'x', 'o'], ['', '', '']]\n
    [['x', 'o', 'o'], ['x', 'x', 'o'], ['o', 'x', 'o']]\n
    [['x', 'o', 'o'], ['x', 'x', 'o'], ['o', '', 'x']]\n
    [['o', 'x', 'x'], ['x', 'o', 'o'], ['o', 'o', 'x']]\n
    '''
    args        = ''
    expected    = [(0, 2, 3), (0, 1, 0), (0, 0, 1), (1, 0, 0)]
    explanation = "il secondo e' l'output corretto"
    lista=[y.esiti() for y in lista1]
    check(lista, expected, args, explanation,'')
    return 1
    
def test_program2_3():
    '''\nsi applica il metodo vittorie_livelli() all'albero di gioco che ha il nodo  radice
    che rappresenta la configurazione  [['x', 'o', 'o'], ['x', 'x', 'o'], ['', '', '']].
    Si chiede di restituire la lista con le vittorie del giocatore 'o' ai livelli che vanno da 0 a 3.
    '''
    args        = ''
    expected    = [0, 1, 0, 1]
    explanation = "il secondo e' l'output corretto"
    lista=[lista1[0].vittorie_livello('o',h) for h in range(4)]
    check(lista, expected, args, explanation,'')
    return 1
    
def test_program2_4():
    '''\nsi applica il metodo vittorie_livelli() all'albero di gioco che ha il nodo  radice
    che rappresenta la configurazione  [['x', 'o', 'o'], ['x', 'x', 'o'], ['', '', '']].
    Si chiede di restituire la lista con le vittorie del giocatore 'x' ai livelli che vanno da 0 a 3.
    '''
    args        = ''
    expected    = [0, 0, 3, 0]
    explanation = "il secondo e' l'output corretto"
    lista=[lista1[0].vittorie_livello('x',h) for h in range(4)]
    check(lista, expected, args, explanation,'')
    return 1

def test_program2_5():
    '''\nsi applica il metodo strategia_vincente() all'albero di gioco che ha il nodo  radice
    che rappresenta la configurazione  [['x', 'o', 'o'], ['x', 'x', 'o'], ['', '', '']].
    Chiede di restituire la lista con  la risposta del metodo per il giocatore  'x'
    e poi quella per il giocatore 'o'.
    '''
    args        = ''
    expected    = [False, True]
    explanation = "il secondo e' l'output corretto"
    lista=[lista1[0].strategia_vincente('x'), lista1[0].strategia_vincente('o')]
    check(lista, expected, args, explanation,'')
    return 1

def test_program2_6():
    '''\nsi applica il metodo esiti() al nodo radice dell'albero di gioco che
    rappresenta la configurazione iniziale dove tutte le celle sono libere.  

    '''
    global rad
    rad=gen_tree(g0)
    args        = ''
    expected    = (46080, 131184, 77904)
    explanation = "il secondo e' l'output corretto"
    t=rad.esiti()
    check(t, expected, args, explanation,'')
    return 1

def test_program2_7():
    '''\nsi applica il metodo vittorie_livello() al nodo radice dell'albero di gioco che
    rappresenta la configurazione iniziale dove tutte le celle sono libere.\n  Bisogna restituire la
    lista coi numeri di nodi che rappresentano vittorie  del giocatore 'o' e che si trovano nell'albero
    ai livelli che vanno da 0 a 9.
    '''
    args        = ''
    expected    = [0, 0, 0, 0, 0, 1440, 0, 47952, 0, 81792]
    explanation = "il secondo e' l'output corretto"
    lista=[rad.vittorie_livello('o',h) for h in range(10)]
    check(lista, expected, args, explanation,'')
    return 1

def test_program2_8():
    '''\nsi applica il metodo vittorie_livello() al nodo radice dell'albero di gioco che
    rappresenta la configurazione iniziale dove tutte le celle sono libere.\n  Bisogna restituire la
    lista coi numeri di nodi che rappresentano vittorie  del giocatore 'x' e che si trovano nell'albero
    ai livelli che vanno da 0 a 9.
    '''
    args        = ''
    expected    = [0, 0, 0, 0, 0, 0, 5328, 0, 72576, 0]
    explanation = "il secondo e' l'output corretto"
    lista=[rad.vittorie_livello('x',h) for h in range(10)]
    check(lista, expected, args, explanation,'')
    return 1
 
def test_program2_9():
    '''\nsi applica il metodo esiti() ai 4 nodi radice degli alberi  di gioco che
    rappresentano  le seguenti 4 configurazioni iniziali: \n
    [['', 'x', ''], ['', 'o', ''], ['', '', '']]\n
    [['', 'o', ''], ['', 'x', ''], ['', '', '']]\n
    [['', 'x', 'o'], ['', '', ''], ['', '', '']]\n
    [['', 'o', 'x'], ['', '', ''], ['', '', '']]\n
    Bisogna restituire la lista con le 4 risposte per il giocatore 'o'.
    '''
    global lista1
    args        = ''
    expected    = [(576, 2082, 612), (720, 1438, 1652), (864, 2048, 756), (864, 1798, 1276)]
    explanation = "il secondo e' l'output corretto"
    lista1= [gen_tree(x) for x in listab]
    lista2=[y.esiti() for y in lista1]
    check(lista2, expected, args, explanation,'')
    return 1   

def test_program2_10():
    '''\nsi applica il metodo strategia_vincente() ai 4 nodi radice degli alberi  di gioco che
    rappresentano  le seguenti 4 configurazioni iniziali: \n
    [['', 'x', ''], ['', 'o', ''], ['', '', '']]\n
    [['', 'o', ''], ['', 'x', ''], ['', '', '']]\n
    [['', 'x', 'o'], ['', '', ''], ['', '', '']]\n
    [['', 'o', 'x'], ['', '', ''], ['', '', '']]\n
    Bisogna restituire la lista con le 4 risposte per il giocatore 'o'.
    '''
    args        = ''
    expected    = [True, False, True, False]
    explanation = "il secondo e' l'output corretto"
    lista2=[y.strategia_vincente('o') for y in lista1]
    check(lista2, expected, args, explanation,'')
    return 1
    

    
tests = [
        test_program2_1,
        test_program2_2,
        test_program2_3,
        test_program2_4,
        test_program2_5,
        test_program2_6,
        test_program2_7,
        test_program2_8,
        test_program2_9,
        test_program2_10,
        ]


if __name__ == '__main__':
    runtests(tests)

Teresa
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
mi ero dimenticato di mettere encoding='utf8' nelle open, ho aggiornato le librerie e il file zip dello homework
Prova con le versioni nuove