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

De wikiserver
Dreceres ràpides: navegació, cerca
 
(5 revisions intermèdies per 2 usuaris que no es mostren)
Línia 28: Línia 28:
 
</pre>
 
</pre>
  
<!---->
+
 
 
<source lang = "python">
 
<source lang = "python">
 
print("Obtenció lletra DNI")
 
print("Obtenció lletra DNI")
Línia 45: 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">
 
print("Verificació lletra DNI")
 
print("Verificació lletra DNI")
Línia 73: 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’).
 
<!---->
 
 
<source lang = "python">
 
<source lang = "python">
 
print("Encriptació d'una cadena")
 
print("Encriptació d'una cadena")
  
 
# Constants
 
# Constants
LLETRES = "abcdefghijklmnopqrstvwxyza"   
+
LLETRES = "abcdefghijklmnopqrstuvwxyza"   
  
 
# Demanem cadena a encriptar
 
# Demanem cadena a encriptar
Línia 95: Línia 95:
 
print("Cadena encriptada:", cadenaEncriptada)
 
print("Cadena encriptada:", cadenaEncriptada)
 
</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 '@').
  
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">
 
<source lang = "python">
 
print("Encriptació d'un text")
 
print("Encriptació d'un text")
  
 
# Constants
 
# Constants
LLETRES = "abcdefghijklmnopqrstvwxyza @"   
+
LLETRES = "abcdefghijklmnopqrstuvwxyza @"   
  
 
# Demanem número DNI
 
# Demanem número DNI
Línia 117: Línia 117:
 
print("Text encriptat:", textEncriptat)
 
print("Text encriptat:", textEncriptat)
 
</source>
 
</source>
 
+
<!---->
  
 
5. Feu un programa que si li passem un nom i un cognom com a paràmetres ens doni la benvinguda:
 
5. Feu un programa que si li passem un nom i un cognom com a paràmetres ens doni la benvinguda:
Línia 125: Línia 125:
 
     Hola desconegut.
 
     Hola desconegut.
 
</pre>
 
</pre>
<!---->
+
 
 
<source lang = "python">
 
<source lang = "python">
 
print("Programa amb arguments ")
 
print("Programa amb arguments ")
Línia 140: Línia 140:
 
# Missatge si no hi ha 2 arguments
 
# Missatge si no hi ha 2 arguments
 
else:
 
else:
     print ("Aquest programa requereix dos arguments")
+
     print ("Hola desconegut")
 
</source>
 
</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.
  
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">
 
<source lang = "python">
 
print("Programa amb arguments: Mitjana de n números")
 
print("Programa amb arguments: Mitjana de n números")
Línia 153: Línia 153:
  
 
# Comprovar número d'arguments
 
# Comprovar número d'arguments
if(len(sys.argv) > 1):
+
if(len(sys.argv) == 1):
 +
   
 +
    print("ERROR: Aquest programa necessita paràmetres")
  
 
# Comprovar si necessiten l'ajuda
 
# Comprovar si necessiten l'ajuda
    if(sys.argv[1] == "-ajut"):
+
elif(sys.argv[1] == "-ajut"):
 
         print ("Aquest programa calcula la mitjana dels valors passats com a arguments")
 
         print ("Aquest programa calcula la mitjana dels valors passats com a arguments")
  
 
# Calculem la mitja dels 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))
 
# Missatge si no hi ha 2 arguments
 
 
else:
 
else:
     print ("Aquest programa requereix arguments")
+
    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>
 
</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.
  
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
 
versió 1
 
<source lang = "python">
 
<source lang = "python">
Línia 192: Línia 191:
  
 
</source>
 
</source>
 
 
<!---->
 
<!---->
  
Línia 213: Línia 211:
 
print ("Hi ha %d a's en la frase" %comptador)
 
print ("Hi ha %d a's en la frase" %comptador)
 
</source>
 
</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.  
 
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">
 
<source lang = "python">
 
print("Programa ordenar paraules")
 
print("Programa ordenar paraules")
Línia 243: Línia 242:
 
print("La paraula lexicogràficament menor és: ", alfMenor)
 
print("La paraula lexicogràficament menor és: ", alfMenor)
 
</source>
 
</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.
  
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">
 
<source lang = "python">
 
print("Programa paraules de N caràcters")
 
print("Programa paraules de N caràcters")
Línia 265: Línia 264:
 
print("Num paraules: ", numParaules)
 
print("Num paraules: ", numParaules)
 
</source>
 
</source>
 +
<!---->
  
 +
10. Fes un programa que llegeixi una frase i la mostri invertida.
  
10. Fes un programa que llegeixi una frase i la mostri invertida.
 
<!---->
 
 
<source lang = "python">
 
<source lang = "python">
 
print("Programa mostrar frase invertida")
 
print("Programa mostrar frase invertida")
Línia 281: Línia 280:
 
print()
 
print()
 
</source>
 
</source>
 +
<!---->
 +
 +
Altres opcions:
 +
print(frase[::-1])
 +
 +
for i in reversed(frase):
 +
  print(i, end='')
 +
print()
  
 
<!---->
 
<!---->
Línia 292: Línia 299:
 
print("Frase invertida: %s" %''.join(reversed(frase)))
 
print("Frase invertida: %s" %''.join(reversed(frase)))
 
</source>
 
</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. -->