INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN PYTHON ¿Qué es Python? Python es un lenguaje de programación de alto nivel multiparadigma y de propósito general creado por Guido van Rossum en 1990. Actualmente el lenguaje lo desarrollan y mantiene la “Python Software Foundation” (www.python.org) • Es de código abierto (certificado por la OSI). • Es interpretable y compilable. • Es fácil de aprender gracias a que su sintaxis es bastante legible para los humanos. • Es fácilmente extensible e integrable en otros lenguajes (C, java). • Mantenido por una gran comunidad de desarrolladores y hay multitud de recursos para su aprendizaje. • Permite 3 modos o estilos de programación (paradigmas): Programación imperativa Conjunto de instrucciones que se ejecutan una tras otra (pasos de ejecución) de forma secuencial. En la ejecución de estas instrucciones se van cambiando los valores de las variables y, dependiendo de estos valores, se modifica el flujo de control de la ejecución del programa. n=int(input("Número: ")) factorial=1 while n>1: factorial=factorial*n n=n-1 print("Factorial=",factorial) Programación funcional El código es una secuencia de declaración de funciones. No existen asignación de variables, las funciones se llaman entre ellas y las repeticiones de instrucciones se sustituyen por recursividad (cuando una función se llama a si misma). def doble(x): return x+x def triple(x): return doble(x)+x def factorial(n): if n>1: return n*factorial(n-1) else: return 1 Programación orientada a objetos El código se organiza en unidades denominadas clases, de las cuales se crean objetos que se relacionan entre sí para conseguir un objetivo. Forma de programación más cercana a la realidad donde cada elemento persona/cosa (objetos) con sus características que lo identifica (atributos) son capaces de realizar determinadas acciones (métodos). 1 class Persona: nombre = "Pedro" def saludo(self): print("hola",self.nombre) return def cambiaNombre(self,nuevo): self.nombre = nuevo return hombre = Persona() hombre.saludo() hombre.cambiaNombre("Alejandro") hombre.saludo() Modos de ejecución Interpretado en la consola de Python Se ejecuta la instrucción que introduce el usuario de manera interactiva. Interpretado en fichero Se leen y se ejecutan una a una todas las instrucciones del fichero. TIPOS DE DATOS DATOS PRIMITIVOS SIMPLES • Números (numbers) : 0 , ‑1 , 3.1415 • Cadenas (strings) : 'Hola' , "Adiós" • Booleanos (boolean) : True , False Estos datos son inmutables, es decir, su valor es constante y no puede cambiar. La clase a la que pertenece un dato se obtiene con la función type(). Números (clases int y float) Secuencia de dígitos que representan números. Pueden incluir el ‑ para negativos, el . para decimales y la e para expresar potencias de 10 en notación científica. Pueden ser enteros (clase int) o reales (clase float). >>> type(1) <class 'int'> >>> type(-1) <class 'int'> >>> type(2.3) <class'float'> >>> type(4e5) <class 'float' 2 Operadores aritméticos con números + (suma) - (resta) * (producto) / (cociente) // % ** (cociente división entera) (resto división entera) (potencia) Orden de prioridad de evaluación: Funciones predefinidas > Potencias > Productos y cocientes > Sumas y restas Se puede saltar el orden de evaluación utilizando paréntesis ( ). >>> 2+3 5 >>> 5*-2 -10 >>> 5/2 2.5 >>> 5//2 2 >>> 5%2 1 >>> (2+3)**2 25 Operadores lógicos con números Devuelven un valor lógico o booleano True/False: == (igual que) < (menor que) <= (menor o igual que) >>> 3==3 True > >= != >>> 3.1<=3 False (mayor que) (mayor o igual que) (distinto de) >>> -1!=1 True Cadenas (clase str) Secuencia de caracteres alfanuméricos que representan un texto. Se escriben entre comillas sencillas ' o dobles ". 'Python' "123" 'True' 'A' # Cadena vacía '' # Cadena con un espacio ' ' # Cambio de línea '\n' # Tabulador '\t' Acceso a los elementos de una cadena Cada carácter tiene asociado un índice que permite acceder a él. Cadena Índice positivo Índice negativo P y t h o n 0 1 2 3 4 5 -6 -5 -4 -3 -2 -1 • c[i] devuelve el carácter de la cadena c con el índice i. El índice del primer carácter de la cadena = 0. • Se pueden utilizar índices negativos para recorrer la cadena del final al principio. El índice del último carácter de la cadena = ‑1. • c[i:j] : Devuelve la subcadena de c desde el carácter con el índice i hasta el carácter con el índice j-1. • c[i:j:k] : Devuelve la subcadena de c desde el carácter con el índice i hasta el carácter con el índice j-1 con saltos de k caracteres. >>> 'Python'[2] 't' >>> 'Python'[-1] 'n' >>> 'Python'[-6] 'P' >>> 'Python'[6] Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> IndexError: string index out of rango >>> 'Python'[1:4] 'yth' >>> 'Python'[2:] 'thon' >>> 'Python'[:-2] 'Pyth' >>> 'Python'[:] 'Python' >>> 'Python'[0:6:2] 'Pto' 3 Operaciones con cadenas • • • • c1 + c2 : Devuelve la cadena resultado de concatenar las cadenas c1 y c2. c * n : Devuelve la cadena resultado de concatenar n copias de la cadena c. c1 in c2 : Devuelve True si c1 es una cadena contenida en c2 y False en caso contrario. c1 not in c2 : Devuelve True si c1 es una cadena no contenida en c2 y False en caso contrario. >>> 'Me gusta '+'Python' 'Me gusta Python' >>> 'Python'*3 'PythonPythonPython' >>> 'y' in 'Python' True >>> 'Tho' not in 'Python' True Operaciones de comparación de cadenas • c1 == c2 : Devuelve True si la cadena c1 es igual que la cadena c2 y False en caso contrario. Distingue entre mayúsculas y minúsculas. • c1 > c2 : Devuelve True si la cadena c1 sucede a la cadena c2 y False en caso contrario. • c1 < c2 : Devuelve True si la cadena c1 antecede a la cadena c2 y False en caso contrario. • c1 >= c2 : Devuelve True si la cadena c1 sucede o es igual a la cadena c2 y False en caso contrario. • c1 <= c2 : Devuelve True si la cadena c1 antecede o es igual a la cadena c2 y False en caso contrario. • c1 != c2 : Devuelve True si la cadena c1 es distinta de la cadena c2 y False en caso contrario. Utilizan el orden establecido en el código ASCII. >>> 'Python' == 'python' False >>> 'Python' < 'python' True >>> 'a' > 'Z' True >>> 'A' >= 'Z' False >>> '' < 'Python' True 4 Funciones de cadenas len(c) : Devuelve el número de caracteres de la cadena c. min(c) : Devuelve el carácter menor de la cadena c. max(c) : Devuelve el carácter mayor de la cadena c. c.upper() : Devuelve la cadena con los mismos caracteres que la cadena c pero en mayúsculas. c.lower() : Devuelve la cadena con los mismos caracteres que la cadena c pero en minúsculas. c.title() : Devuelve la cadena con los mismos caracteres que la cadena c con el primer carácter en mayúsculas y el resto en minúsculas. • c.find(subcadena) : Busca subcadena en la cadena c. Devuelve la posición en la cadena c del primer carácter de la subcadena . Si no la encuentra devuelve -1. • c.replace(c1,c2) : Devuelve la cadena reemplazando las subcadenas c1 por c2. • c.split(delimitador) : Devuelve la lista formada por las subcadenas que resultan de partir la cadena c usando como delimitador la cadena delimitador. Si no se especifica el delimitador utiliza por defecto el espacio en blanco. • • • • • • >>> len('Python') 6 >>> min('Python') 'P' >>> max('Python') 'y' >>> 'Python'.upper() 'PYTHON' >>> 'A,B,C'.split(',') ['A', 'B', 'C'] >>> 'I love Python'.split() ['I', 'love', 'Python'] Cadenas formateadas • f 'c' : la cadena ‘f’ es un tipo de cadena que permite insertar en ellas números o cadenas de caracteres. Se utilizan las llaves {} (marcadores de posición) para señalar el lugar de inserción y dentro de ellas se indica el dato d a insertar, el espacio reservado n, la alineación del dato dentro del espacio reservado (< izquierda, ^ centro y > derecha) y el número de decimales m para datos de tipo float. Sintaxis de los marcadores de posición: {d} : Inserta el dato completo sin espacio adicional. {d:n} : Reserva n caracteres e inserta el dato alineado izquierda (cadenas) y derecha (números). {d:<n} : Reserva n caracteres e inserta el dato (entero/real/cadena) alineado izquierda. {d:^n} : Reserva n caracteres e inserta el dato (entero/real/cadena) alineado centro. {d:>n} : Reserva n caracteres e inserta el dato (entero/real/cadena) alineado derecha. {d:n.mf} : Reserva n caracteres e inserta el número real con m cifras decimales alineado derecha. {d:<n.mf} : Reserva n caracteres e inserta el número real con m cifras decimales alineado izquierda. {d:^n.mf} : Reserva n caracteres e inserta el número real con m cifras decimales alineado centro. {d:>n.mf} : Reserva n caracteres e inserta el número real con m cifras decimales alineado derecha >>> f'Texto {45} Texto' 'Texto 45 Texto' >>> f'Texto {45:6} Texto' 'Texto 45 Texto' >>> f'Texto {45:>6} Texto' 'Texto 45 Texto' >>> f'Texto {45:^6} Texto' 'Texto 45 Texto' >>> f'Texto {45:<6} Texto' 'Texto 45 Texto' >>> f'Texto {3.1416:6.2f} Texto' 'Texto 3.14 Texto' >>> f'Texto {3.1416:<6.2f} Texto' 'Texto 3.14 Texto' >>> f'Texto {"Hola":^6} Texto' 'Texto Hola Texto' >>> f"Texto {'Hola':^6} Texto" 'Texto Hola Texto' >>> f'Texto {'Hola':^6} Texto' SyntaxError: f-string: expecting '}' 5 Datos lógicos o booleanos (clase bool) Contiene únicamente dos elementos True y False que representan los valores lógicos verdadero y falso respectivamente. False tiene asociado el valor 0 y True tiene asociado el valor 1. Operaciones con valores lógicos Operadores lógicos: == (igual que) > (mayor) < (menor) >= (mayor o igual) <= (menor o igual) != (distinto de) not b (negación) : Devuelve True si el dato booleano b es False y False en caso contrario. b1 and b2 : Devuelve True si los datos booleanos b1 y b2 son True y False en caso contrario. b1 or b2 : Devuelve True si alguno de los datos booleanos b1 o b2 son True, y False en caso contrario. x False False True True >>> not True False >>> False or True True y False True False True Tabla de verdad not x x and y True False True False False False False True >>> True and False False >>> True and True True x or y False True True True >>> True > False True >>> True != False True Conversión de datos primitivos simples Las siguientes funciones convierten un dato de un tipo en otro, siempre y cuando la conversión sea posible. • int() convierte a entero. • float() convierte a real. • str() convierte a cadena. • bool() convierte a lógico. >>> int(2.3) 2 >>> int('12') 12 >>> int(True) 1 >>> float(3) 3.0 >>> float('3.4') 3.4 >>> float(True) 1.0 >>> str(3) '3' >>> str(3.14) '3.14' >>> str(True) 'True' >>> bool(0) False >>> bool('') False >>> bool('Hola') True 6 DATOS PRIMITIVOS COMPUESTOS (CONTENEDORES) Listas (clase list) Una lista es una secuencias ordenadas de objetos de distintos tipos. Se construyen poniendo los elementos entre corchetes [ ] separados por comas. [ objeto1 , objeto2 , … , objetoN ] Se caracterizan por: • Tienen orden. • Pueden contener elementos de distintos tipos. • Son mutables, es decir, pueden alterarse durante la ejecución de un programa. list(c) : Crea una lista con los elementos de la secuencia o colección c. Se pueden indicar los elementos separados por comas, mediante una cadena, o mediante una colección de elementos iterable. # Lista vacía >>> type([]) <class 'list'> # Lista con elementos de distintos tipos >>> [1, "dos", True] # Listas anidadas >>> [1, [2, 3], 4] >>> list() [] >>> list(1, 2, 3) [1, 2, 3] >>> list("Python") ['P', 'y', 't', 'h', 'o', 'n'] Acceso a los elementos de una lista Se utilizan los mismos operadores de acceso que para cadenas de caracteres. lista[i] : Devuelve el elemento de lista con el índice i. El índice del primer elemento de lista es 0. lista[i:j] : Devuelve la sublista desde el elemento con el índice i hasta el elemento con índice j-1. lista[i:j:k] : Devuelve la sublista desde el elemento i hasta el elemento j-1, tomando elementos cada k. Operaciones que no modifican una lista print(*lista) : Imprime los elementos de una lista len(lista) : Devuelve el número de elementos de lista. min(lista) : Devuelve el mínimo elemento de lista (siempre que los datos sean comparables). max(lista) : Devuelve el máximo elemento de lista (siempre que los datos sean comparables). sum(lista) : Devuelve la suma de los elementos de lista (siempre que los datos se puedan sumar). dato in lista : Devuelve True si el dato pertenece a lista y False en caso contrario. lista.index(dato) : Devuelve la posición que ocupa en lista el primer elemento con valor dato. lista.count(dato) : Devuelve el número de veces que el valor dato está contenido en lista. all(lista) : Devuelve True si todos los elementos de lista son True y False en caso contrario. any(lista) : Devuelve True si algún elemento de lista es True y False en caso contrario. >>> >>> 4 >>> 1 >>> 3 a = [1, 2, 2, 3] len(a) min(a) max(a) >>> sum(a) 8 >>> 3 in a True >>> a.index(2) 1 >>> a.count(2) 2 >>> all(a) True >>> any([0, False, 3<2]) False Operaciones que modifican una lista lista1 + lista2 : Crea una nueva lista concatenando los elementos de lista1 y lista2. lista.append(dato) : Añade dato al final de lista. 7 lista.insert(índice, dato) : Inserta dato en la posición índice de lista y desplaza los elementos una posición a partir de la posición índice. lista.remove(dato) : Elimina el primer elemento con valor dato de lista y desplaza los que están por detrás de él una posición hacia delante. lista.pop([índice]) : Devuelve el dato en la posición índice y lo elimina de lista, desplazando los elementos por detrás de él una posición hacia delante. lista.sort() : Ordena los elementos de lista de acuerdo al orden predefinido, siempre que los elementos sean comparables. lista.reverse() : invierte el orden de los elementos de lista. >>> >>> >>> [1, >>> >>> [1, a = [1, 3] b = [2, 4, 6] a + b 3, 2, 4, 6] a.append(5) a 3, 5] >>> >>> [1, >>> >>> [1, a.extend([8, 9]) a 3, 5, 8, 9] a.insert(2,9) a 3, 9, 5, 8, 9] >>> >>> [1, >>> 8 >>> [1, a.remove(3) a 9, 5, 8, 9] a.pop(3) a 9, 5, 9] >>> >>> [1, >>> >>> [9, a.sort() a 5, 9, 9] a.reverse() a 9, 5, 1] Copia de listas Existen dos formas de copiar listas: • Copia por referencia lista1 = lista2 : Asocia la variable lista1 la misma lista que tiene asociada la variable lista2, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que hagamos a través de lista1 o lista2 afectará a la misma lista. • Copia por valor lista1 = list(lista2) : Crea una copia de lista2 en una dirección de memoria diferente y se la asocia a lista1. Las variables apuntan a direcciones de memoria diferentes que contienen los mismos datos. Cualquier cambio que hagamos a través de lista1 no afectará a lista2 y viceversa. # copia por referencia >>> a = [1, 2, 3] >>> b = a >>> b.remove(2) >>> a [1, 3] >>> b [1, 3] # copia por valor >>> a = [1, 2, 3] >>> b = list(a) >>> b.remove(2) >>> a [1, 2, 3] >>> b [1, 3] Rangos (clase range) Los datos de tipo rango representan una secuencia inmutable de números enteros en sucesión aritmética (la diferencia entre dos términos consecutivos es siempre la misma) range(n) : secuencia creciente de n números enteros consecutivos que empieza en 0 y acaba en n-1. range(m,n) : secuencia creciente de enteros consecutivos que empieza en m y acaba en n-1. range(m,n,p) : secuencia de enteros que empieza en m y acaba justo antes de superar o igualar a n, aumentando los valores de p en p. Si p negativo, la secuencia será decreciente. >>> [0, >>> [4, list(range(4)) 1, 2, 3] list(range(4,8)) 5, 6, 7] >>> list(range(4,10,2)) [4, 6, 8] >>> list(range(-3)) [] >>> list(range(8,4)) [] >>> list(range(8,4,-1)) [8, 7, 6, 5] 8 VARIABLES Una variable es el nombre que se utiliza para referirse a un objeto que reside en la memoria. Cada variable debe tener un nombre único llamado identificador. A diferencia de otros lenguajes no tienen asociado un tipo y no es necesario declararlas antes de usarlas (tipado dinámico). El nombre de la variable debe respetar las siguientes reglas: • Comienzar siempre por una letra, seguida de otras letras o números. • No utilizar palabras reservadas del lenguaje: False None True __peg_parser__ and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield. Para asignar un valor a una variable se utiliza el operador =. Este operador permite asignar valores a mas de una variable con una sola instrucción (asignación múltiple). Para ver la dirección de memoria a la que apunta la variable (donde se encuentra el objeto) se utiliza la instrucción id(variable). Para borrar una variable se utiliza la instrucción del(). >>> lenguaje = 'Python' >>> id(lenguaje) 1741243188528 >>> x = 3.14 >>> y = 3 + 2 >>> >>> >>> >>> >>> >>> a1,a2 = 1,2 # Asignación múltiple a,b = b,a # Intercambio de valores x += 2 # Incremento (equivale a x=x+2) x -= 1 # Decremento (equivale a x=x-1) x = None # Valor no definido del(x) Por economía del lenguaje, nos tomaremos la licencia de hablar de "guardar un valor en una variable" en vez de "guardar el valor en un objeto y asociar una variable al objeto". ENTRADA Y SALIDA ENTRADA POR TECLADO Para asignar a una variable un valor introducido por teclado por el usuario se utiliza la instrucción: • input(mensaje) : Muestra la cadena mensaje por la terminal y devuelve una cadena con la entrada del usuario. El valor devuelto siempre es una cadena, incluso si el usuario introduce un dato numérico. Al ejecutarse esta función, el programa se detiene esperando que se escriba algo y se pulse la tecla INTRO . Posteriormente, se utilizarán las funciones de conversión de tipo para transformar la cadena en el tipo de dato deseado. >>> nombre = input('Introduce nombre: ') Introduce nombre: Pepe >>> nombre 'Pepe' >>> entrada = input('Introduce edad: ') Introduce edad: 45 >>> entrada '45' >>> edad = int(entrada) >>> edad 45 >>> edad = int(input('Introduce edad: ')) Introduce edad: 45 >>> edad 45 9 SALIDA POR PANTALLA Para mostrar un dato por la terminal se utiliza la instrucción: • print(dato1, ... , sep=' ', end='\n') : dato1, ... : son los datos a imprimir y pueden indicarse tantos como se quieran separados por comas. sep : establece el separador entre los datos, que por defecto es un espacio en blanco ' '. end : indica la cadena final de la impresión, que por defecto es un salto de línea \n. • print(*contenedor, ... , sep=' ', end='\n') : imprime todos los elementos del contenedor (cadena de caracteres, lista, etc.). >>> nombre = input('Teclea tu nombre: ') Teclea tu nombre: Pepe >>> print('Mi nombre es',nombre) Mi nombre es Pepe >>> print('Mi nombre es',nombre,sep='') Mi nombre esPepe >>> print('Mi nombre es',nombre,sep='\n') Mi nombre es Pepe>>> print('Mi nombre es',nombre,end='*') Mi nombre es Pepe* >>> print(f'Mi nombre es {nombre:^10}.') Mi nombre es Pepe >>> lista=[1,'hola',2] >>> print(*lista , sep='-',end='*') 1-hola-2* >>> cadena='hola' >>> print(*cadena , sep='-') h-o-l-a Ejercicio 1 : Se desea invertir capital en un banco. Cuanto dinero ganará al mes si el interés es el 2% mensual? Inicio inversion leer capital gana=capital*0.02 escribir gana fin entrada = input('Capital= ') capital = float(entrada) gana = capital * 0.02 print('Gana=',gana,'euros') Capital= 100 Gana= 2.0 euros Ejercicio 2 : Un vendedor recibe sueldo base y 10% de comisión de sus ventas. ¿Cuánto dinero obtiene de comisiones por 3 ventas mensuales? ¿Cuál es el sueldo total (base y comisiones)? Inicio Salario leer sb,v1,v2,v3 tot_vta=v1+v2+v3 com=tot_vta*0.10 tpag=sb+com escribir tpag,com fin salario_base = float(input("Salario base= ")) ventas_1 = float(input("Ventas_1= ")) ventas_2 = float(input("Ventas_2= ")) ventas_3 = float(input("Ventas_3= ")) total_venta = ventas_1 + ventas_2 + ventas_3 comisiones = total_venta * 0.1 # 10% total_pagado = salario_base + comisiones print(f'Sueldo = {total_pagado:.2f}€') Salario base= 1000 Ventas_1= 250 Ventas_2= 500 Ventas_3= 1250 Sueldo = 1200.00€ Ejercicio 3 : Sabiendo el diámetro, calcular la circunferencia y superficie de un círculo. Ejercicio 4 : Dados 2 números enteros distintos de cero, calcular el cuadrado de cada uno, su suma, resta, multiplicación y división; escribiendo el resultado de dichas operaciones. Ejercicio 5 : Calcular la edad de una persona sabiendo el año de nacimiento. 10 Ejercicio 6 : Resolver la ecuación de 1º grado: ax + b = 0 Ejercicio 7 : Realizar la conversión de grados Celsius a grados Fahrenheit. El resultado se mostrará con un dígito decimal. (F=(9/5)C+32). Ejercicio 8 : Se ofrece el 15% descuento sobre total de compra. ¿Cuánto paga el cliente por su compra? 11 ESTRUCTURAS CONDICIONALES (IF) La instrucción condicional permite evaluar el estado del programa y tomar decisiones sobre qué código ejecutar en función del mismo. SIMPLE DOBLE MULTIPLE if condición1 : bloque código if condición1 : bloque código else : bloque código if condición1 : bloque código elif condición2 : bloque código elif condición3 : bloque código ... else : bloque código Evalúa la expresión lógica condición1 y ejecuta el primer bloque de código si es True; si no, evalúa la siguientes condiciones elif hasta llegar a la primera que es True y ejecuta el bloque de código asociado. Si ninguna condición es True ejecuta el bloque de código después de else. Pueden aparecer varios bloques elif pero solo uno else al final. Un bloque de código es un grupo de sentencias con la misma indentación o sangrado. edad = 14 if edad <= 18 : print('Menor') edad = 14 if edad <= 18 : print('Menor') else: print('Activo') edad = 14 if edad <= 18 : print('Menor') elif edad > 65 : print('Jubilado') else: print('Activo') Ejercicio 9 : Leer una hora (hora, minuto y segundo) e indicar si la hora es correcta, en caso contrario no indicar nada. Análisis Entrada: hora,minuto,segundo Proceso: comprobar que hora, minuto y segundo están dentro de rango Salida: mensaje hora = int(input('Introduce hora= ')) minuto = int(input('Introduce minuto= ')) segundo = int(input('Introduce segundo= ')) if hora>=0 and hora<=23 and minuto>=0 and minuto<=59 and segundo>=0 and segundo<=59: print('La hora es correcta') Algoritno Inicio hora leer hora,minuto,segundo si (hora>=0 and hora<=23 and minuto>=0 and minuto<=59 and segundo>=0 and segundo<=59) escribir “La hora es correcta” fin Introduce hora= 12 Introduce minuto= 3 Introduce segundo= 4 La hora es correcta 12 Ejercicio 10 : Leer el nombre, primer apellido y segundo apellido de dos personas e indicar si pueden ser hermanos. Análisis Entrada: nombre y apellidos de las dos personas. Proceso: Comparar apellidos y ver coinciden los dos apellidos Salida: SI/NO pueden ser hermanos Algoritno Inicio familia leer a_nom,a_ap1,a_ap2 b_nom,b_ap1,b_ap2 si (a_ap1==b_ap1 y a_ap2==b_ap2) escribir “Si pueden ser hermanos” si no escribir “No pueden ser hermanos” fin-si fin a_nom = input('Nombre A = ') a_ap1 = input('Primer apellido A = ') a_ap2 = input('Segundo apellido A = ') b_nom = input('Nombre B = ') b_ap1 = input('Primer apellido B = ') b_ap2 = input('Segundo apellido B = ') if a_ap1==b_ap1 and a_ap2==b_ap2: print('SI pueden ser hermanos') else: print('NO pueden ser hermanos') Nombre A = Pepe Primer apellido A = Pérez Segundo apellido A = Toledo Nombre B = Ramón Primer apellido B = Pérez Segundo apellido B = Toledo SI pueden ser hermanos Ejercicio 11 : Cuantos intereses genera un capital? Si los intereses exceden los 7000€, se reinvierte la cantidad que supere los 7000€. En este caso, cual es el capital?. Mostrar resultado con 2 decimales. Análisis Entrada: capital, porcentaje interes Proceso: calcular intereses y capital final Salida: capital final Algoritno inicio intereses leer capital, por_interes intereses = capital * por_interes/100 si intereses>7000 entonces capital_final = capital+intereses si no capital_final = capital fin-si escribir capital_final fin capital = float(input('Capital inicial= ')) por_interes = float(input('Porcentaje interés= ')) intereses = capital * por_interes/100 if intereses>7000: capital_final = capital + intereses else: capital_final = capital print(f'Capital final = {capital_final:.2f}') Capital inicial= 1000 Porcentaje interés= 30 Capital final = 1000.00 Capital inicial= 100000 Porcentaje interés= 25 Capital final = 125000.00 13 Ejercicio 12 : Un alumno aprueba la asignatura si su promedio de 3 calificaciones es mayor o igual a 5, suspende en otro caso. Análisis Entrada: 3 calificaciones Proceso: calcular promedio de notas y ver si supera el 5. Salida: mensaje aprobado/suspenso Algoritno Inicio nota leer c1,c2,c3 prom=(c1+c2+c3)/3 si prom>=5 entonces escribir “aprobado” si no escribir “suspenso” fin-si fin nota_1 = float(input('Calificación 1= ')) nota_2 = float(input('Calificación 2= ')) nota_3 = float(input('Calificación 3= ')) promedio = (nota_1+nota_2+nota_3)/3 if promedio >= 5 : print('Aprobado') else : print('Suspenso') Calificación 1= 3 Calificación 2= 6 Calificación 3= 4 Suspenso Calificación 1= 4 Calificación 2= 6 Calificación 3= 9 Aprobado Ejercicio 13 : En una tienda se hace un descuento sobre el valor de la compra según el color de la bolita que el cliente saque al pagar en caja. Si la bolita es blanca no hay descuento, si es verde, el descuento es del 10%, si es amarilla es del 25%, si es azul del 50% y si es roja del 100%. ¿Cuál es el importe final de la compra? Análisis Entrada: Total compra, color bolita Proceso: calcular descuento en función del color e importe final Salida: Total a abonar Algoritno Inicio compra leer tc,color caso color blanco: d=0 verde: d=tc*0.10 amarillo: d=tc*0.25 azul: d=tc*0.50 rojo: d=tc fin-caso imp=tc-d escribir imp fin total_compra = float(input('Total compra= ')) color = input('Color de bolita= ') if color == 'blanco' : descuento = 0 elif color == 'verde' : descuento = total_compra * 0.10 elif color == 'amarillo' : descuento = total_compra * 0.25 elif color == 'azul' : descuento = total_compra * 0.50 elif color == 'rojo' : descuento = total_compra else : descuento = 0 print('Color de bolita erroneo') importe_final = total_compra-descuento print('A abonar= ',importe_final) Total compra= 100 Color de bolita= verde A abonar= 90.0 Total compra= 100 Color de bolita= negra Color de bolita erroneo A abonar= 100.0 14 Ejercicio 14 : Que pida dos números y diga si ambos son pares o impares. Ejercicio 15 : Leer el nombre, primer apellido y segundo apellido de dos personas e indicar pueden ser hermanos o primos. Ejercicio 16 : Leer 3 números e imprimir el mayor de los 3. Si ningún número es el mayor de los tres, debe mostrar el mensaje “no hay mayor”. Ejercicio 17 : La empresa paga semanalmente a sus trabajadores un salario base por hora trabajada. Calcular el sueldo semanal de un trabajador si las primeras 40 horas se pagan al salario base, de la hora 41 a 50 se pagan al doble del salario base y de la hora 51 en adelante se pagan al triple del salario base. Ejercicio 18 : Que pida un número del 1 al 7 y diga a qué día de la semana corresponde. Ejercicio 19 : En un almacén los artículos se codifican de la forma “nnnct”, donde nnn es el número de artículo, c es el color, solo es posible ”R” para rojo o “A” para azul, y t es la talla que puede ser “P” para pequeña, “G” para grande o “X” para extragrande. A partir del código de artículo introducido, hay que indicar cuál es el número de artículo, cual su color y cual su talla. Deberá mostrar el mensaje “no codificado” si se introducen valores no contemplados en el color o la talla. Ejercicio 20 : Calcular y escribir en pantalla la distancia recorrida (metros) cada segundo por un cuerpo durante los primeros 5 segundos de caída libre, sabiendo que la distancia recorrida viene dada por la expresión: S=1/2*at2 (S distancia en metros, a: aceleración debida a la gravedad 9,8m/s2, t: tiempo en segundos) ESTRUCTURAS CÍCLICAS BUCLES CONDICIONALES (WHILE) Repite la ejecución del bloque de código mientras la expresión lógica condición sea cierta. while condición : bloque código En Python no existe la estructura de repetición con condición al final (DO-WHILE con la condición de repetición al final. Se puede implementar con la estructura WHILE si nos aseguramos de que la condición se cumpla antes del bucle. # Pregunta al usuario por un número hasta que introduce 0. num = None while num != 0: num = int(input('Introduce un número: ')) Ejercicio 21 : Sumar n números enteros leídos desde el teclado Algoritmo: Inicio leer n suma = 0 mientras n>0 leer numero suma = suma+numero n = n-1 fin-mientras escribir suma n = int(input('Cantidad de numeros= ')) suma = 0 while n>0: numero = int(input('Numero= ')) suma = suma+numero n = n-1 print('Suma=',suma) Cantidad de numeros= 3 Numero= 3 Numero= 5 15 Numero= 7 Suma= 15 fin Ejercicio 22 : Leer varios números enteros desde el teclado e imprimir los positivos. Finalizar la entrada de números con el valor cero. Algoritmo: Inicio repetir leer numero si numero>0 escribir numero fin-si hasta n=0 fin numero=1 while numero!=0: numero=int(input('Numero= ')) if numero>0: print('Positivo=',numero) numero=int(input('Numero= ')) while numero!=0: if numero>0: print('Positivo=',numero) numero=int(input('Numero= ')) Numero= 3 Positivo= 3 Numero= -2 Numero= 4 Positivo= 4 Numero= 0 Numero= 3 Positivo= 3 Numero= -2 Numero= 4 Positivo= 4 Numero= 0 Ejercicio 23 : Leer el sexo de n personas e indicar cuantos hombres y cuantas mujeres hay en el grupo. Algoritmo: Inicio h=0 , m=0 leer n mientras n>0 leer sexo si sexo=‘hombre’ entonces h=h+1 si no m=m+1 fin-si n=n-1 fin-mientras escribir “nº hombres”, h escribir “nº mujeres”,m fin hombres = 0 mujeres = 0 n = int(input('Número de personas= ')) while n>0: sexo = input('Sexo (hombre/mujer)= ') if sexo=='hombre': hombres = hombres+1 else: mujeres = mujeres+1 n = n-1 print('N.Hombres=',hombres) print('N.Mujeres=',mujeres) Número de personas= 3 Sexo (hombre/mujer)= hombre Sexo (hombre/mujer)= mujer Sexo (hombre/mujer)= mujer N.Hombres= 1 N.Mujeres= 2 Ejercicio 24 : Un cliente al hacer la compra, cada vez que coge un artículo anota su precio, cantidad y calcula su coste. Va acumulando lo que gasta en todos los artículos hasta que decide dejar de comprar. Obtener el total de su compra. 16 Inicio repetir leer precio leer num coste=precio*num total=total+coste leer sigue_comprando hasta sigue_comprando=“no” escribir total fin total = 0 seguir_comprando = 'si' while seguir_comprando == 'si': precio = float(input('Precio= ')) cantidad = int(input('Cantidad= ')) coste = precio * cantidad total = total + coste seguir_comprando = input('Seguir (si/no)? ') print(f'Total compra= {total:.2f}€') Precio= 10 Cantidad= 3 Seguir (si/no)? si Precio= 20 Cantidad= 2 Seguir (si/no)? no Total compra= 70.00€ Ejercicio 25 : Calcular el factorial de un número. inicio leer numero factorial=1 mientras numero>0 factorial = factorial*numero numero = numero-1 fin-mientras escribir factorial fin numero = int(input('Numero= ')) factorial = 1 while numero>0: factorial = factorial*numero numero -= 1 print('Factorial=',factorial) Numero= 5 Factorial= 120 Ejercicio 26 : Escribir la frase en pantalla “Desea salir? (S/N)” hasta que el usuario pulse la tecla ‘S’ o ‘s’. Ejercicio 27 : Leer 10 números y obtener de cada uno su cuadrado, su cubo y su cuarta. Escribir la suma de todos los números y la media. Ejercicio 28 : Calcular el promedio de 7 notas de un alumno Ejercicio 29 : Que muestre los números del 1 al 100 en una tabla de 10x10 Ejercicio 30 : Que escriba las tablas de multiplicar del 0 al 10 Ejercicio 31 : Indicar cuantos dígitos pares tiene un número entero positivo N. BUCLES ITERATIVOS (FOR) Repite la ejecución del bloque de código para cada elemento de la secuencia, asignado dicho elemento a i en cada repetición. for i in secuencia: bloque código Se utiliza fundamentalmente para recorrer secuencias o colecciones de objetos: listas, tuplas, rangos, conjuntos o diccionarios. for x in [1,2,3,6]: print(x,end='*') 1*2*3*6* for letra in 'Hola': print(letra, end='*') H*o*l*a* for i in range(0, 10, 2): print(i, end=",") 0,2,4,6,8, Ejercicio 32 : Sumar n números enteros leídos desde el teclado 17 Algoritmo: Inicio leer n suma = 0 repetir desde i=1 hasta i=n leer numero suma = suma+numero fin-repetir escribir suma fin n = int(input('Cantidad de numeros= ')) suma = 0 for i in range(1,n+1): numero = int(input('Numero= ')) suma = suma+numero print('Suma=',suma) Cantidad de numeros= 3 Numero= 3 Numero= 5 Numero= 7 Suma= 15 Ejercicio 33 : Leer el sexo de n personas e indicar cuantos hombres y cuantas mujeres hay en el grupo. Algoritmo: Inicio h=0 , m=0 leer n repetir desde i=1 hasta i=n leer sexo si sexo=‘hombre’ entonces h=h+1 si no m=m+1 fin-si fin-repetir escribir “nº hombres”, h escribir “nº mujeres”,m fin hombres = 0 mujeres = 0 n = int(input('Número de personas= ')) for i in range(1,n+1): sexo = input('Sexo (hombre/mujer)= ') if sexo=='hombre': hombres = hombres+1 else: mujeres = mujeres+1 print('N.Hombres=',hombres) print('N.Mujeres=',mujeres) Número de personas= 3 Sexo (hombre/mujer)= hombre Sexo (hombre/mujer)= mujer Sexo (hombre/mujer)= mujer N.Hombres= 1 N.Mujeres= 2 Ejercicio 34 : Calcular el factorial de un número. inicio leer numero factorial=1 repetir desde n=1 hasta n=numero factorial = factorial*numero fin-mientras escribir factorial fin numero = int(input('Numero= ')) factorial = 1 for n in range(1,numero+1): factorial = factorial * n print('Factorial=',factorial) Numero= 5 Factorial= 120 Ejercicio 35 : Indicar si el número real introducido es correcto (solo puede contener dígitos, el punto decimal y el signo - ) inicio leer numero correcto=cierto repetir desde digito=digito1 hasta digito=digitoN si digito es incorrecto entonces correcto = falso fin-si fin-repetir numero = input('Numero= ') correcto = True for d in numero: if (d<'0' or d>'9') and d!='.' and d!='-': correcto = False if correcto: print('Número correcto') else: print('Numero incorrecto') 18 escribir correcto fin Numero= -34.6 Número correcto Numero= -34.56t Numero incorrecto Ejercicio 36 : Indicar cuantos dígitos pares tiene un número entero positivo N. numero = input('Numero= ') inicio pares = 0 leer numero for digito in numero: pares=0 d = int(digito) repetir desde digito=digito1 hasta digito=digitoN if d%2==0: si digito=par entonces pares = pares+1 pares=pares+1 print('Dígitos pares=',pares) fin-si fin-repetir Numero= 123457896 Dígitos pares= 4 escribir pares fin Ejercicio 37 : Leer 10 números y obtener de cada uno su cuadrado, su cubo y su cuarta. Escribir la suma de todos los números y la media. Ejercicio 38 : Calcular el promedio de 7 notas de un alumno Ejercicio 39 : Que muestre los números del 1 al 100 en una tabla de 10x10 Ejercicio 40 : Que escriba las tablas de multiplicar del 0 al 10 Ejercicio 41 : Se tienen N alumnos. Calcular la nota media, la nota más alta y la nota más baja de todo el grupo. Ejercicio 42 : Que pida dos números enteros positivos mayores que cero (control de entrada a cada número: pedir cada número hasta que sea correcto) y muestre todos los números que van desde el menor al mayor (sin separación entre ellos). Que diga cuantos hay, cual es la suma de todos ellos y cuál es su media. Ejercicio 43 : Introducir un número N e identificar si es un número palíndromo. (Un número palíndromo es un número natural que se lee igual de derecha a izquierda y de izquierda a derecha. Por ejemplo 1348431). Ejercicio 44 : Introducir una frase en minúsculas y contar las vocales y las consonantes. Ejercicio 45 : Calcular el factorial de N números enteros positivos leídos desde el teclado. Realizar control de entrada: N>0 y no se permite introducir ceros ni números negativos. Ejercicio 46 : Calcular el mínimo común múltiplo de dos números enteros positivos. Control de entrada a cada número. Ejercicio 47 : Un número primo es un número natural mayor que 1 que tiene únicamente dos divisores positivos distintos: él mismo y el 1. Calcular el mayor número primo entre 1 y N. FICHEROS Las operaciones más habituales con ficheros son: • • • • Crear o Abrir un fichero. Escribir datos en el fichero. Leer datos del fichero. Cerrar el fichero. Crear fichero nuevo y escribir dados 19 open(nombre, 'w') : Crea el fichero llamado nombre, lo abre en modo escritura (el argumento ‘w’ significa write) y devuelve un objeto que lo referencia. Si el fichero indicado por la ruta ya existe en el sistema, se reemplazará por el nuevo. fichero.write(c) : Escribe la cadena c en el fichero referenciado por fichero. f = open('saludo.txt', 'w') # Crea un nuevo fichero 'saludo.txt' f.write('Hola a Python!\n') # Escribe '¡Hola a Python!' en fichero 'saludo.txt' Añadir datos a un fichero existente open(nombre, 'a') : Abre el fichero llamado nombre en modo añadir (el argumento ‘a’ significa append) y devuelve un objeto que lo referencia. El nombre puede contener la ruta completa hasta llegar al fichero. fichero.write(c) : Escribe la cadena c en el fichero referenciado por fichero. f = open('saludo.txt', 'a') # Abre el fichero 'saludo.txt' f.write('Adiós Python!') # Añade '¡Adiós Python!' en el fichero 'saludo.txt' Leer datos de un fichero open(nombre, 'r') : Abre el fichero llamado nombre en modo lectura (el argumento ‘r’ significa read) y devuelve un objeto que lo referencia. Una vez abierto el fichero, se puede leer todo el contenido del fichero o se puede leer línea a línea. fichero.read() : Lee todos los caracteres fasta el final del fichero y los devuelve como cadena de caracteres. fichero.read(n) : Lee n caracteres del fichero y los devuelve como cadena de caracteres. Si se ha leído antes todo el fichero y se ha alcanzado el final de fichero, devolverá una cadena vacía. fichero.readline() : Lee una línea del fichero y la devuelve como cadenas de caracteres. Si se ha leído antes todo el fichero y se ha alcanzado el final de fichero, devolverá una cadena vacía. fichero.readlines() : Lee el fichero completo y devuelve una lista de cadenas de caracteres donde cada cadena es una línea. f = open('saludo.txt', 'r') print(f.read()) Hola Python! Adiós Python! f = open('saludo.txt','r') print(f.readline()) Hola Python! f = open('saludo.txt', 'r') print(f.readlines()) [ 'Hola Python!\n' , 'Adiós Python!' ] Cerrar un fichero fichero.close() : Cierra el fichero referenciado por el objeto fichero. Cuando se termina de trabajar con un fichero conviene cerrarlo, sobre todo si se abre en modo escritura. Mientras está abierto en modo escritura no se puede abrir por otra aplicación. Si no se cierra explícitamente un fichero, Python intentará cerrarlo cuando estime que ya no se va a usar más. f = open('saludo.txt', 'r') print(f.read()) f.close() Ejercicio 48 : (WC) Crear el fichero “salida.txt” con una cadena de caracteres (frase) introducida por teclado. inicio leer frase crear fichero y abrir para escritura escribir frase en fichero cerrar fichero frase = input('Frase: ') file = open('salida.txt','w') file.write(frase) file.close() 20 Fichero salida.txt: Hoy hace buen tiempo. fin Ejercicio 49 : (WN) Introducir una cadena de caracteres con varios números separados por un espacio. Crear el fichero “salida.txt” con los números separados por comas y con una coma al final. Inicio leer números crear fichero y abrir para escritura escribir frase en fichero cerrar fichero fin numeros = input('Numeros: ') lista = numeros.split() file = open('salida.txt','w') for numero in lista: file.write(numero+',') file.close() Fichero salida.txt: 11,22,33, Ejercicio 50 : (WC) Añadir al fichero “salida.txt” 3 cadenas de caracteres (frases) introducidas por teclado. Inicio abrir fichero para añadir al final repetir desde n=1 hasta 3 leer frase escribir frase en fichero fin-repetir cerrar fichero fin file = open('salida.txt','a') for i in range(3): file.write(input('Frase: ')) file.close() Frase: Hola. Frase: Buenos dias. Frase: Adios. Fichero salida.txt: …contenido anterior… Hola.Buenos dias.Adios. Ejercicio 51 : (RWC) Crear el fichero “salida.txt” con la cadena de caracteres (frase) introducida por teclado. A continuación, leerlo y mostrar su contenido en pantalla. inicio leer frase crear fichero y abrir para escritura escribir frase en fichero cerrar fichero abrir fichero para lectura leer fichero completo imprimir en pantalla fin frase = input('Frase: ') file = open('salida.txt','w') file.write(frase) file.close() file = open('salida.txt','r') texto = file.read() print(texto) file.close() Frase: Hoy hace un buen día. Hoy hace un buen día. Ejercicio 52 : Pedir por teclado una cadena de caracteres (frase) y crear un fichero llamado “salida.txt” con la frase repetida N veces. Cada frase en una línea distinta. inicio leer frase y N crear fichero y abrir para escritura repetir desde n=1 hasta N escribir frase en fichero fin-repetir cerrar fichero fin frase = input('Frase: ') N = int(input('Repeticiones: ')) file = open('salida.txt','w') for n in range(N): file.write(frase) file.close() Frase: Hola. Repeticiones: 4 Fichero salida.txt: Hola.Hola.Hola.Hola. 21 Ejercicio 53 : Pedir por teclado un número entero N y escribir en un fichero llamado “salida.txt” un cuadrado de NxN asteriscos (N líneas con N asteriscos cada una). Ejemplo: N=4 Fichero: **** **** **** **** N = int(input('N: ')) inicio file = open('salida.txt','w') leer N for i in range(N): crear fichero y abrir para escritura file.write('*' * N + '\n') repetir desde n=1 hasta N file.close() escribir N asteriscos en fichero fin-repetir N: 3 cerrar fichero Fichero salida.txt: *** fin *** *** Ejercicio 54 : Leer los caracteres de un fichero de texto llamado “entrada.txt” y escribirlos en otro fichero llamado “salida.txt”. Mostrar por pantalla el número total de caracteres leídos/escritos. Inicio Abrir fichero entrada.txt lectura Leer fichero entrada completo -> cadena Cerrar fichero entrada Crear y abrir fichero salida.txt escribir Escribir cadena en fichero salida Cerrar fichero salida Imprimir número caracteres de cadena fin entrada = open('entrada.txt','r') cadena = entrada.read() entrada.close() salida = open('salida.txt','w') salida.write(cadena) salida.close() print('Caracteres leídos=',len(cadena)) Caracteres leídos= 24 Ejercicio 55 : Comparar el contenido de dos ficheros de texto e indicar si son iguales. Inicio Abrir fichero entrada1.txt lectura Abrir fichero entrada2.txt lectura Leer fichero entrada1 completo -> cadena1 Leer fichero entrada2 completo -> cadena2 Si cadena1==cadena2 Escribir iguales Si no Escribir distintos Fin-si Cerrar fichero entrada1 Cerrar fichero entrada2 fin entrada1 = open('entrada1.txt','r') entrada2 = open('entrada2.txt','r') cadena1 = entrada1.read() cadena2 = entrada2.read() if cadena1==cadena2: print('son iguales') else: print('son distintos') entrada1.close() entrada2.close() entrada1.txt= Hola▒ entrada2.txt= Hola ▒ son distintos Ejercicio 56 : El fichero “entrada.txt” contiene una secuencia de números separados por un espacio. Imprimir en pantalla la suma de todos los números. 22 Inicio Abrir fichero entrada.txt lectura Leer fichero entrada completo -> cadena Cerrar fichero entrada Convertir cadena en lista suma = 0 Repetir numero cada elemento de lista suma = suma + int(numero) Fin-repetir Escribir suma fin entrada = open('entrada.txt','r') cadena = entrada.read() entrada.close() lista = cadena.split() suma = 0 for numero in lista: suma = suma + int(numero) print('Suma=',suma) entrada.txt: 1 2 3 4 5 4 3 4 5 7 4 2 8▒ Suma= 52 Ejercicio 57 : El fichero “entrada.txt” contiene una secuencia de números enteros separados por un espacio. Ordenar los números y escribirlos en el fichero “salida.txt” con un espacio entre los números y con un espacio al final del fichero. Inicio Abrir fichero entrada.txt lectura Leer fichero entrada completo -> cadena Cerrar fichero entrada Convertir cadena en lista Repetir numero cada elemento de lista Añadir int(numero) a lista_nueva Fin-repetir Ordenar lista_nueva Crear y abrir fichero salida.txt escribir Repetir numero cada elemento lista_nueva Escribir str(numero)+coma Fin-repetir Cerrar fichero salida entrada = open('entrada.txt','r') cadena = entrada.read() entrada.close() lista = cadena.split() lista_nueva = [] for numero in lista: lista_nueva.append( int(numero) ) numeros.sort() salida = open('salida.txt','w') for numero in lista_nueva: salida.write(str(numero)+',') salida.close() entrada.txt= 1 2 3 4 5 4 3 4 5 7 4 2 8▒ salida.txt= 1,2,2,3,3,4,4,4,4,5,5,7,8, fin Ejercicio 58 : El fichero “entrada.txt” contiene una secuencia de números separados por un espacio. Copiar los números en el fichero “salida.txt” eliminando los números que se repiten. El fichero “salida.txt” mantendrá un espacio entre los números y con un espacio al final del fichero. entrada = open('entrada.txt','r') Inicio cadena = entrada.read() Abrir fichero entrada.txt lectura entrada.close() Leer fichero entrada completo -> cadena lista = cadena.split() Cerrar fichero entrada lista_nueva = [] Convertir cadena en lista for numero in lista: Repetir numero cada elemento lista if numero not in lista_nueva: Si numero no está en lista entonces lista_nueva.append(numero) Añadir numero a lista_nueva salida = open('salida.txt','w') Fin-si for numero in lista_nueva: Fin-repetir salida.write(numero+' ') Crear y abrir fichero salida.txt escribir salida.close() Repetir numero cada elemento lista_nueva Escribir numero+espacio entrada.txt= 1 2 3 4 5 4 3 4 5 7 4 2 8▒ Fin-repetir salida.txt= 1 2 3 4 5 7 8 ▒ Cerrar fichero salida fin 23 Ejercicio 59 : El fichero “entrada.txt” contiene una secuencia de números separados por un espacio. Leer el fichero e introducir los números en una lista e imprimir en pantalla los números que no se repiten. Imprimir los números separados por comas y con una coma al final. entrada = open('entrada.txt','r') Inicio cadena = entrada.read() Abrir fichero entrada.txt lectura entrada.close() Leer fichero entrada completo -> cadena lista = cadena.split() Cerrar fichero entrada while lista!=[]: Convertir cadena en lista numero = lista.pop() Mientras lista no esté vacía if numero in lista: Extraer numero de lista while numero in lista: Si numero está en lista entonces lista.remove(numero) Eliminar numero de lista else: Si no print(numero+',') Escribir numero+coma Fin-si entrada.txt= 1 2 3 4 5 4 3 4 5 7 4 2 8▒ Fin-mientras 8,7,1, fin Ejercicio 60 : El fichero “entrada.txt” contiene una secuencia de números separados por un espacio. Leer el fichero e introducir los números en una lista. Imprimir en pantalla la cantidad de veces que se repite cada número. Imprimir primero el número y unido a él, la cantidad de repeticiones entre paréntesis. Utilizar comas para separar los números y la cantidad de repeticiones, y una coma al final. Por ejemplo… entrada.txt= 3 3 5 2 1 7 1 1 10 debería imprimir 1(3),2(1),3(2),5(1),7(1),10(1), Inicio Abrir fichero entrada.txt lectura Leer fichero entrada completo -> cadena Cerrar fichero entrada Convertir cadena en lista Mientras lista no esté vacía Extraer numero de lista repeticiones=0 Mientras numero esté en lista repeticiones = repeticiones+1 Eliminar numero de lista Fin-mientras Escribir numero y repeticiones Fin-mientras fin entrada = open('entrada.txt','r') cadena = entrada.read() entrada.close() lista = cadena.split() while lista!=[]: numero = lista.pop() repeticiones = 1 while numero in lista: repeticiones += 1 lista.remove(numero) print(numero,'(',repeticiones,'),',sep='',end='') entrada.txt= 1 2 3 4 5 4 3 4 5 7 4 2 8▒ 8(1),2(2),4(4),7(1),5(2),3(2),1(1), Ejercicio 61 : Contar las vocales que contiene el fichero entrada.txt Ejercicio 62 : Leer los caracteres de un fichero de texto llamado “entrada.txt”, eliminar los espacios y escribirlos en otro fichero llamado “salida.txt”. Mostrar por pantalla el número total de espacios eliminados. Ejercicio 63 : El fichero “entrada.txt” contiene una secuencia de números separados por un espacio. Copiar los números en el fichero “salida.txt” insertando entre cada pareja de números la media de ambos (número real con dos decimales). El fichero “salida.txt” mantendrá un espacio entre los números y con un espacio al final del fichero. Ejercicio 64 : El fichero “entrada.txt” contiene una secuencia de números separados por un espacio. Leer el fichero e introducir los números en una lista. A continuación, ordenar la lista e imprimir en 24 pantalla los números que faltan para completar la secuencia de números (desde el menor al mayor). Imprimir los números separados por comas y con una coma al final. Ejercicio 65 : Comparar el contenido de dos ficheros de texto e imprimir en pantalla cuantos caracteres no coinciden. Ejercicio 66 : El fichero “entrada.txt” contiene los DNIs de los clientes de una empresa. Pedir por teclado un DNI e imprimir en pantalla si el cliente pertenece a la empresa. Ejercicio 67 : Pedir por teclado una frase y calcular las veces que se repite cada letra. Crear un fichero “salida.txt” con los resultados, de forma que cada línea contenga un carácter y el número de repeticiones separados por un espacio. Ejercicio 68 : El fichero “entrada.txt” contiene una sopa de letras de 5 líneas y 5 caracteres en cada línea. Introducir por teclado dos números X e Y (entre 0 y 4) y mostrar en pantalla el carácter que ocupa la fila X y columna Y. Ejercicio 69 : Realizar un programa en Python que registre las personas que acceden a unas instalaciones. Para cada persona introducir por teclado su DNI y lo añadirá a un fichero llamado “salida.txt” (con un espacio de separación). Al final del día, cuando se teclee un DNI=0, el programa mostrará en pantalla los DNI’s de las personas que han entrado y el número de veces que han entrado cada una de ellas. Ejercicio 70 : Crear un fichero "entrada.txt" con los datos tus clientes introducidos por teclado. Cada línea contendrá los siguientes datos de un cliente: número de expediente (entero), nombre (string de 30 caracteres),3 números que corresponden a los importes de 3 facturas (float). Los datos estarán separados por un espacio. La creación del fichero finaliza cuando se introduce por teclado un 0 en el expediente. A continuación, leer el fichero "entrada.txt" y escribir en el fichero "salida.txt" el nombre y el importe total de las tres facturas de cada cliente (un cliente en cada línea). Ejercicio 71 : Disponemos de un fichero “entrada.txt” con los datos de los alumnos. Cada línea del fichero contiene el expediente, nombre (una palabra) y DNI de un alumno. Pedir por teclado un número de expediente, buscarlo en el fichero “entrada.txt” y escribir en el fichero "salida.txt" su Nombre y DNI separados por un espacio. Si el expediente no existe, escribir el mensaje “Expediente erróneo”. 25