Diferència entre revisions de la pàgina «ASIX-M3-UF1-A4.1- Solucions Exercicis cadenes»

De wikiserver
Dreceres ràpides: navegació, cerca
 
(10 revisions intermèdies per 2 usuaris que no es mostren)
Línia 1: Línia 1:
 +
== A4.1 Exercicis Cadenes ==
 +
 
1. L’última lletra del DNI pot calcular-se a partir del seus números. Per a això només has de dividir el número per 23 i quedar-te amb la resta. Fes un programa per calcular la lletra d’un DNI. La lletra que correspon a cada número la tens en aquesta taula:
 
1. L’última lletra del DNI pot calcular-se a partir del seus números. Per a això només has de dividir el número per 23 i quedar-te amb la resta. Fes un programa per calcular la lletra d’un DNI. La lletra que correspon a cada número la tens en aquesta taula:
 
<pre>
 
<pre>
Línia 25: Línia 27:
 
   22 – E
 
   22 – E
 
</pre>
 
</pre>
 +
  
 
<source lang = "python">
 
<source lang = "python">
Línia 42: Línia 45:
 
print("El número de DNI: %d li correspon la lletra: %s" %(numDNI,LLETRESDNI[numCalcul]))
 
print("El número de DNI: %d li correspon la lletra: %s" %(numDNI,LLETRESDNI[numCalcul]))
 
</source>
 
</source>
 +
<!---->
  
 
2. Fes un programa per que verifiqui que la lletra d’un DNI es correspon amb el seu número:
 
2. Fes un programa per que verifiqui que la lletra d’un DNI es correspon amb el seu número:
 +
  
 
<source lang = "python">
 
<source lang = "python">
Línia 68: Línia 73:
 
   print("És incorrecte!")
 
   print("És incorrecte!")
 
</source>
 
</source>
 +
<!---->
  
 
3. Genera un programa que encripti una cadena de caràcters. Per exemple: '“avadakedavra”' encriptat es '“bwbeblfebwsb”' i el mètode d’encriptació és canviar un caràcter pel seu successor a l’abecedari (el successor de ‘z’ és ‘a’).
 
3. Genera un programa que encripti una cadena de caràcters. Per exemple: '“avadakedavra”' encriptat es '“bwbeblfebwsb”' i el mètode d’encriptació és canviar un caràcter pel seu successor a l’abecedari (el successor de ‘z’ és ‘a’).
Línia 75: Línia 81:
  
 
# Constants
 
# Constants
LLETRES = "abcdefghijklmnopqrstvwxyza"   
+
LLETRES = "abcdefghijklmnopqrstuvwxyza"   
  
 
# Demanem cadena a encriptar
 
# Demanem cadena a encriptar
Línia 90: Línia 96:
 
</source>
 
</source>
 
<!---->
 
<!---->
 +
 +
4. Genera un programa que encripti una text de caràcters. Per exemple: '“hola que tal”' encriptat es '“ipmb@rvf@ubm”' i el mètode d’encriptació és canviar un caràcter pel seu successor a l’abecedari (el successor de ‘z’ és ‘a’ i el caràcter ' ' es substitueix per '@').
 +
 +
<source lang = "python">
 +
print("Encriptació d'un text")
 +
 +
# Constants
 +
LLETRES = "abcdefghijklmnopqrstuvwxyza @" 
 +
 +
# Demanem número DNI
 +
text = input("Introdueix el text a encriptar: ")
 +
 +
# Encriptació
 +
textEncriptat =""
 +
for carac in text:
 +
  posCaracter = LLETRES.find(carac)
 +
  textEncriptat += LLETRES[posCaracter+1]
 +
 +
# Mostrar el text encriptat
 +
print("Text encriptat:", textEncriptat)
 +
</source>
 +
<!---->
 +
 +
5. Feu un programa que si li passem un nom i un cognom com a paràmetres ens doni la benvinguda:
 +
<pre>
 +
    Benvingut Sr. ...
 +
    i si no l'hi donem digui :
 +
    Hola desconegut.
 +
</pre>
 +
 +
<source lang = "python">
 +
print("Programa amb arguments ")
 +
 +
# Importar llibreries
 +
import sys
 +
 +
# Comprovar número d'arguments
 +
if(len(sys.argv) == 3):
 +
 +
# Mostrar nom i cognom
 +
    print ("Benvingut Sr./Sra. %s %s" %(sys.argv[1], sys.argv[2]))
 +
 +
# Missatge si no hi ha 2 arguments
 +
else:
 +
    print ("Hola desconegut")
 +
</source>
 +
<!---->
 +
 +
