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)

Entradas relacionadas: