Implementació del joc Wordlet i validació de Sudoku en Python
Enviado por Programa Chuletas y clasificado en Francés
Escrito el en
catalán con un tamaño de 9,13 KB
Joc del Vaixells
Codi del Joc
import vaixells
taulell=vaixells.taulell_1
def es_tocat (taulell, fila, columna):
tocat=False
if taulell[fila][columna] == "$":
tocat=True
return tocat
def es_enfonsat (taulell, fila, columna):
enfonsat=False
col=columna+1
while col<len(taulell[fila]) and taulell[fila][col]=="*":
col+=1
if (col<len(taulell[fila]) and taulell[fila][col]==".") or col==len(taulell[fila]):
col=columna-1
while col>=0 and taulell[fila][col]=="*":
col-=1
if (col>=0 and taulell[fila][col]==".") or col<0:
enfonsat=True
return enfonsat
def mostrar (taulell):
for fila in range (len (taulell)):
fila_str=""
for columna in range (len (taulell [fila])-1):
fila_str+=str (taulell [fila][columna]) + " "
fila_str+=str (taulell [fila][len (taulell [fila])-1])
print (fila_str)
Codi de la Interfície
guanya=False
intents=0
vaixells_enfonsats=0
while guanya==False and intents<15:
fila=int (input ("Diguem una fila: "))
columna=int (input ("Diguem una columna: "))
if es_tocat (taulell, fila, columna):
taulell[fila][columna]="*"
if es_enfonsat (taulell, fila, columna):
vaixells_enfonsats+=1
if vaixells_enfonsats==5:
guanya=True
print ("Tocat i enfonsat")
else:
print ("Tocat")
else:
print ("Aigua")
mostrar (taulell)
intents+=1
if guanya==True:
print ("Felicitats!, has guanyat.")
else:
print ("Em sap greu, no has guanyat.")
Validació de Sudoku
Codi de Validació de Files
import taulells
def es_valida_fila (taulell, fila):
# Aquesta llista s'utilitza per saber si hi ha números repetits.
repetits=[False,False,False,False,False,False,False,False,False]
valida=True
columna=0
# Mentre la fila sigui vàlida, continuo validant les columnes.
while columna<len (taulell[fila]) and valida==True:
if taulell[fila][columna]>=1 and taulell[fila][columna]<=9:
valor=taulell[fila][columna]
# Si la posició de repetits correponent al valor és False, canvio a True.
if repetits[valor-1]==False:
repetits[valor-1]=True
# Si la posició de repetits correponent al valor és True, el valor està repetit.
else:
valida=False
elif taulell[fila][columna]!=0:
valida=False
columna+=1
return valida
Codi de Validació de Columnes
def es_valida_columna (taulell, columna):
# Aquesta llista s'utilitza per saber si hi ha números repetits.
repetits=[False,False,False,False,False,False,False,False,False]
valida=True
fila=0
# Mentre la fila sigui vàlida, continuo validant les columnes.
while fila<len (taulell) and valida==True:
if taulell[fila][columna]>=1 and taulell[fila][columna]<=9:
valor=taulell[fila][columna]
# Si la posició de repetits correponent al valor és False, canvio a True.
if repetits[valor-1]==False:
repetits[valor-1]=True
# Si la posició de repetits correponent al valor és True, el valor està repetit.
else:
valida=False
elif taulell[fila][columna]!=0:
valida=False
fila+=1
return valida
Codi de Validació de Quadrants
def es_valid_quadrant (taulell, quadrant):
# Quines son les coordenades del quadrant dins el taulell??
fila_inicial=(quadrant//3)*3
columna_inicial=(quadrant%3)*3
# Aquesta llista s'utilitza per saber si hi ha números repetits.
repetits=[False,False,False,False,False,False,False,False,False]
valida=True
fila=fila_inicial
columna=columna_inicial
# Mentre la fila del quadrant sigui vàlida, continuo validant.
while fila<len (taulell) and fila<fila_inicial+3 and valida==True:
columna=columna_inicial
# Mentre la columna del quadrant sigui vàlida, continuo validant.
while columna<len (taulell[fila]) and columna<columna_inicial+3 and valida==True:
if taulell[fila][columna]>=1 and taulell[fila][columna]<=9:
valor=taulell[fila][columna]
# Si la posició de repetits correponent al valor és False, canvio a True.
if repetits[valor-1]==False:
repetits[valor-1]=True
# Si la posició de repetits correponent al valor és True, el valor està repetit.
else:
valida=False
elif taulell[fila][columna]!=0:
valida=False
columna+=1
fila+=1
return valida
Codi Principal de Validació
taulell=taulells.taulell_1
# Mostrar el taulell a validar
for fila in range (len (taulell)):
fila_str=""
for columna in range (len (taulell [fila])-1):
fila_str+=str (taulell [fila][columna]) + " "
fila_str+=str (taulell [fila][len (taulell [fila])-1])
print (fila_str)
# Validar totes les files.
valida=True
fila=0
while fila<len (taulell) and valida==True:
if (es_valida_fila (taulell, fila)==False):
valida=False
fila+=1
print ("Les files del Sudoku son", valida)
# Validar totes les columnes.
valida=True
columna=0
while columna<len (taulell) and valida==True:
if (es_valida_columna (taulell, columna)==False):
valida=False
columna+=1
print ("Les columnes del Sudoku son", valida)
# Validar tots els quadrants.
valida=True
quadrant=0
while quadrant<len (taulell) and valida==True:
if (es_valid_quadrant (taulell, quadrant)==False):
valida=False
quadrant+=1
print ("Els quadrants del Sudoku son", valida)Joc Wordlet
Conceptes Bàsics de Strings
NOTA:
En Python, els strings o paraules no permeten modificar una determinada posició o lletra.
Per fer-ho em de crear una nova paraula concatenant:
part inicial + "Nova lletra" + part final
Per exemple: Imaginem que tenim la paraula: TABLA i volem canviar la "B" per una "U",
paraula="TABLA"
paraula_nova=paraula[0:2] + "U" + paraula[3:5]
paraules=["cotxe", "cases", "taula"]
Aquesta funció determina si una lletra existeix en una paraula.
Si la lletra existeix:
* True.
Si la lletra NO existeix:
* False
'''
def existeix (paraula, lletra):
# Procediment de recorre la paraula per trobar la posició
k=0
trobat=False
while k<len (paraula) and not trobat:
if (paraula[k]==lletra):
trobat=True
else:
k+=1
return trobat
Comparació de Lletres
'''
Aquesta funció determina si la lletra d'una determina posició de dues paraules és igual.
Si la lletra és igual:
* True.
Si la lletra NO és igual:
* False
'''
def iguals (paraula_1, paraula_2, posicio):
# Procediment per comprovar si dues lletres son iguals en una determinada posició.
iguals=False
if paraula_1[posicio]==paraula_2[posicio]:
iguals=True
return iguals
Implementació de Wordlet (Versió 1)
'''
Aquest funció determina per cada lletra si:
* És la mateixa que la paraula secreta.
* Existeix en la paraula secreta, però la posició no és correcta.
* No existeix.
Retorna la paraula "pista"
'''
def wordlet_1 (paraula_secreta, paraula_usuari):
paraula_resultat="*****"
for i in range (len (paraula_usuari)):
if iguals (paraula_usuari, paraula_secreta, i):
paraula_resultat = paraula_resultat[0:i] + paraula_secreta[i] + paraula_resultat[i+1:len (paraula_resultat)]
elif existeix (paraula_secreta, paraula_usuari[i]):
paraula_resultat = paraula_resultat[0:i] + "?" + paraula_resultat[i+1:len (paraula_resultat)]
return paraula_resultat
Implementació de Wordlet (Versió 2)
'''
Aquest funció determina per cada lletra si:
* És la mateixa que la paraula secreta.
* Existeix en la paraula secreta, però la posició no és correcta.
* No existeix.
Retorna la paraula "pista"
'''
def wordlet_2 (paraula_secreta, paraula_usuari):
paraula_resultat=""
for i in range (len (paraula_usuari)):
if iguals (paraula_usuari, paraula_secreta, i):
paraula_resultat += paraula_secreta[i]
elif existeix (paraula_secreta, paraula_usuari[i]):
paraula_resultat += "?"
else:
paraula_resultat += "*"
return paraula_resultat
resultat=wordlet_1 ("cotxe", "torre")
print (resultat)
resultat=wordlet_1 ("taula", "tabla")
print (resultat)
resultat=wordlet_2 ("cotxe", "torre")
print (resultat)
resultat=wordlet_2 ("taula", "tabla")
print (resultat)