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)