Forum >> Programmazione Python >> Videogames >> Tris

Pagina: 1

Non riesco ad avviare il programma, riporta un errore e non capisco perchè, inoltre ho provato anche si Geany su os Linux e riporta il solito errore..

grazie




errore:


Gioca a Tris!

Traceback (most recent call last):

File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>

start(fakepyfile,mainpyfile)

File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start

exec(open(mainpyfile).read(), __main__.__dict__)

File "<string>", line 132, in <module>

NameError: name 'letteraGiocatore' is not defined

[Program finished]





di seguito il codice:

import random


def disegna_tabella(tabella):

    print ("    |    |")
    print (" "+ tabella7+ "    |    "+ tabella8+ "    |    "+ tabella9)
    print ("    |    |")
    print("----‐-------------")
    print ("    |    |")
    print (" "+ tabella4+ "    |    "+ tabella5+ "    |    "+ tabella6)
    print ("    |    |")
    print("----‐-------------")
    print ("    |    |")
    print (" "+ tabella1+ "    |    "+ tabella2+ "    |    "+ tabella3)
    print ("    |    |")
    disegna_tabella([" "] * 10)
    
   
    def letteraGiocatore():
        lettera=""
        while not(lettera=="x" or lettera=="o"):
            print("vuoi la x o la o?")
            lettera=input().upper()
        if lettera=="x":
            return  ("x","o")
        else:
            return ("o","x")
            

    def chi_inizia():
        if random.randint(0,1)== 0:
            return "computer"
        else:
             return "giocatore"
             

    def gioca_ancora():
        print("Vuoi giocare ancora? (s=Si, n=No)")
        return input().lower().startswith("s")
        
        
    def fai_la_mossa(tabella, lettera, mossa):
        tabellamossa=lettera
        
        
    def il_vincitore(ta, le):
        return (
        (ta7== le and ta8 ==le and ta9==le) or 
        (ta4== le and ta5 ==le and ta6==le) or
        (ta1== le and ta2 ==le and ta3==le) or
        (ta7== le and ta4 ==le and ta1==le) or
        (ta8== le and ta5 ==le and ta2==le) or
        (ta9== le and ta6 ==le and ta3==le) or
        (ta7== le and ta5 ==le and ta3==le) or
        (ta9== le and ta5 ==le and ta1==le))
    

    def spazio_libero(tabella, mossa):
        return tabellamossa== " "
        
        
    def crea_copia_tabella(tabella):
        copiaTab=[]
        for i in tabella:
            copiaTab.append(i)
        return copiaTab
        
        
    def mossa_giocatore(tabella):
     mossa=" "
     while mossa not in "1 2 3 4 5 6 7 8 9".split() or not spazio_libero(tabella,int(mossa)):
         print("Quale sarà la tua prossima mossa? (1-9)")
         mossa=input()
     return int(mossa)
     
     
    def fai_mossa_casuale_da_lista(tabella, lista_mosse):
        possibili_mosse=[]
        for i in lista_mosse:
            if spazio_libero(tabella,i):
                possibili_mosse.append(i)
        if len(possibili_mosse)!=0:
            return random.choice(possibili_mosse)
        else:
            return None
            

    def mossa_computer(tabella, lettera_computer):
        if lettera_computer=="X":
            lettera_giocatore="O"
        else:
            lettera_giocatore="X"
        for i in range(1, 10):
            copia=crea_copia_tabella(tabella)
            if spazio_libero(copia, i):
                fai_la_mossa(copia, lettera_computer, i)
                if il_vincitore(copia, lettera_computer):
                    return i                   
        for i in range(1,10):
            copia=crea_copia_tabella(tabella)
            if spazio_libero(copia, i):
                fai_la_mossa(copia, lettera_giocatore, i)
                if il_vincitore(copia, lettera_giocatore):
                    return i
                    mossa=fai_mossa_casuale_da_lista(tabella[1,3,7,9])
        if mossa !=None:
            return mossa            
        if spazio_libero(tabella, 5):
            return 5            
        return fai_mossa_casuale_da_lista(tabella, [2,4, 6, 8])
        
        
    def tabella_completa(tabella):
        for i in range(1, 10):
            if spazio_libero(tabella, i):
                return False
            else:
                return True
                
                
        
        
        
        

print('Gioca a Tris!')

while True:
    la_tabella=[" "]*10
    lettera_giocatore, lettera_computer = letteraGiocatore()
    turno=chi_inizia()
    print("il "+turno+ " parte per primo.")
    partita_corso=True
    
    
    while partita_in_corso:
        if turno == 'giocatore':
            # Tocca al giocatore.
            disegna_tabella(la_tabella)
            mossa = mossa_giocatore(la_tabella)
            fai_la_mossa(la_tabella, lettera_giocatore, mossa)
            
            if il_vincitore(la_tabella,lettera_giocatore):
                disegna_tabella(la_tabella)
                print ("evviva, hai vinto!")
                partita_corso=False
            else:
                if tabella_completa(la_tabella):
                    disegna_tabella(la_tabella)
                    print ("la partita è finita in pareggio.")
                    break
                else:   

                     turno="computer"
        else:
                mossa=mossa_computer(la_tabella, lettera_computer)
                fai_la_mossa(la_tabella, lettera_computer, mossa)
                
                if il_vincitore(la_tabella, lettera_computer):
                    disegna_tabella(la_tabella)
                    print ("il computer ti ha sconfitto. Hai perso!")
                    partita_corso=False
                else:
                    if tabella_completa(la_tabella):
                        disegna_tabella(la_tabella)
                        print ("La partitita è finita in parità.")
                        break
                    else:
                        turno="giocatore"
                        
                        if not gioca_ancora():break


L'errore
\NameError: name 'letteraGiocatore' is not defined

è quello che al momento blocca il Tuo script, questo errore è prodotto dalla circostanza che nel codice la funzione "letteraGiocatore()" è una funzione interna della funzione "disegna_tabella(tabella)", quindi NON È visibile nello spazio dei nomi del modulo.
... quando risolverai questo specifico problema, Ti si ripresenterà alla invocazione delle funzioni "chi_inizia()", "crea_copia_tabella(tabella)", etc ... tutte interne a disegna_tabella.

Per il resto, non ho valutato l'insieme del codice però mi chiedo se sia Tuo e perché Tu lo stia scrivendo.

La difficoltà da Te esposta tocca uno degli aspetti basilari di python, il che mi fa ritenere che Tu sia nuovo al linguaggio e consigliarTi la lettura almeno del capitolo 9.2 del tutorial (trovi il link nella sezione documentazione, vi è anche per la versione in italiano)




EDIT: corretto il riferimento al capitolo, in precedenza era errato.




--- Ultima modifica di nuzzopippo in data 2024-06-13 08:49:54 ---

--- Ultima modifica di nuzzopippo in data 2024-06-13 08:50:28 ---
Fatti non foste a viver come bruti...


Pagina: 1



Esegui il login per scrivere una risposta.