|
|
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:
| |
− | <pre>
| |
− | 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
| |
− | </pre>
| |
− |
| |
− |
| |
− | <source lang = "python">
| |
− | 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]))
| |
− | </source>
| |
− |
| |
− |
| |
− | 2. Fes un programa per que verifiqui que la lletra d’un DNI es correspon amb el seu número:
| |
− |
| |
− |
| |
− | <source lang = "python">
| |
− | 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!")
| |
− | </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’).
| |
− |
| |
− | <source lang = "python">
| |
− | print("Encriptació d'una cadena")
| |
− |
| |
− | # Constants
| |
− | LLETRES = "abcdefghijklmnopqrstvwxyza"
| |
− |
| |
− | # 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)
| |
− | </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 = "abcdefghijklmnopqrstvwxyza @"
| |
− |
| |
− | # 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 ("Aquest programa requereix dos arguments")
| |
− | </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):
| |
− |
| |
− | # Comprovar si necessiten l'ajuda
| |
− | if(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))
| |
− | # Missatge si no hi ha 2 arguments
| |
− | else:
| |
− | print ("Aquest programa requereix arguments")
| |
− | </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>
| |
− |
| |
− |
| |
− | <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:
| |
− | scaner = int(input("Introdueix el nombre de caràcters a mostrar: "))
| |
− | print(cadena[0:scaner])
| |
− | elif opcion == 2:
| |
− | scaner = int(input("Introdueix el nombre de caràcters a mostrar: "))
| |
− | print(cadena[-scaner:])
| |
− | elif opcion == 3:
| |
− | print(cadena.rstrip())
| |
− | elif opcion == 4:
| |
− | print(cadena.lstrip())
| |
− | elif opcion == 5:
| |
− | # Opción 1
| |
− | scaner = 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[scaner+posini:posfin])
| |
− | # Opción 2
| |
− | #for car in range(len(cadena)):
| |
− | # if car < posini or car >= (scaner+posini):
| |
− | # print(cadena[car], end='')
| |
− | #print("\n")
| |
− | elif opcion == 6:
| |
− | 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)
| |
− | 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>
| |
− |
| |
− |
| |
− | <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”
| |
− |
| |
− | El programa ha d'implementar les dues variants: jerigonza i basic pig latin.
| |
− |
| |
− |
| |
− | '''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.
| |