6. Feu un programa que calculi la mitjana aritmètica dels valors passats com a paràmetres. Si no es passa cap paràmetre sortirà un missatge d’error i si el primer paràmetre és '''–ajut''' el programa traurà una petita explicació del funcionament.
 +
 +
<source lang = "python">
 +
print("Programa amb arguments: Mitjana de n números")
 +
 +
# Importar llibreries
 +
import sys
 +
 +
# Comprovar número d'arguments
 +
if(len(sys.argv) == 1):
 +
   
 +
    print("ERROR: Aquest programa necessita paràmetres")
 +
 +
# Comprovar si necessiten l'ajuda
 +
elif(sys.argv[1] == "-ajut"):
 +
        print ("Aquest programa calcula la mitjana dels valors passats com a arguments")
 +
 +
# Calculem la mitja dels arguments
 +
else:
 +
    suma = 0
 +
    for i in range(1,len(sys.argv)):
 +
        suma += int(sys.argv[i])
 +
    print ("Resultat de la mitjana és:", suma/(len(sys.argv)-1))
 +
</source>
 +
<!---->
 +
 +
7. Genereu un programa anomenat '''ComptaAsString''' que compti quantes lletres 'a' conté una cadena de text. El text per tractar pot ser qualsevol i el podeu declarar com una constant en el codi font.
 +
 +
versió 1
 +
<source lang = "python">
 +
print("Programa compar a's d'una frase")
 +
 +
# Entrada: frase a avaluar
 +
frase = input("Introdueix la frase a avaluar: ")
 +
 +
# Inicialitzar variables
 +
comptador = 0
 +
 +
# Comptar a's
 +
for i in range(len(frase)):
 +
    if frase[i] == 'a':
 +
      comptador += 1
 +
 +
# Mostrar el resultat
 +
print("Hi ha %d a's en la frase" %comptador)
 +
 +
</source>
 +
<!---->
 +
 +
versio 2
 +
<source lang = "python">
 +
 +
print("Programa comptar a's d'una frase")
 +
 +
# Entrada: frase a avaluar. Per ex: "La ment que s'obre a una nova idea, mai torna a la seva mida original."
 +
