Forum
>>
Programmazione Python
>>
Videogames
>>
Tris
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Wiz ![]() |
2024-06-12 19:23:29 - Tris
|
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 |
|
Scritto da nuzzopippo ![]() |
2024-06-13 08:40:05 - Re: Tris
|
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.