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... |
|
|
Scritto da Nadia Eira |
2024-10-19 08:29:15 - Re: Tris
|
|
Scritto da lychnisalkali |
2025-01-13 08:43:05 - Re: Tris
|
|
Scritto da Esperanza |
2025-09-12 11:30:36 - Re: Tris
|
Pagina: 1
Esegui il login per scrivere una risposta.