frase = input("Introdueix la frase a avaluar: "
 +
 +
# Inicialitzar variables
 +
comptador = 0
 +
pos = frase.find("a")
 +
# Comptar a's
 +
while pos != -1 :
 +
  comptador += 1
 +
  pos = frase.find("a",pos+1)
 +
# Mostrar el resultat
 +
print ("Hi ha %d a's en la frase" %comptador)
 +
</source>
 +
<!---->
 +
 +
8. Fes un programa que, primer demani a l’usuari escriure una rere l’altra, tres paraules que només continguin lletres minúscules. A continuació el programa ha d’escriure quina és la paraula més llarga i quina és l’alfabèticament menor.
 +
 +
 +
<source lang = "python">
 +
print("Programa ordenar paraules")
 +
 +
# Entrada de les paraules
 +
par1 = input("Introdueix la primera paraula: ")
 +
par2 = input("Introdueix la primera paraula: ")
 +
par3 = input("Introdueix la primera paraula: ")
 +
 +
# Cerquem la paraula més llarga
 +
mesLlarga = par1
 +
if len(mesLlarga) < len(par2):
 +
  mesLlarga = par2
 +
if len(mesLlarga) < len(par3):
 +
  mesLlarga = par3
 +
 +
# Cerquem la paraula lexicogràficament menor
 +
alfMenor = par1
 +
if alfMenor > par2:
 +
  alfMenor = par2
 +
if alfMenor > par3:
 +
  alfMenor = par3
 +
 +
# Reultats
 +
print("La paraula més llarga és: ", mesLlarga)
 +
print("La paraula lexicogràficament menor és: ", alfMenor)
 +
</source>
 +
<!---->
 +
 +
9. Fes un programa que llegeixi una frase i un número enter N i ens digui quines i quantes paraules tenen longitud N.
 +
 +
<source lang = "python">
 +
print("Programa paraules de N caràcters")
 +
 +
# Entrada de dades
 +
frase = input("Introdueix la frase a tractar: ")
 +
num = int(input("Introdueix el número de caràcters: "))
 +
 +
# Inicialització de variables
 +
numParaules = 0
 +
 +
# Recorregut de la frase mostrant les paraules de N caràcters
 +
print("Paraules de %d caràcters: " %num, end =' ')
 +
for par in frase.split():
 +
    if len(par) == num:
 +
      print(par, end=' ')
 +
      numParaules +=1
 +
print("Num paraules: ", numParaules)
 +
</source>
 +
<!---->
 +
 +
10. Fes un programa que llegeixi una frase i la mostri invertida.
 +
 +
<source lang = "python">
 +
print("Programa mostrar frase invertida")
 +
 +
# Entrada de dades
 +
frase = input("Introdueix la frase a invertir: ")
 +
 +
# Recorregut de la frase caràcter a caràcter començant pel final
 +
print("Frase invertida: ", end =' ')
 +
for car in range(len(frase)-1, -1, -1):
 +
      print(frase[car], end='')
 +
print()
 +
</source>
 +
<!---->
 +
 +
Altres opcions:
 +
print(frase[::-1])
 +
 +
for i in reversed(frase):
 +
  print(i, end='')
 +
print()
 +
 +
<!---->
 +
<source lang = "python">
 +
print("Programa mostrar frase invertida")
 +
 +
# Entrada de dades
 +
frase = input("Introdueix la frase a invertir: ")
 +
 +
# Imprimir la frase invertida
 +
print("Frase invertida: %s" %''.join(reversed(frase)))
 +
</source>
 +
<!---->
 +
 +
11. Volem un programa per treballar amb cadenes que mitjançant un menú ens permeti les següents opcions:
 +
 +
:*Mostrar els n primers caràcters d’una cadena
 +
:*Mostrar els n últims caràcters d’una cadena (d’esquerra a dreta)
 +
:*Eliminar els espais en blanc que hi hagi al final de la cadena
 +
:*Eliminar els espais en blanc que hi hagi al principi de la cadena
 +
:*Eliminar d’una cadena els n caràcters que apareixen a partir de la posició p
 +
:*Inserir una cadena dins d’una altra a partir de la posició p
 +
:*Comptar el nombre de vegades que apareix una cadena dins d’una altra
 +
:*Esborrar totes les aparicions d’una cadena dins d’una altra
 +
 +
 +
<source lang = "python">
 +
salir = False
 +
while not salir:
 +
        print("Menú de opciones")
 +
        print("----------------")
 +
        print("1. Mostrar els n primers caràcters d’una cadena\n"
 +
            + "2. Mostrar els n últims caràcters d’una cadena (d’esquerra a dreta)\n"
 +
            + "3. Eliminar els espais en blanc que hi hagi al final de la cadena\n"
 +
            + "4. Eliminar els espais en blanc que hi hagi al principi de la cadena\n"
 +
            + "5. Eliminar d’una cadena els n caràcters que apareixen a partir de la posició p\n"
 +
            + "6. Inserir una cadena dins d’una altra a partir de la posició p\n"
 +
            + "7. Comptar el nombre de vegades que apareix una cadena dins d’una altra\n"
 +
            + "8. Esborrar totes les aparicions d’una cadena dins d’una altra\n"
 +
            + "9. Sortir\n")
 +
        opcion = int(input("Introdueix una opció de menú: "))
 +
        cadena = input("Introdueix una cadena de text: ")
 +
        #numeric = int(input("Has d'introduir un valor numèric: "))
 +
        if opcion == 1:
 +
            n = int(input("Introdueix el nombre de caràcters a mostrar: "))
 +
            print(cadena[0:n])
 +
        elif opcion == 2: 
 +
            n = int(input("Introdueix el nombre de caràcters a mostrar: "))
 +
            print(cadena[-n:])
 +
        elif opcion == 3:
 +
            print(cadena.rstrip())
 +
        elif opcion == 4:
 +
            print(cadena.lstrip())
 +
        elif opcion == 5:
 +
            # Opción 1
 +
            n = int(input("Introdueix el nombre de caràcters a eliminar: "))
 +
            posini = int(input("Introdueix la posició inicial: "))
 +
            posfin = len(cadena)
 +
            print(cadena[:-(posfin-posini)] + cadena[n+posini:posfin])
 +
            # Opción 2
 +
            #for car in range(len(cadena)):
 +
            #    if car < posini or car >= (n+posini):
 +
            #        print(cadena[car], end='')
 +
            #print("\n")       
 +
        elif opcion == 6:
 +
            # Opció 1
 +
            #scaner = input("Introdueix la cadena(palabra) a insertar: ");
 +
            #posini = int(input("Introdueix la posició de la cadena: "));
 +
            #cadsplit = cadena.split()
 +
            #cadsplit.insert(posini-1, scaner)
 +
            #cadenafinal = ' '.join(cadsplit)
 +
            #print(cadenafinal)
 +
            # opció 2
 +
            cad = input("Introdueix la cadena(palabra) a insertar: ");
 +
            posini = int(input("Introdueix la posició de la cadena: "));
 +
            print(cadena[:posini] + cad + cadena[posini:])           
 +
        elif opcion == 7:
 +
            scaner = input("Introdueix la cadena a buscar: ");
 +
            ocurrencias = cadena.count(scaner)
 +
            print(ocurrencias)
 +
        elif opcion == 8:
 +
            scaner = input("Introdueix la cadena a borrar: ");
 +
            replaced_text = cadena.replace(scaner, '')
 +
            print(replaced_text)
 +
            #Opció 2
 +
            posIni = 0         
 +
            posFin = cadena.find(scaner)
 +
            while posFin != -1:
 +
              cadAux += cadena[posIni:posFin]
 +
              posIni = posFin + len(scaner)
 +
              posFin = frase.find(scaner, posIni)
 +
            cadAux += cadena[posIni:]
 +
            cadena = cadAux
 +
            print("Frase sense la cadena: ", cadena)
 +
            #Opció 3
 +
            #posini = 0
 +
            #cadfin=[]
 +
            #for par in cadena.split():
 +
                #if par != scaner:
 +
                  #cadfin.insert(posini, par)
 +
                  #posini +=1
 +
            #print(" ".join(cadfin))
 +
        elif opcion == 9:
 +
            salir = True
 +
            print("¡Adiós!")
 +
        else:
 +
            print ("Introduce un numero entre 1 y 9\n")
 +
</source>
 +
<!---->
 +
 +
12. Escriu un programa per comparar dues cadenes introduïdes per l’usuari. L’aplicació
 +
rebrà com a entrada el nombre de caràcters a comparar i l’índex inicial de cada cadena
 +
de la comparació. L’aplicació haurà d’indicar si les subcadenes són iguals.
 +
 +
 +
<source lang = "python">
 +
print("Comparació de substrings")
 +
 +
# Introducció de dades
 +
cadena1 = input("Introdueix una cadena: ")
 +
cadena2 = input("Introdueix una altra cadena: ")
 +
numCar = int(input("Introdueix nombre de caràcters a comparar: "))
 +
index1 = int(input("Posició inicial cadena 1: "))
 +
index2 = int(input("Posició inicial cadena 2: "))
 +
 +
# Comprovació dels límits de les cadenes
 +
if (len(cadena1) < index1 + numCar) or (len(cadena2) < index2 + numCar):
 +
    print("S'excedeixen els límits de les cadenes")
 +
 +
# Comparació dels substrings
 +
else:
 +
    subCad1 = cadena1.lower()[index1-1:index1-1+numCar]
 +
    subCad2 = cadena2.lower()[index2-1:index2-1+numCar]
 +
    if subCad1 == subCad2:
 +
      print("Les subcadenes són iguals. Subcadena: %s" %subCad1)
 +
    else:
 +
      print("No són iguals. Subcadena1: %s, Subcadena2: %s" %(subCad1, subCad2))
 +
</source>
 +
<!---->
 +
 +
13. Escriu una aplicació que rebi com a entrada una línia de text i un caràcter de cerca
 +
i indiqui el nombre d’ocurrències del caràcter en el text.
 +
 +
<source lang = "python">
 +
 +
print("Programa comptar ocurrències caràcter en una frase")
 +
 +
# Entrada: frase a avaluar. Per ex: "La ment que s'obre a una nova idea, mai torna a la seva mida original."
 +
frase = input("Introdueix la frase a avaluar: ")
 +
caracter = input("Introdueix un caràcter: ")
 +
 +
# Inicialitzar variables
 +
comptador = 0
 +
pos = frase.find(caracter)
 +
# Comptar ocurrències caràcter
 +
while pos != -1 :
 +
  comptador += 1
 +
  pos = frase.find(caracter,pos+1)
 +
# Mostrar el resultat
 +
print ("Hi ha %d %s's en la frase" %(comptador,caracter))
 +
</source>
 +
<!---->
 +
 +
14. Féu un programa que llegeixi una cadena de caràcters i indiqui si la cadena és un
 +
palíndrom. Un palíndrom és una cadena que es llegeix d’igual manera
 +
d’esquerra a dreta que de dreta a esquerra. Com per exemple : dabale arroz a la
 +
zorra el abad. Cal entendre que per poder-ho fer d’aquesta manera no han
 +
d’haver-hi espais en blanc.
 +
 +
 +
:'''Slicing: indicant un rang'''
 +
<source lang = "python">
 +
miCadenaDeTexto = input("Introdueix una cadena: ")
 +
# Imprimeix si"Es palíndrom"
 +
if miCadenaDeTexto == miCadenaDeTexto[::-1]:
 +
    print("És palindrom")
 +
else:
 +
    print("No és palindrom")
 +
</source>
 +
:'''Funció reversed'''
 +
<source lang = "python">
 +
miCadenaDeTexto = input("Introdueix una cadena: ")
 +
# Imprimeix si"Es palíndrom"
 +
if miCadenaDeTexto == "".join(reversed(miCadenaDeTexto)):
 +
    print("És palindrom")
 +
else:
 +
    print("No és palindrom")
 +
</source>
 +
<!---->
 +
 +
15. '''languageGames''': En molts idiomes disposem de variants lúdiques de l'idioma. Aquest programa codificarà dos mètodes que ens permetran traduir paraules d'idiomes coneguts a variants lúdiques d'aquests. Expliquem primer aquestes variants:
 +
 +
:'''a) Jerigonza''' (variant lúdica del castellà): després de cada vocal s'afegeix una 'p' i es repeteix la vocal.
 +
 +
Exemples:
 +
 +
::*“casa” seria “capasapa”
 +
::*“Gabriel” seria “Gapabripiepel”
 +
::*“murcielago” seria “mupurcipiepelapagopo”
 +
 +
'''NOTA:''' Per simplificar-ho suposarem que no s'introdueixen accents.
 +
 +
:'''b) Basic Pig Latin''' (variant lúdica de l'anglès): tenim dues regles:
 +
 +
:A les paraules que comencen per vocal se'ls afegeix al darrera el sufix “ay”. Exemples:
 +
 +
::*“ant” seria “antay”
 +
::*“astronaut” seria “astronautay”
 +
 +
:A les paraules que comencen per consonant, es mouen totes les consonants del davant de la primera vocal al final i s'afegeix el sufix “ay”. Exemples:
 +
 +
::*“mess” seria “essmay”
 +
::*“father” seria “atherfay”
 +
::*“chick” seria “ickchay”
 +
::*“star” seria “arstay”
 +
 +
Cal fer un menú amb tres opcions: Jerigonza, Basic Pig latin i Sortir.
 +
 +
 +
'''NOTA:''' Per simplificar, podeu suposar que la dada d'entrada serà UNA ÚNICA paraula i que aquesta no tindrà ni accents ni caràcters diferents de lletres.
 +
-->

Revisió de 14:37, 8 abr 2024

A4.1 Exercicis Cadenes

1. L’última lletra del DNI pot calcular-se a partir del seus números. Per a això només has de dividir el número per 23 i quedar-te amb la resta. Fes un programa per calcular la lletra d’un DNI. La lletra que correspon a cada número la tens en aquesta taula:

    0 - T
    1 - R
    2 - W
    3 - A
    4 - G
    5 - M
    6 - Y
    7 - F
    8 - P
    9 - D
   10 - X
   11 - B
   12 - N
   13 - J
   14 - Z
   15 - S
   16 - Q
   17 - V
   18 - H
   19 - L
   20 - C
   21 - K
   22 – E


print("Obtenció lletra DNI")

# Constants
NUMLLETRES = 23
LLETRESDNI = "TRWAGMYFPDXBNJZSQVHLCKE"

# Demanem número DNI
numDNI = int(input("Introdueix número d'un DNI: "))

# Càlcul de la posició de la lletra 
numCalcul = numDNI % NUMLLETRES

# Mostrar la lletra
print("El número de DNI: %d li correspon la lletra: %s" %(numDNI,LLETRESDNI[numCalcul]))

2. Fes un programa per que verifiqui que la lletra d’un DNI es correspon amb el seu número:


print("Verificació lletra DNI")

# Constants
NUMLLETRES = 23
LLETRESDNI = "TRWAGMYFPDXBNJZSQVHLCKE"

# Demanem DNI
dni = input("Introdueix un DNI: ")

# Lletra i número del DNI
lletraDNI = dni[-1]
numDNI = int(dni[:-1])

# Càlcul de la posició de la lletra 
numCalcul = numDNI % NUMLLETRES

# Verificació
if lletraDNI == LLETRESDNI[numCalcul]:
  print("ÉS correcte!")
else:
  print("És incorrecte!")

3. Genera un programa que encripti una cadena de caràcters. Per exemple: '“avadakedavra”' encriptat es '“bwbeblfebwsb”' i el mètode d’encriptació és canviar un caràcter pel seu successor a l’abecedari (el successor de ‘z’ és ‘a’).

print("Encriptació d'una cadena")

# Constants
LLETRES = "abcdefghijklmnopqrstuvwxyza"  

# Demanem cadena a encriptar
cadena = input("Introdueix la cadena a encriptar: ")

# Encriptació
cadenaEncriptada =""
for carac in cadena: 
   posCaracter = LLETRES.find(carac)
   cadenaEncriptada += LLETRES[posCaracter+1]

# Mostrar el text encriptat
print("Cadena encriptada:", cadenaEncriptada)

4. Genera un programa que encripti una text de caràcters. Per exemple: '“hola que tal”' encriptat es '“ipmb@rvf@ubm”' i el mètode d’encriptació és canviar un caràcter pel seu successor a l’abecedari (el successor de ‘z’ és ‘a’ i el caràcter ' ' es substitueix per '@').

print("Encriptació d'un text")

# Constants
LLETRES = "abcdefghijklmnopqrstuvwxyza @"  

# Demanem número DNI
text = input("Introdueix el text a encriptar: ")

# Encriptació
textEncriptat =""
for carac in text: 
   posCaracter = LLETRES.find(carac)
   textEncriptat += LLETRES[posCaracter+1]

# Mostrar el text encriptat
print("Text encriptat:", textEncriptat)

5. Feu un programa que si li passem un nom i un cognom com a paràmetres ens doni la benvinguda:

    Benvingut Sr. ...
    i si no l'hi donem digui :
    Hola desconegut.
print("Programa amb arguments ")

# Importar llibreries 
import sys 

# Comprovar número d'arguments
if(len(sys.argv) == 3):

# Mostrar nom i cognom
    print ("Benvingut Sr./Sra. %s %s" %(sys.argv[1], sys.argv[2]))

# Missatge si no hi ha 2 arguments
else:
    print ("Hola desconegut")

6. Feu un programa que calculi la mitjana aritmètica dels valors passats com a paràmetres. Si no es passa cap paràmetre sortirà un missatge d’error i si el primer paràmetre és –ajut el programa traurà una petita explicació del funcionament.

print("Programa amb arguments: Mitjana de n números")

# Importar llibreries 
import sys 

# Comprovar número d'arguments
if(len(sys.argv) == 1):
    
    print("ERROR: Aquest programa necessita paràmetres")

# Comprovar si necessiten l'ajuda
elif(sys.argv[1] == "-ajut"):
        print ("Aquest programa calcula la mitjana dels valors passats com a arguments")

# Calculem la mitja dels arguments
else:
    suma = 0
    for i in range(1,len(sys.argv)):
        suma += int(sys.argv[i])
    print ("Resultat de la mitjana és:", suma/(len(sys.argv)-1))

7. Genereu un programa anomenat ComptaAsString que compti quantes lletres 'a' conté una cadena de text. El text per tractar pot ser qualsevol i el podeu declarar com una constant en el codi font.

versió 1

print("Programa compar a's d'una frase")

# Entrada: frase a avaluar
frase = input("Introdueix la frase a avaluar: ")

# Inicialitzar variables
comptador = 0

# Comptar a's
for i in range(len(frase)):
    if frase[i] == 'a':
       comptador += 1

# Mostrar el resultat
print("Hi ha %d a's en la frase" %comptador)

versio 2

print("Programa comptar a's d'una frase")

# Entrada: frase a avaluar. Per ex: "La ment que s'obre a una nova idea, mai torna a la seva mida original."
frase = input("Introdueix la frase a avaluar: "

# Inicialitzar variables
comptador = 0
pos = frase.find("a")
# Comptar a's
while pos != -1 :
  comptador += 1
  pos = frase.find("a",pos+1)
# Mostrar el resultat
print ("Hi ha %d a's en la frase" %comptador)

8. Fes un programa que, primer demani a l’usuari escriure una rere l’altra, tres paraules que només continguin lletres minúscules. A continuació el programa ha d’escriure quina és la paraula més llarga i quina és l’alfabèticament menor.


print("Programa ordenar paraules")

# Entrada de les paraules
par1 = input("Introdueix la primera paraula: ")
par2 = input("Introdueix la primera paraula: ")
par3 = input("Introdueix la primera paraula: ")

# Cerquem la paraula més llarga
mesLlarga = par1
if len(mesLlarga) < len(par2):
   mesLlarga = par2
if len(mesLlarga) < len(par3):
   mesLlarga = par3

# Cerquem la paraula lexicogràficament menor
alfMenor = par1
if alfMenor > par2:
   alfMenor = par2
if alfMenor > par3:
   alfMenor = par3

# Reultats
print("La paraula més llarga és: ", mesLlarga)
print("La paraula lexicogràficament menor és: ", alfMenor)

9. Fes un programa que llegeixi una frase i un número enter N i ens digui quines i quantes paraules tenen longitud N.

print("Programa paraules de N caràcters")

# Entrada de dades
frase = input("Introdueix la frase a tractar: ")
num = int(input("Introdueix el número de caràcters: "))

# Inicialització de variables
numParaules = 0

# Recorregut de la frase mostrant les paraules de N caràcters
print("Paraules de %d caràcters: " %num, end =' ')
for par in frase.split():
    if len(par) == num: 
       print(par, end=' ')
       numParaules +=1
print("Num paraules: ", numParaules)

10. Fes un programa que llegeixi una frase i la mostri invertida.

print("Programa mostrar frase invertida")

# Entrada de dades
frase = input("Introdueix la frase a invertir: ")

# Recorregut de la frase caràcter a caràcter començant pel final
print("Frase invertida: ", end =' ')
for car in range(len(frase)-1, -1, -1):
       print(frase[car], end='')
print()

Altres opcions: print(frase[::-1])

for i in reversed(frase):

 print(i, end=)

print()

print("Programa mostrar frase invertida")

# Entrada de dades
frase = input("Introdueix la frase a invertir: ")

# Imprimir la frase invertida
print("Frase invertida: %s" %''.join(reversed(frase)))

11. Volem un programa per treballar amb cadenes que mitjançant un menú ens permeti les següents opcions:

  • Mostrar els n primers caràcters d’una cadena
  • Mostrar els n últims caràcters d’una cadena (d’esquerra a dreta)
  • Eliminar els espais en blanc que hi hagi al final de la cadena
  • Eliminar els espais en blanc que hi hagi al principi de la cadena
  • Eliminar d’una cadena els n caràcters que apareixen a partir de la posició p
  • Inserir una cadena dins d’una altra a partir de la posició p
  • Comptar el nombre de vegades que apareix una cadena dins d’una altra
  • Esborrar totes les aparicions d’una cadena dins d’una altra


salir = False 
while not salir:
        print("Menú de opciones")
        print("----------------")
        print("1. Mostrar els n primers caràcters d’una cadena\n"
            + "2. Mostrar els n últims caràcters d’una cadena (d’esquerra a dreta)\n"
            + "3. Eliminar els espais en blanc que hi hagi al final de la cadena\n"
            + "4. Eliminar els espais en blanc que hi hagi al principi de la cadena\n"
            + "5. Eliminar d’una cadena els n caràcters que apareixen a partir de la posició p\n"
            + "6. Inserir una cadena dins d’una altra a partir de la posició p\n"
            + "7. Comptar el nombre de vegades que apareix una cadena dins d’una altra\n"
            + "8. Esborrar totes les aparicions d’una cadena dins d’una altra\n"
            + "9. Sortir\n")
        opcion = int(input("Introdueix una opció de menú: "))
        cadena = input("Introdueix una cadena de text: ")
        #numeric = int(input("Has d'introduir un valor numèric: "))
        if opcion == 1:
            n = int(input("Introdueix el nombre de caràcters a mostrar: "))
            print(cadena[0:n])
        elif opcion == 2:  
            n = int(input("Introdueix el nombre de caràcters a mostrar: ")) 
            print(cadena[-n:])
        elif opcion == 3:
            print(cadena.rstrip())
        elif opcion == 4:
            print(cadena.lstrip())
        elif opcion == 5:
            # Opción 1
            n = int(input("Introdueix el nombre de caràcters a eliminar: "))
            posini = int(input("Introdueix la posició inicial: "))
            posfin = len(cadena)
            print(cadena[:-(posfin-posini)] + cadena[n+posini:posfin])
            # Opción 2 
            #for car in range(len(cadena)):
            #    if car < posini or car >= (n+posini):
            #        print(cadena[car], end='')
            #print("\n")         
        elif opcion == 6:
            # Opció 1
            #scaner = input("Introdueix la cadena(palabra) a insertar: ");
            #posini = int(input("Introdueix la posició de la cadena: "));
            #cadsplit = cadena.split()
            #cadsplit.insert(posini-1, scaner)
            #cadenafinal = ' '.join(cadsplit)
            #print(cadenafinal)
            # opció 2
            cad = input("Introdueix la cadena(palabra) a insertar: ");
            posini = int(input("Introdueix la posició de la cadena: "));
            print(cadena[:posini] + cad + cadena[posini:])             
        elif opcion == 7:
            scaner = input("Introdueix la cadena a buscar: ");
            ocurrencias = cadena.count(scaner)
            print(ocurrencias)
        elif opcion == 8:
            scaner = input("Introdueix la cadena a borrar: ");
            replaced_text = cadena.replace(scaner, '')
            print(replaced_text)
            #Opció 2
            posIni = 0          
            posFin = cadena.find(scaner) 
            while posFin != -1:
               cadAux += cadena[posIni:posFin]
               posIni = posFin + len(scaner)
               posFin = frase.find(scaner, posIni) 
            cadAux += cadena[posIni:]
            cadena = cadAux
            print("Frase sense la cadena: ", cadena)
            #Opció 3
            #posini = 0
            #cadfin=[]
            #for par in cadena.split():
                #if par != scaner:
                   #cadfin.insert(posini, par) 
                   #posini +=1
            #print(" ".join(cadfin))
        elif opcion == 9:
            salir = True
            print("¡Adiós!")
        else:
            print ("Introduce un numero entre 1 y 9\n")

12. Escriu un programa per comparar dues cadenes introduïdes per l’usuari. L’aplicació rebrà com a entrada el nombre de caràcters a comparar i l’índex inicial de cada cadena de la comparació. L’aplicació haurà d’indicar si les subcadenes són iguals.


print("Comparació de substrings")

# Introducció de dades
cadena1 = input("Introdueix una cadena: ")
cadena2 = input("Introdueix una altra cadena: ")
numCar = int(input("Introdueix nombre de caràcters a comparar: "))
index1 = int(input("Posició inicial cadena 1: "))
index2 = int(input("Posició inicial cadena 2: "))

# Comprovació dels límits de les cadenes
if (len(cadena1) < index1 + numCar) or (len(cadena2) < index2 + numCar):
    print("S'excedeixen els límits de les cadenes")

# Comparació dels substrings
else:
    subCad1 = cadena1.lower()[index1-1:index1-1+numCar]
    subCad2 = cadena2.lower()[index2-1:index2-1+numCar]
    if subCad1 == subCad2:
       print("Les subcadenes són iguals. Subcadena: %s" %subCad1)
    else:
       print("No són iguals. Subcadena1: %s, Subcadena2: %s" %(subCad1, subCad2))

13. Escriu una aplicació que rebi com a entrada una línia de text i un caràcter de cerca i indiqui el nombre d’ocurrències del caràcter en el text.

print("Programa comptar ocurrències caràcter en una frase")

# Entrada: frase a avaluar. Per ex: "La ment que s'obre a una nova idea, mai torna a la seva mida original."
frase = input("Introdueix la frase a avaluar: ")
caracter = input("Introdueix un caràcter: ")

# Inicialitzar variables
comptador = 0
pos = frase.find(caracter)
# Comptar ocurrències caràcter
while pos != -1 :
  comptador += 1
  pos = frase.find(caracter,pos+1)
# Mostrar el resultat
print ("Hi ha %d %s's en la frase" %(comptador,caracter))

14. Féu un programa que llegeixi una cadena de caràcters i indiqui si la cadena és un palíndrom. Un palíndrom és una cadena que es llegeix d’igual manera d’esquerra a dreta que de dreta a esquerra. Com per exemple : dabale arroz a la zorra el abad. Cal entendre que per poder-ho fer d’aquesta manera no han d’haver-hi espais en blanc.


Slicing: indicant un rang
miCadenaDeTexto = input("Introdueix una cadena: ")
# Imprimeix si"Es palíndrom"
if miCadenaDeTexto == miCadenaDeTexto[::-1]:
    print("És palindrom")
else:
    print("No és palindrom")
Funció reversed
miCadenaDeTexto = input("Introdueix una cadena: ")
# Imprimeix si"Es palíndrom"
if miCadenaDeTexto == "".join(reversed(miCadenaDeTexto)):
    print("És palindrom")
else:
    print("No és palindrom")

15. languageGames: En molts idiomes disposem de variants lúdiques de l'idioma. Aquest programa codificarà dos mètodes que ens permetran traduir paraules d'idiomes coneguts a variants lúdiques d'aquests. Expliquem primer aquestes variants:

a) Jerigonza (variant lúdica del castellà): després de cada vocal s'afegeix una 'p' i es repeteix la vocal.

Exemples:

  • “casa” seria “capasapa”
  • “Gabriel” seria “Gapabripiepel”
  • “murcielago” seria “mupurcipiepelapagopo”

NOTA: Per simplificar-ho suposarem que no s'introdueixen accents.

b) Basic Pig Latin (variant lúdica de l'anglès): tenim dues regles:
A les paraules que comencen per vocal se'ls afegeix al darrera el sufix “ay”. Exemples:
  • “ant” seria “antay”
  • “astronaut” seria “astronautay”
A les paraules que comencen per consonant, es mouen totes les consonants del davant de la primera vocal al final i s'afegeix el sufix “ay”. Exemples:
  • “mess” seria “essmay”
  • “father” seria “atherfay”
  • “chick” seria “ickchay”
  • “star” seria “arstay”

Cal fer un menú amb tres opcions: Jerigonza, Basic Pig latin i Sortir.


NOTA: Per simplificar, podeu suposar que la dada d'entrada serà UNA ÚNICA paraula i que aquesta no tindrà ni accents ni caràcters diferents de lletres. -->