PYTHON Araceli Trujillo Primer encuentro INTRODUCCIÓN E INSTALACIÓN DE PYTHON Un programa de Python es un fichero de texto plano con la extensión .py (o .pyw). Se puede crear un programa de Python con cualquier editor de texto plano, pero se recomienda utilizar editores de programación que incluyen herramientas que facilitan la escritura de programas, como IDLE o Visual Studio Code. Para la descarga del lenguaje Python lo hacemos del sitio: python.org (descargar la versión que sea acorde al sistema operativo que se tenga instalado) Ejecutamos el programa que descargamos y procedemos a instalarlo (marcamos 'Add Python3.8 to PATH'): Diferencia entre .py y .pyw Los programas Python pueden tener dos extensiones: .py y .pyw. La más utilizada es la primera, .py. Si se ejecutan desde IDLE, no hay diferencia entre ambas extensiones. Pero si se ejecutan desde un terminal o haciendo doble clic sobre los ficheros, entonces sí que hay diferencias. Los archivos .py son ejecutados por python.exe, mientras que los archivos .pyw son ejecutados por pythonw.exe. La principal diferencia es que python.exe crea una ventana de terminal (o aprovecha la ventana de terminal desde la que se ejecuta el programa), ventana que permite pedir valores al usuario o imprimir mensajes, mientras que pythonw.exe no crea ninguna ventana de terminal. Solamente se debe utilizar la extensión .pyw si el programa crea y gestiona su propia ventana de interfaz de usuario o si no queremos ni pedir datos al usuario ni mostrarle ninguna salida del programa. En caso contrario, es mejor utilizar la extensión .py. Otra diferencia es que python.exe ejecuta los programas de forma síncrona, es decir, que en un terminal no se puede ejecutar un nuevo programa .py hasta que ha terminado el programa anterior, mientras que pythonw.exe ejecuta los programas de forma asíncrona, es decir, que se pueden ir ejecutando nuevos programas aunque los anteriores no hayan terminado de ejecutarse. Una vez que iniciamos el Python aparece la siguiente ventana: Luego de haberse instalado podemos ejecutarlo desde el menú de opciones de Windows: Para crear nuestro primer programa debemos seleccionar desde el menú de opciones "File"->"New File": En esta nueva ventana debemos codificar nuestro programa en Python, el programa mínimo es mostrar un mensaje por pantalla: Para ejecutar el programa que codificamos debemos seleccionar desde la ventana de nuestro editor la opción "Run" -> "Run Module": Procedemos a guardar en el "disco duro" el primer programa en Python seleccionando la opción "File"->"Save" creamos un directorio donde almacenaremos cada uno de nuestros ejercicio que desarrollaremos durante las clases. Podemos ver en otra ventana el resultado de la ejecución de nuestro primer programa en Python: Si el editor que viene por defecto con Python no le convence por ser muy limitado y aplicado fundamentalmente en el aprendizaje de programación, puede consultar otros editores disponibles para Python. Mi recomendación es el editor VS Code. Ejecutar programas en ventana de terminal Para ejecutar un programa en una ventana de terminal, es necesario estar situado en el directorio en el que se encuentra el programa. Abrir la ventana de terminal en Windows Puede abrir una ventana de terminal o de PowerShell de varias maneras, que se muestran a continuación. La primera de ellas es más cómoda porque abre la ventana de terminal directamente en la carpeta en la que se encuentra el programa y no es necesario escribir comandos cd para desplazarse hasta ella, como ocurre en las dos siguientes formas. •Muestre en el Explorador de archivos de Windows la carpeta que contiene el programa, haga Shift + clic derecho y elija la opción "Abrir la ventana de PowerShell aquí" (en Windows 10) o "Abrir ventana de comandos aquí" (en Windows 7). Ejecutar el programa Una vez abierta la ventana de terminal en el directorio en el que se encuentra el programa, puede ejecutar el programa de varias formas. En los ejemplos siguientes, se ejecuta un programa prueba.py en la carpeta pruebas que escribe ¡Hola, mundo! en la pantalla. En una ventana de comandos de Windows 7 o Windows 10, puede ejecutar un programa de varias maneras: escriba simplemente el nombre del programa: C:\Users\Barto\Documents\LMSGI Barto\Python\pruebas>prueba.py ¡Hola, mundo! C:\Users\Barto\Documents\LMSGI Barto\Python\pruebas> BREVE HISTORIA DE PYTHON Python es un lenguaje de programación de propósito general muy poderoso y flexible, a la vez que sencillo y fácil de aprender. Es un lenguaje de alto nivel, que permite procesar fácilmente todo tipo de estructuras de datos, tanto numéricos como de texto. Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones e interactuar con el sistema operativo Amoeba. El nombre del lenguaje proviene de la afición de su creador por los humoristas británicos Monty Python Python se desarrolla bajo una licencia de Open source o código abierto aprobada por OSI, por lo que se puede usar y distribuir libremente, incluso para uso comercial. Es software libre, y está implementado en todas las plataformas y sistemas operativos habituales. La Python Software Foundation (PSF) es una corporación sin fines de lucro que posee los derechos de propiedad intelectual detrás del lenguaje de programación Python. Administran las licencias de código abierto para Python versión 2.1 y posteriores, y poseen y protegen las marcas comerciales asociadas con Python. Guido van Rossum, creador de Python, en la convención OSCON 2006 El gran software es soportado por grandes personas. La base de usuarios es entusiasta, dedicada a fomentar el uso del lenguaje y comprometida a que sea diversa y amigable. Comunidad(es) de Python en Venezuela La Fundación Python de Venezuela (FPyVE) es una organización sin fines de lucro creada el 2 de febrero de 2015 dedicada a fomentar al lenguaje de programación Python. El objetivo principal es el desarrollo, ejecución y/o consultoría de proyectos científicos, tecnológicos y productivos, para cumplir fines de interés público en torno al desarrollo Nacional, haciendo uso y promoviendo para tal fin, el uso del lenguaje de programación Python y las tecnologías asociadas a éste. Más información visite http://pyve.github.io/ Python como lenguaje Back-end Qué es un lenguaje backend Lo primero es entender de qué estamos hablando. Los lenguajes backend son nomenclaturas de programación que están compuestas por tres elementos centrales: un servidor, una aplicación y una base de datos. El backend también es conocido como el lado del script y una de sus principales funciones es crear arquitecturas robustas y seguras que no comprometan el desempeño de las aplicaciones web. Las tecnologías backend suelen recurrir a los frameworks para que los usuarios puedan interactuar y desempeñar ciertas tareas o generar respuestas. Existen cientos de lenguajes backend. Dado que es prácticamente imposible tener un conocimiento profundo de cada uno de ellos, le indicamos que Python se encuentra entre los primeros tres lenguajes backend. Python es una tecnología derivada de muchos otros lenguajes como Algol-68, Modula-3, ABC y SmallTalk; mientras que sus ventajas tienen que ver con que la capacidad de admitir métodos de programación estructurados y funcionales. Dicho lenguaje posee un formato simple, una sintaxis muy definida y pocas keywords, lo que permite que el aprendizaje sea muy rápido para quienes se inician en el ámbito del desarrollo backend. Esta facilidad en su comprensión provoca que Python también cuente con un código más simple de leer y de mantener por parte de otros desarrolladores involucrados en el proyecto. También resulta ideal para el desarrollo de prototipos, ya que su mantenimiento es fácil de manejar. En cuanto a sus librerías, estas son bastante grandes, portables y compatibles con Windows, UNIX y Mac. Y lo mejor es que se trata de un lenguaje backend de código abierto, lo que significa que puede ser descargado y usado gratuitamente, además de ser modificado y redistribuido sin coste alguno. Python resalta también por su legibilidad y limpieza en el código, la posibilidad de utilizar programación basada en objetos con clases y herencia múltiple y de agrupar el código en módulos y paquetes. Este lenguaje ofrece varios tipos de datos básicos como números, strings, diccionarios y listas; mientras que sus opciones avanzadas permiten el uso de generadores y listas por comprensión. Frameworks asociados: destacamos Django, un framework full-stack de código abierto lanzado en 2005 y que cuenta con una amplia colección de librerías, mapeo objeto-relacional (ORM), migraciones de esquemas de bases de datos y mecanismos de autenticación. Su gran ventaja es que ayuda a los desarrolladores a crear códigos y aplicaciones complejas de una manera fácil y en menor tiempo que con otros frameworks. Esto la convierte en una opción más eficiente y que ha sido capaz de cautivar a empresas como Mozilla, The Washington Times y Pinterest, entre otras. Sintaxis del lenguaje Python es sensible a mayúsculas y minúsculas, no es lo mismo llamar a la función input con la sintaxis: Input. Los nombres de variables también son sensibles a mayúsculas y minúsculas. Son dos variables distintas si en un lugar iniciamos a la variable "superficie" y luego hacemos referencia a "Superficie" Los nombres de variable no pueden tener espacios en blanco, caracteres especiales y empezar con un número. En Python, a diferencia de muchos otros lenguajes, no se declara el tipo de la variable al crearla. Las variables se definen de forma dinámica, lo que significa que no se tiene que especificar cuál es su tipo de antemano y puede tomar distintos valores en otro momento, incluso de un tipo diferente al que tenía previamente. Se usa el símbolo = para asignar valores. x=1 x = "texto" # Esto es posible porque los tipos son asignados dinámicamente Los nombres de variables pueden contener números y letras pero deben comenzar por una letra, además existen 28 palabras reservadas: Todo el código debe escribirse en la misma columna, estará or global elif and incorrecto si escribimos: pass if else assert print import except break lado=input("Ingrese la medida del lado del cuadrado:") raise in exec class lado=int(lado) return is finally continue superficie=lado*lado try lambda for def print("La superficie del cuadrado es") while not from del print(superficie) En caso de indexación, lo da la herramienta IDLE Entrada/Salida en Python Los programas serían de muy poca utilidad si no fueran capaces de interaccionar con el usuario. Para pedir información al usuario, debe utilizar las funciones integradas en el interprete del lenguaje, así como los argumentos de línea de comandos. Ejemplo de la función input: La función input() siempre devuelve un valor de cadenas de caracteres: >>> nombre = input('Ana: ¿Cómo se llama usted?: ') Ana: ¿Cómo se llama usted?: Leonardo >>> print nombre Leonardo Ejemplo de la función input: La función input() siempre devuelve un valor numérico: >>> edad = input('Ana: ¿Que edad tiene usted?: ') Ana: ¿Que edad tiene usted?: 38 >>> print edad 38 La forma general de mostrar información por pantalla es mediante una consola de comando, generalmente podemos mostrar texto y variables separándolos con comas, para este se usa la sentencia print TIPOS DE DATOS Los tipos de datos se pueden resumir en esta tabla: •Mutable: si su contenido (o dicho valor) puede cambiarse en tiempo de ejecución. •Inmutable: si su contenido (o dicho valor) no puede cambiarse en tiempo de ejecución. Cómo diferenciar entre distintos tipos de datos? En python, existen distintos tipos de datos. Algunos de ellos son números enteros como los números del 1 al 10 (enteros) o números continuos como los float o tipo texto con palabras o los booleanos que son el true o false o verdadero y falso Para saber cuál es el tipo de datos de una variable, podemos utilizar la función type(). A continuación una muestra de los distintos tipos de datos en python DATOS Los números enteros son aquellos que no tienen decimales, tanto positivos como negativos (además del cero). En Python se pueden representar mediante el tipo int (de integer, entero) o el tipo long (largo). La única diferencia es que el tipo long permite almacenar números más grandes. Es aconsejable no utilizar el tipo long a menos que sea necesario, para no malgastar memoria. Para representar un número real en Python se escribe primero la parte entera, seguido de un punto y por último la parte decimal, real = 0.2703 También se puede utilizar notación científica, y añadir una e (de exponente) para indicar un exponente en base 10. Por ejemplo: real = 0.1e-3 sería equivalente a 0.1 x 10-3 = 0.1 x 0.001 = 0.0001 Los números complejos son aquellos que tienen parte imaginaria. La mayor parte de los lenguajes de programación carecen de este tipo, aunque sea muy utilizado por ingenieros y científicos en general. En el caso de que necesites utilizar números complejos, o simplemente tengas curiosidad, este tipo, llamado complex en Python, también se almacena usando coma flotante, debido a que estos números son una extensión de los números reales. En concreto se almacena en una estructura de C, compuesta por dos variables de tipo double, sirviendo una de ellas para almacenar la parte real y la otra para la parte imaginaria. Los números complejos en Python se representan de la siguiente forma: complejo = 2.1 + 7.8j Cadenas de Caracteres Hasta este momento hemos visto como definir variables enteras y flotantes. Realizar su carga por asignación y por teclado. Para iniciarlas por asignación utilizamos el operador = #definición de una variable entera cantidad=20 #definición de una variable flotante altura=1.92 Como vemos el intérprete de Python diferencia una variable flotante de una variable entera por la presencia del caracter punto. Para realizar la carga por teclado utilizando la función input debemos llamar a la función int o float para convertir el dato devuelto por input: cantidad=int(input("Ingresar la cantidad de personas:")) altura=float(input("Ingresar la altura de la persona en metros ej:1.70:")) A estos dos tipos de datos fundamentales (int y float) se suma un tipo de dato muy utilizado que son las cadenas de caracteres. Una cadena de caracteres está compuesta por uno o más caracteres. También podemos iniciar una cadena de caracteres por asignación o ingresarla por teclado. Inicialización de una cadena por asignación: #definición e inicio de una cadena de caracteres dia="lunes" Igual resultado obtenemos si utilizamos la comilla simple: #definición e inicio de una cadena de caracteres dia='lunes' Para la carga por teclado de una cadena de caracteres utilizamos la función input que retorna una cadena de caracteres: nombre=input("ingrese su nombre:") Los operadores relacionales == Igualdad != Desigualdad < menor <= menor o igual > mayor >= mayor o igual Cadenas de escape Para escapar caracteres dentro de cadenas de caracteres se usa el carácter \ seguido de cualquier carácter ASCII. También es posible encerrar una cadena entre triples comillas (simples o dobles). De esta forma puede escribir el texto en varias líneas, y al imprimir la cadena, se respetarán los saltos de línea que se introdujeron sin tener que recurrir a los caracteres escapados y las comillas como los anteriores. Operadores aritméticos Operador + * ** / // % Descripción Ejemplo Suma>>> 3 + 2 5 Resta>>> 4 – 7 -3 Negación>>> -7 -7 Multiplicación>>> 2 * 6 12 Exponente>>> 2 ** 6 64 División >>> 3.5 / 2 1.75 División entera >>> 3.5 // 2 1.0 Módulo >>> 7 % 2 1 Operadores lógicos Operador and or not Descripción ¿se cumple a y b? ¿se cumple a o b? No al valor Ejemplo >>> True and False >>> True or False >>> not True False True False Operadores asignación = += -= *= /= **= //= %= Descripción asigna valor a una variable Ejemplo >>> r = 5 >>> r1 = r suma el valor a la variable >>> r = 5 >>> r += 10; r 15 resta el valor a la variable >>> r = 5 >>> r -= 10; r -5 multiplica el valor a la variable >>> r = 5 >>> r *= 10; r 50 divide el valor a la variable >>> r = 5 >>> r /= 10; r 0 calcula el exponente del valor de la variable >>> r = 5 >>> r **= 10; r 9765625 calcula la división entera del valor de la variable >>> r = 5 >>> r //= 10; r 0 devuelve el resto de la división del valor de la variable >>> r = 5 >>> r %= 10; r 5 COMENTARIOS DE UNA LÍNEA El signo para indicar el comienzo de un comentario en Python es el carácter numeral #, a partir del cual y hasta el fin de la línea, todo se considera un comentario y es ignorado por el intérprete Python. El carácter # puede estar al comienzo de línea (en cuyo caso toda la línea será ignorada), o después de finalizar una instrucción válida de código. COMENTARIOS MULTILÍNEA Python no dispone de un método para delimitar bloques de comentarios de varias líneas. Al igual que los comentarios de un sola línea, son cadenas de caracteres, en este caso van entre triples comillas (simples o dobles), esto tiene el inconveniente que, aunque no genera código ejecutable, el bloque delimitado no es ignorado por el intérprete Python, que crea el correspondiente objeto de tipo cadena de caracteres. >>> """comentarios en varias líneas""" 'comentarios en varias líneas' >>> '''comentarios en varias líneas''' 'comentarios en varias líneas' A continuación, una comparación entre comentarios multilínea y comentarios en solo una línea: >>> # Programa que calcula la sucesión ... # de números Fibonacci ... >>> # se definen las variables ... a, b = 0, 1 >>> while b < 100: # mientras b sea menor a 100 itere >>> # Calcula la sucesión ... # de números Fibonacci ... print b, ... ... a, b = b, a + b # se calcula la sucesión Fibonacci >>> """Calcula la sucesión ... de números Fibonacci""" Estructura de programación secuencial Cuando en un problema sólo participan operaciones, entradas y salidas se la denomina una estructura secuencial. Los problemas diagramados y codificados previamente emplean solo estructuras secuenciales. La programación requiere una práctica ininterrumpida de diagramación y codificación de problemas. Problema: Realizar la carga de dos números enteros por teclado e imprimir su suma y su producto. Diagrama de flujo: Tenemos dos entradas num1 y num2, dos operaciones: la suma y el producto de los valores ingresados y dos salidas, que son los resultados de la suma y el producto de los valores ingresados. En el símbolo de impresión podemos indicar una o más salidas, eso queda a criterio del programador, lo mismo para indicar las entradas por teclado. CODIGO num1=int(input("ingrese primer valor:")) num2=int(input("ingrese segundo valor:")) suma=num1+num2 producto=num1*num2 print("La suma de los dos valores es") print(suma) print("El producto de los dos valores es") print(producto) Realizar la carga del precio de un producto y la cantidad a llevar. Mostrar cuanto se debe pagar (se ingresa un valor entero en el precio del producto) Diagrama de flujo: Tenemos dos entradas: precio y cantidad, una operación para calcular el importe y una salida. precio=int(input("Ingrese el precio del producto:")) cantidad=int(input("Ingrese la cantidad de productos a llevar:")) importe=precio*cantidad print("El importe a pagar es") print(importe) Ver ejercicio compra EJERCICIOS PROPUESTOS 1. Realizar la carga del lado de un cuadrado, mostrar por pantalla el perímetro del mismo (El perímetro de un cuadrado se calcula multiplicando el valor del lado por cuatro) Ver ejercicio cuadrado 2. Escribir un programa en el cual se ingresen cuatro números, calcular e informar la suma de los dos primeros y el producto del tercero y el cuarto. Ver ejercicio suma y producto 3. Realizar un programa que lea cuatro valores numéricos e informar su suma y promedio. 4. Calcular el sueldo mensual de un operario conociendo la cantidad de horas trabajadas y el valor por hora. Ver ejercicio sueldo Ejercicio 2 Ejercicio 1 lado=int(input("Ingrese el lado del cuadrado:")) num1=int(input("Ingrese primer valor:")) perimetro=lado*4 num2=int(input("Ingrese segundo valor:")) print("El perimetro del cuadrado es") num3=int(input("Ingrese tercer valor:")) print(perimetro) num4=int(input("Ingrese cuarto valor:")) suma=num1+num2 producto=num3*num4 print("La suma de los dos primero valores es") print(suma) print("El producto del tercer y cuarto valor es") print(producto) Ejercicio 4 Ejercicio 3 num1=int(input("Ingrese primer valor:")) num2=int(input("Ingrese segundo valor:")) num3=int(input("Ingrese tercer valor:")) num4=int(input("Ingrese cuarto valor:")) suma=num1+num2+num3+num4 promedio=suma/4 print("La suma de los cuatro valores es") print(suma) print("El promedio es") print(promedio) horastrabajadas=int(input("Ingrese la cantidad de horas trabajadas:")) valorhora=int(input("Importe a pagar por hora:")) sueldo=horastrabajadas*valorhora print("Sueldo a pagar") print(sueldo) Estructura condicional IF - SIMPLE No todos los problemas pueden resolverse empleando estructuras secuenciales. Cuando hay que tomar una decisión aparecen las estructuras condicionales. En nuestra vida diaria se nos presentan situaciones donde debemos decidir. ¿Elijo la carrera A o la carrera B? ¿Me pongo este pantalón? Para ir al trabajo, ¿Elijo el camino A o el camino B? Al cursar una carrera, ¿Elijo el turno mañana, tarde o noche? Es común que en un problema se combinan estructuras secuenciales y condicionales. Estructura condicional simple. Cuando se presenta la elección tenemos la opción de realizar una actividad o no realizar ninguna. Representación gráfica de una estructura condicional a utilizar en un diagrama de flujo: Podemos observar: El rombo representa la condición. Hay dos opciones que se pueden tomar. Si la condición da verdadera se sigue el camino del verdadero, o sea el de la derecha, si la condición da falsa se sigue el camino de la izquierda donde no hay ninguna actividad. Se trata de una estructura CONDICIONAL SIMPLE porque por el camino del verdadero hay actividades y por el camino del falso no hay actividades. Por el camino del verdadero pueden existir varias operaciones, entradas y salidas, inclusive ya veremos que puede haber otras estructuras condicionales. Ejercicio: Programa: sueldo.py Ingresar el sueldo de una persona, si supera los 3000 dólares mostrar un mensaje en pantalla indicando que debe abonar impuestos. Diagrama de flujo: sueldo=int(input("Ingrese cual es su sueldo:")) if sueldo>3000: print("Esta persona debe abonar impuestos") La palabra clave "if" indica que estamos en presencia de una estructura condicional; seguidamente disponemos la condición y finalizamos la línea con el caracter dos puntos. La actividad dentro del if se indenta generalmente a 4 espacios. Todo lo que se encuentre en la rama del verdadero del if se debe disponer a 4 espacios corrido a derecha. Podemos observar lo siguiente: Siempre se hace la carga del sueldo, pero si el sueldo que ingresamos supera 3000 dolares se mostrará por pantalla el mensaje "Esta persona debe abonar impuestos", en caso que la persona cobre 3000 o menos no aparece nada por pantalla. La indentación es una característica obligatoria del lenguaje Python para codificación de las estructuras condicionales, de esta forma el intérprete de Python puede identificar donde finalizan las instrucciones contenidas en la rama verdadera del if. Ejecutando el programa e ingresamos un sueldo superior a 3000. Podemos observar como aparece en pantalla el mensaje "Esta persona debe abonar impuestos", ya que la condición del if es verdadera: Si lo volvemos a ejecutar e ingresamos un valor igual o inferior a 3000 podemos observar que la instrucción que se encuentra por la rama del verdadero del if no se ejecuta: Estructura condicional IF compuesta. Cuando se presenta la elección tenemos la opción de realizar una actividad u otra. Es decir tenemos actividades por el verdadero y por el falso de la condición. Lo más importante que hay que tener en cuenta que se realizan las actividades de la rama del verdadero o las del falso, NUNCA se realizan las actividades de las dos ramas. En una estructura condicional compuesta tenemos actividades tanto por la rama del verdadero como por la rama del falso. Ejercicio: Realizar un programa que solicite ingresar dos números distintos y muestre por pantalla el mayor de ellos. Se hace la entrada de num1 y num2 por teclado. Para saber cual variable tiene un valor mayor preguntamos si el contenido de num1 es mayor (>) que el contenido de num2, si la respuesta es verdadera vamos por la rama de la derecha e imprimimos num1, en caso que la condición sea falsa vamos por la rama de la izquierda (Falsa) e imprimimos num2. Como podemos observar nunca se imprimen num1 y num2 simultáneamente. Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos actividades por la rama del verdadero y del falso. Programa: mayor.py num1=int(input("Ingrese primer valor:")) num2=int(input("ingrese segundo valor:")) print("El valor mayor es") if num1>num2: print(num1) else: print(num2) Cotejemos el diagrama de flujo y la codificación y observemos que el primer bloque después del if representa la rama del verdadero y el segundo bloque después de la palabra clave else representa la rama del falso. Ejecutamos el programa, si hubo errores sintácticos corrijamos y carguemos dos valores, como por ejemplo: Ingrese el primer valor: 10 Ingrese el segundo valor: 4 El valor mayor es 10 Si ingresamos los valores 10 y 4 la condición del if retorna verdadero y ejecuta el primer bloque. Un programa se controla y corrige probando todos sus posibles resultados. Ejecutemos nuevamente el programa e ingresemos: Ingrese el primer valor: 10 Ingrese el segundo valor: 54 El valor mayor es 54 Cuando a un programa le corregimos todos los errores sintácticos y lógicos ha terminado nuestra tarea y podemos entregar el mismo al USUARIO que nos lo solicitó. En una condición deben disponerse únicamente variables, valores constantes y operadores relacionales. Problemas propuestos •Realizar un programa que solicite la carga por teclado de dos números, si el primero es mayor al segundo informar su suma y diferencia, en caso contrario informar el producto y la división del primero respecto al segundo. Ver ejercicio operaciones según numero mayor •Se ingresan tres notas de un alumno, si el promedio es mayor o igual a siete mostrar un mensaje "Promocionado". Ver ejercicio promocionado •Se ingresa por teclado un número positivo de uno o dos dígitos (1..99) mostrar un mensaje indicando si el número tiene uno o dos dígitos. (Tener en cuenta que condición debe cumplirse para tener dos dígitos un número entero) •Ver ejercicio cantidad de dígitos Segundo encuentro Estructuras condicionales anidadas IF-ELSE Estamos en presencia de una estructura condicional anidada cuando por la rama del verdadero o el falso de una estructura condicional hay otra estructura condicional. El diagrama de flujo que se presenta contiene dos estructuras condicionales. La principal se trata de una estructura condicional compuesta y la segunda es una estructura condicional simple y está contenida por la rama del falso de la primer estructura. Es común que se presenten estructuras condicionales anidadas aún más complejas. Ejercicio: Confeccionar un programa que pida por teclado tres notas de un alumno, calcule el promedio e imprima alguno de estos mensajes: Si el promedio es >=7 mostrar "Promocionado". Analicemos el siguiente diagrama. Se ingresan tres Si el promedio es >=4 y <7 mostrar "Regular". valores por teclado que representan las notas de un Si el promedio es <4 mostrar "Reprobado". alumno, se obtiene el promedio sumando los tres valores y dividiendo por 3 dicho resultado (Tener en cuenta que el resultado es un valor real ya que se utiliza el operador /). Primeramente preguntamos si el promedio es superior o igual a 7, en caso afirmativo va por la rama del verdadero de la estructura condicional mostramos un mensaje que indica "Promocionado" (con comillas indicamos un texto que debe imprimirse en pantalla). En caso que la condición nos de falso, por la rama del falso aparece otra estructura condicional, porque todavía debemos averiguar si el promedio del alumno es superior o igual a cuatro o inferior a cuatro. Estamos en presencia de dos estructuras condicionales compuestas. Programa: notas.py nota1=int(input("Ingrese primer nota:")) nota2=int(input("Ingrese segunda nota:")) nota3=int(input("Ingrese tercer nota:")) prom=(nota1+nota2+nota3)/3 if prom>=7: print("Promocionado") else: if prom>=4: print("Regular") else: print("Reprobado") Codifiquemos y ejecutemos este programa. Al correr el programa deberá solicitar por teclado la carga de tres notas y mostrarnos un mensaje según el promedio de las mismas. A la codificación del if anidado podemos observarla por el else del primer if. Como vemos debemos indentar a 8 caracteres las ramas del verdadero y falso del if anidado Problemas propuestos Se cargan por teclado tres números distintos. Mostrar por pantalla el mayor de ellos. Ver ejercicio numero mayor (3 números) Se ingresa por teclado un valor entero, mostrar una leyenda que indique si el número es positivo, negativo o nulo (es decir cero) Ver ejercicio positivo negativo o nulo Confeccionar un programa que permita cargar un número entero positivo de hasta tres cifras y muestre un mensaje indicando si tiene 1, 2, o 3 cifras. Mostrar un mensaje de error si el número de cifras es mayor. Ver ejercicio cantidad de dígitos (3 dígitos) Un postulante a un empleo, realiza un test de capacitación, se obtuvo la siguiente información: cantidad total de preguntas que se le realizaron y la cantidad de preguntas que contestó correctamente. Se pide confeccionar un programa que ingrese los dos datos por teclado e informe el nivel del mismo según el porcentaje de respuestas correctas que ha obtenido, y sabiendo que: Nivel máximo:Porcentaje>=90%. Nivel medio: Porcentaje>=75% y <90%. Ver ejercicio nivel de capacitación Nivel regular: Porcentaje>=50% y <75%. Fuera de nivel: Porcentaje<50%. Operadores lógicos and y or Estos dos operadores se emplean fundamentalmente en las estructuras condicionales para agrupar varias condiciones simples. Operador and Confeccionar un programa que lea por teclado tres números enteros distintos y nos muestre el mayor. Traducido se lo lee como “Y”. Si la Condición 1 es verdadera Y la condición 2 es verdadera luego ejecutar la rama del verdadero. Cuando vinculamos dos condiciones con el operador “and”, las dos condiciones deben ser verdaderas para que el resultado de la condición compuesta de Verdadero y continúe por la rama del verdadero de la estructura condicional. La utilización de operadores lógicos permiten en muchos casos plantear algoritmos más cortos y comprensibles. Este ejercicio se puede resolver sin operadores lógicos pero el utilizarlos nos permite que sea mas simple la solución. La primera estructura condicional es una ESTRUCTURA CONDICIONAL COMPUESTA con una CONDICION COMPUESTA. Podemos leerla de la siguiente forma: Si el contenido de la variable num1 es mayor al contenido de la variable num2 "Y" si el contenido de la variable num1 es mayor al contenido de la variable num3 entonces la CONDICION COMPUESTA resulta Verdadera. Si una de las condiciones simples da falso la CONDICION COMPUESTA da Falso y continúa por la rama del falso. Es decir que se mostrará el contenido de num1 si y sólo si num1 > num2 y num1 > num3. En caso de ser Falsa la condición, analizamos el contenido de num2 y num3 para ver cual tiene un valor mayor. En esta segunda estructura condicional no se requieren operadores lógicos al haber una condición simple. Programa: mayores.py num1=int(input("Ingrese primer valor:")) num2=int(input("Ingrese segundo valor:")) num3=int(input("Ingrese tercer valor:")) print("El mayor de los tres valores es") if num1>num2 and num1>num3: print(num1) else: if num2>num3: print(num2) else: print(num3) Operador or Traducido se lo lee como “O”. Si la condición 1 es Verdadera o la condición 2 es Verdadera, luego ejecutar la rama del Verdadero. Cuando vinculamos dos o más condiciones con el operador “or", con que una de las dos condiciones sea Verdadera alcanza para que el resultado de la condición compuesta sea Verdadero. Se carga una fecha (día, mes y año) por teclado. Mostrar un mensaje si corresponde al primer trimestre del año (enero, febrero o marzo) Cargar por teclado el valor numérico del día, mes y año. Ejemplo: dia:10 mes:2 año:2018 La carga de una fecha se hace por partes, ingresamos las variables dia, mes y año. Mostramos el mensaje "Corresponde al primer trimestre" en caso que el mes ingresado por teclado sea igual a 1, 2 ó 3. En la condición no participan las variables dia y año. Programa: trimestre.py dia=int(input("Ingrese nro de día:")) mes=int(input("Ingrese nro de mes:")) año=int(input("Ingrese nro de año:")) if mes==1 or mes==2 or mes==3: print("Corresponde al primer trimestre") Problemas propuestos •Realizar un programa que pida cargar una fecha cualquiera, luego verificar si dicha fecha corresponde a Navidad. Ver ejercicio navidad •Se ingresan por teclado tres números, si todos los valores ingresados son menores a 10, imprimir en pantalla la leyenda "Todos los números son menores a diez". Ver ejercicio menores a 10 •Se ingresan por teclado tres números, si al menos uno de los valores ingresados es menor a 10, imprimir en pantalla la leyenda "Alguno de los números es menor a diez". Ver ejercicio menores a 10 (or) •Se ingresan tres valores por teclado, si todos son iguales se imprime la suma del primero con el segundo y a este resultado se lo multiplica por el tercero. •Escribir un programa que pida ingresar la coordenada de un punto en el plano, es decir dos valores enteros x e y (distintos a cero). Posteriormente imprimir en pantalla en que cuadrante se ubica dicho punto. (1º Cuadrante si x > 0 Y y > 0 , 2º Cuadrante: x < 0 Y y > 0, etc.) Ver ejercicio punto en el plano •De un operario se conoce su sueldo y los años de antigüedad. Se pide confeccionar un programa que lea los datos de entrada e informe: a) Si el sueldo es inferior a 500 y su antigüedad es igual o superior a 10 años, otorgarle un aumento del 20 %, mostrar el sueldo a pagar. b)Si el sueldo es inferior a 500 pero su antigüedad es menor a 10 años, otorgarle un aumento de 5 %. c) Si el sueldo es mayor o igual a 500 mostrar el sueldo en pantalla sin cambios. •Escribir un programa en el cual: dada una lista de tres valores numéricos distintos se calcule e informe su rango de variación (debe mostrar el mayor y el menor de ellos) BUCLES WHILE Hasta ahora hemos empleado estructuras SECUENCIALES y CONDICIONALES. Existe otro tipo de estructuras tan importantes como las anteriores que son las estructuras REPETITIVAS. Una estructura repetitiva permite ejecutar una instrucción o un conjunto de instrucciones varias veces. Una estructura repetitiva se caracteriza por: - La sentencia o las sentencias que se repiten. - El test o prueba de condición antes de cada repetición, que motivará que se repitan o no las instrucciones. No debemos confundir la representación gráfica de la estructura repetitiva while (Mientras) con la estructura condicional if (Si) Funcionamiento: En primer lugar se verifica la condición, si la misma resulta verdadera se ejecutan las operaciones que indicamos por la rama del Verdadero. A la rama del verdadero la graficamos en la parte inferior de la condición. Una línea al final del bloque de repetición la conecta con la parte superior de la estructura repetitiva. En caso que la condición sea Falsa continúa por la rama del Falso y sale de la estructura repetitiva para continuar con la ejecución del algoritmo. El bloque se repite MIENTRAS la condición sea Verdadera. Importante: Si la condición siempre retorna verdadero estamos en presencia de un ciclo repetitivo infinito. Dicha situación es un error de programación lógico, nunca finalizará el programa. Realizar un programa que imprima en pantalla los números del 1 al 100. Sin conocer las estructuras repetitivas podemos resolver el problema empleando una estructura secuencial. Iniciamos una variable con el valor 1, luego imprimimos la variable, incrementamos nuevamente la variable y así sucesivamente. Si continuamos con el diagrama veríamos que es casi interminable. Emplear una estructura secuencial para resolver este problema produce un diagrama de flujo y un programa en Python muy largo. Ahora veamos la solución empleando una estructura repetitiva while: Es muy importante analizar este diagrama: La primera operación inicializa la variable x en 1, seguidamente comienza la estructura repetitiva while y disponemos la siguiente condición ( x <= 100), se lee MIENTRAS la variable x sea menor o igual a 100. Al ejecutarse la condición retorna VERDADERO porque el contenido de x (1) es menor o igual a 100. Al ser la condición verdadera se ejecuta el bloque de instrucciones que contiene la estructura while. El bloque de instrucciones contiene una salida y una operación. Se imprime el contenido de x, y seguidamente se incrementa la variable x en uno. La operación x=x+1 se lee como "en la variable x se guarda el contenido de x más 1". Es decir, si x contiene 1 luego de ejecutarse esta operación se almacenará en x un 2. Al finalizar el bloque de instrucciones que contiene la estructura repetitiva se verifica nuevamente la condición de la estructura repetitiva y se repite el proceso explicado anteriormente. Mientras la condición retorne verdadero se ejecuta el bloque de instrucciones; al retornar falso la verificación de la condición se sale de la estructura repetitiva y continua el algoritmo, en este caso finaliza el programa. Lo más difícil es la definición de la condición de la estructura while y que bloque de instrucciones se van a repetir. Observar que si, por ejemplo, disponemos la condición x >=100 ( si x es mayor o igual a 100) no provoca ningún error sintáctico pero estamos en presencia de un error lógico porque al evaluarse por primera vez la condición retorna falso y no se ejecuta el bloque de instrucciones que queríamos repetir 100 veces. No existe una RECETA para definir una condición de una estructura repetitiva, sino que se logra con una práctica continua solucionando problemas. Una vez planteado el diagrama debemos verificar si el mismo es una solución válida al problema (en este caso se debe imprimir los números del 1 al 100 en pantalla), para ello podemos hacer un seguimiento del flujo del diagrama y los valores que toman las variables a lo largo de la ejecución: x 1 2 3 4 . . 100 101 Cuando x vale 101 la condición de la estructura repetitiva retorna falso, en este caso finaliza el diagrama. Importante: Podemos observar que el bloque repetitivo puede no ejecutarse ninguna vez si la condición retorna falso la primera vez. La variable x debe estar inicializada con algún valor antes que se ejecute la operación x=x+1 en caso de no estar inicializada aparece un error de compilación. Programa: numeros.py x=1 while x<=100: print(x) x=x+1 Recordemos que un problema no estará 100% solucionado si no codificamos el programa en nuestro caso en Python que muestre los resultados buscados. Es importante notar que seguido de la palabra clave while disponemos la condición y finalmente los dos puntos. Todo el código contenido en la estructura repetitiva debe estar indentado (normalmente a cuatro espacios) Probemos algunas modificaciones de este programa y veamos que cambios se deberían hacer para: 1 - Imprimir los números del 1 al 500. 2 - Imprimir los números del 50 al 100. 3 - Imprimir los números del -50 al 0. 4 - Imprimir los números del 2 al 100 pero de 2 en 2 (2,4,6,8 ....100). Respuestas: 1 - Debemos cambiar la condición del while con x<=500. 2 - Debemos inicializar x con el valor 50. 3 - Inicializar x con el valor -50 y fijar la condición x<=0. 4 - Inicializar a x con el valor 2 y dentro del bloque repetitivo incrementar a x en 2 (x=x+2) Ejercicio Codificar un programa que solicite la carga de un valor positivo y nos muestre desde 1 hasta el valor ingresado de uno en uno. Ejemplo: Si ingresamos 30 se debe mostrar en pantalla los números del 1 al 30. Es de FUNDAMENTAL importancia analizar los diagramas de flujo y la posterior codificación en Python de los siguientes problemas, en varios problemas se presentan otras situaciones no vistas en el ejercicio anterior. Podemos observar que se ingresa por teclado la variable n. El operador puede cargar cualquier valor. Si el usuario carga 10 el bloque repetitivo se ejecutará 10 veces, ya que la condición es “Mientras x<=n ”, es decir “mientras x sea menor o igual a 10”; pues x comienza en uno y se incrementa en uno cada vez que se ejecuta el bloque repetitivo. A la prueba del diagrama la podemos realizar dándole valores a las variables; por ejemplo, si ingresamos 5 el seguimiento es el siguiente: n x 5 1 (Se imprime el contenido de x) 2 " " 3 " " 4 " " 5 " " 6 (Sale del while porque 6 no es menor o igual a 5) Programa: valorfinal.py n=int(input("Ingrese el valor final:")) x=1 while x<=n: print(x) x=x+1 Los nombres de las variables n y x pueden ser palabras o letras (como en este caso) La variable x recibe el nombre de CONTADOR. Un contador es un tipo especial de variable que se incrementa o disminuye con valores constantes durante la ejecución del programa. El contador x nos indica en cada momento la cantidad de valores impresos en pantalla. Problema 3: Desarrollar un programa que permita la carga de 10 valores por teclado y nos muestre posteriormente la suma de los valores ingresados y su promedio. En este problema, a semejanza de los anteriores, tenemos un CONTADOR llamado x que nos sirve para contar las vueltas que debe repetir el while. También aparece el concepto de ACUMULADOR (un acumulador es un tipo especial de variable que se incrementa o disminuye con valores variables durante la ejecución del programa) Hemos dado el nombre de suma a nuestro acumulador. Cada ciclo que se repita la estructura repetitiva, la variable suma se incrementa con el contenido ingresado en la variable valor. La prueba del diagrama se realiza dándole valores a las variables: valor suma x promedio 0 0 (Antes de entrar a la estructura repetitiva estos son los valores). 5 5 1 16 21 2 7 28 3 10 38 4 2 40 5 20 60 6 5 65 7 5 70 8 10 80 9 2 82 10 8 90 11 9 Este es un seguimiento del diagrama planteado. Los números que toma la variable valor dependerá de qué cifras cargue el operador durante la ejecución del programa. El promedio se calcula al salir de la estructura repetitiva (es decir primero sumamos los 10 valores ingresados y luego los dividimos por 10) Hay que tener en cuenta que cuando en la variable valor se carga el primer valor (en este ejemplo 5) al cargarse el segundo valor (16) el valor anterior 5 se pierde, por ello la necesidad de ir almacenando en la variable suma los valores ingresados. Programa: promedio.py x=1 suma=0 while x<=10: valor=int(input("Ingrese un valor:")) suma=suma+valor x=x+1 promedio=suma/10 print("La suma de los 10 valores es") print(suma) print("El promedio es") print(promedio) El resultado del promedio es un valor real es decir con coma. Si queremos que el resultado de la división solo retorne la parte entera del promedio debemos utilizar el operador //: promedio=suma//10 El interprete de Python sabe que el promedio se calcula al finalizar el while ya que se encuentra codificado en la columna 1. Las tres instrucciones contenidas en el while están indentadas. Problema 4: Una planta que fabrica perfiles de hierro posee un lote de n piezas. Confeccionar un programa que pida ingresar por teclado la cantidad de piezas a procesar y luego ingrese la longitud de cada perfil; sabiendo que la pieza cuya longitud esté comprendida en el rango de 1.20 y 1.30 son aptas. Imprimir por pantalla la cantidad de piezas aptas que hay en el lote. Podemos observar que dentro de una estructura repetitiva puede haber estructuras condicionales (inclusive puede haber otras estructuras repetitivas que veremos más adelante) En este problema hay que cargar inicialmente la cantidad de piezas a ingresar ( n ), seguidamente se cargan n valores de largos de piezas. Cada vez que ingresamos un largo de pieza (largo) verificamos si es una medida correcta (debe estar entre 1.20 y 1.30 el largo para que sea correcta), en caso de ser correcta la CONTAMOS (incrementamos la variable cantidad en 1) Al contador cantidad lo inicializamos en cero porque inicialmente no se ha cargado ningún largo de pieza. Cuando salimos de la estructura repetitiva porque se han cargado n largos de piezas mostramos por pantalla el contador cantidad (que representa la cantidad de piezas aptas). En este problema tenemos dos CONTADORES: x (Cuenta la cantidad de piezas cargadas hasta el momento) cantidad (Cuenta los perfiles de hierro aptos) Programa: piezas.py cantidad=0 x=1 n=int(input("Cuantas piezas cargara:")) while x<=n: largo=float(input("Ingrese la medida de la pieza:")) if largo>=1.2 and largo<=1.3: cantidad=cantidad+1 x=x+1 print("La cantidad de piezas aptas son") print(cantidad) Veamos algunas cosas nuevas: Cuando queremos cargar por teclado un valor con decimales debemos utilizar la función float en lugar de int: largo=float(input("Ingrese la medida de la pieza:")) Problemas propuestos Escribir un programa que solicite ingresar 10 notas de alumnos y nos informe cuántos tienen notas mayores o iguales a 7 y cuántos menores. Ver ejercicio notas Se ingresan un conjunto de n alturas de personas por teclado. Mostrar la altura promedio de las personas. Ver ejercicio altura En una empresa trabajan n empleados cuyos sueldos oscilan entre $100 y $500, realizar un programa que lea los sueldos que cobra cada empleado e informe cuántos empleados cobran entre $100 y $300 y cuántos cobran más de $300. Además el programa deberá informar el importe que gasta la empresa en sueldos al personal. Ver ejercicio sueldo 300 Realizar un programa que imprima 25 términos de la serie 11 - 22 - 33 - 44, etc. (No se ingresan valores por teclado) Ver ejercicio ciclo a 11 Mostrar los múltiplos de 8 hasta el valor 500. Debe aparecer en pantalla 8 - 16 - 24, etc. Ver ejercicio ciclo en 8 Realizar un programa que permita cargar dos listas de 15 valores cada una. Informar con un mensaje cual de las dos listas tiene un valor acumulado mayor (mensajes "Lista 1 mayor", "Lista 2 mayor", "Listas iguales") Ver ejercicio listas y ciclos Tener en cuenta que puede haber dos o más estructuras repetitivas en un algoritmo. Desarrollar un programa que permita cargar n números enteros y luego nos informe cuántos valores fueron pares y cuántos impares. Ver ejercicio pares o impares Emplear el operador “%” en la condición de la estructura condicional (este operador retorna el resto de la división de dos valores, por ejemplo 11%2 retorna un 1): if valor%2==0: BUCLE FOR Cualquier problema que requiera una estructura repetitiva se puede resolver empleando la estructura while, pero hay otra estructura repetitiva cuyo planteo es más sencillo en ciertas situaciones que tenemos que recorrer una lista de datos. En general, la estructura repetitiva for se usa en aquellas situaciones en las cuales queremos que una variable vaya tomando un valor de una lista definida de valores. Tenemos primero la palabra clave for y Veremos con una serie de ejemplos el empleo del for. seguidamente el nombre de la variable que Problema 1: almacenará en cada vuelta del for el valor Realizar un programa que imprima en pantalla los entero que retorna la función range. números del 0 al 100. Este problema lo podemos resolver La función range retorna la primera vez el perfectamente con el ciclo while pero en esta situación lo valor 0 y se almacena en x, luego el 1 y así resolveremos empleando el for. sucesivamente hasta que retorna el valor que le pasamos a range menos uno (es decir en for x in range(101): nuestro ejemplo al final retorna un 100) print(x) Tengamos en cuenta que este mismo problema resuelto con la estructura while debería ser: x=0 while x<101: print(x) x=x+1 Problema 2: Realizar un programa que imprima en pantalla los números del 20 al 30. Programa: numerodeveinte.py for x in range(20,31): print(x) La función range puede tener dos parámetros, el primero indica el valor inicial que tomará la variable x, cada vuelta del for la variable x toma el valor siguiente hasta llegar al valor indicado por el segundo parámetro de la función range menos uno. Problema 3: Imprimir todos los números impares que hay entre 1 y 100. Programa: numeroscien.py for x in range(1,100,2): print(x) La función range puede tener también tres parámetros, el primero indica el valor inicial que tomará la variable x, el segundo parámetro el valor final (que no se incluye) y el tercer parámetro indica cuanto se incrementa cada vuelta x. En nuestro ejemplo la primer vuelta del for x recibe el valor 1, la segunda vuelta toma el valor 3 y así sucesivamente hasta el valor 99. Problema 4: Desarrollar un programa que permita la carga de 10 valores por teclado y nos muestre posteriormente la suma de los valores ingresados y su promedio. Este problema ya lo desarrollamos, lo resolveremos empleando la estructura for para repetir la carga de los diez valores por teclado. Programa: sumadevalores.py suma=0 for f in range(10): valor=int(input("Ingrese valor:")) suma=suma+valor print("La suma es") print(suma) promedio=suma/10 print("El promedio es:") print(promedio) Como vemos la variable f del for solo sirve para iterar(repetir) las diez veces el bloque contenido en el for. El resultado hubiese sido el mismo si llamamos a la funcion range con los valores: range(1,11) Problema 5: Escribir un programa que solicite por teclado 10 notas de alumnos y nos informe cuántos tienen notas mayores o iguales a 7 y cuántos menores. Programa: aprobados.py aprobados=0 reprobados=0 for f in range(10): nota=int(input("Ingrese la nota:")) if nota>=7: aprobados=aprobados+1 else: reprobados=reprobados+1 print("Cantidad de aprobados") print(aprobados) print("Cantidad de reprobados") print(reprobados) Nuevamente utilizamos el for ya que sabemos que el ciclo repetitivo debe repetirse 10 veces. Recordemos que si utilizamos el while debemos llevar un contador y recordar de incrementarlo en cada vuelta. Problema 6: Escribir un programa que lea 10 números enteros y luego muestre cuántos valores ingresados fueron múltiplos de 3 y cuántos de 5. Debemos tener en cuenta que hay números que son múltiplos de 3 y de 5 a la vez. Programa: multiplos.py mul3=0 mul5=0 for f in range(10): valor=int(input("Ingrese un valor:")) if valor%3==0: mul3=mul3+1 if valor%5==0: mul5=mul5+1 print("Cantidad de valores ingresados múltiplos de 3") print(mul3) print("Cantidad de valores ingresados múltiplos de 5") print(mul5) Si ejecutamos el programa tenemos una salida similar a esta: Problema 7: Codificar un programa que lea n números enteros y calcule la cantidad de valores mayores o iguales a 1000 (n se carga por teclado) Este tipo de problemas también se puede resolver empleando la estructura repetitiva for. Lo primero que se hace es cargar una variable que indique la cantidad de valores a ingresar. Dicha variable se carga antes de entrar a la estructura repetitiva for. Programa: ejercicio46.py cantidad=0 n=int(input("Cuantos valores ingresará:")) for f in range(n): valor=int(input("Ingrese el valor:")) if valor>=1000: cantidad=cantidad+1 print("La cantidad de valores ingresados mayores o iguales a 1000 son") print(cantidad) Problemas propuestos •Confeccionar un programa que lea n pares de datos, cada par de datos corresponde a la medida de la base y la altura de un triángulo. El programa deberá informar: a) De cada triángulo la medida de su base, su altura y su superficie. b) La cantidad de triángulos cuya superficie es mayor a 12. Ver ejercicio triángulo •Desarrollar un programa que solicite la carga de 10 números e imprima la suma de los últimos 5 valores ingresados. Ver ejercicio suma últimos 5 •Desarrollar un programa que muestre la tabla de multiplicar del 5 (del 5 al 50) Ver ejercicio tabla 3 •Confeccionar un programa que permita ingresar un valor del 1 al 10 y nos muestre la tabla de multiplicar del mismo (los primeros 12 términos) Ejemplo: Si ingreso 3 deberá aparecer en pantalla los valores 3, 6, 9, hasta el 36 Ver ejercicio tabla de multiplicar •Realizar un programa que lea los lados de n triángulos, e informar: a) De cada uno de ellos, qué tipo de triángulo es: equilátero (tres lados iguales), isósceles (dos lados iguales), o escaleno (ningún lado igual) b) Cantidad de triángulos de cada tipo. Ver ejercicio tipo de triángulo 1. Escribir un programa que pida ingresar coordenadas (x,y) que representan puntos en el plano. Informar cuántos puntos se han ingresado en el primer, segundo, tercer y cuarto cuadrante. Al comenzar el programa se pide que se ingrese la cantidad de puntos a procesar. 2. Se realiza la carga de 10 valores enteros por teclado. Se desea conocer: a) La cantidad de valores ingresados negativos. b) La cantidad de valores ingresados positivos. c) La cantidad de múltiplos de 15. d) El valor acumulado de los números ingresados que son pares. 3. Se cuenta con la siguiente información: Las edades de 5 estudiantes del turno mañana. Las edades de 6 estudiantes del turno tarde. Las edades de 11 estudiantes del turno noche. Las edades de cada estudiante deben ingresarse por teclado. a) Obtener el promedio de las edades de cada turno (tres promedios) b) Imprimir dichos promedios (promedio de cada turno) c) Mostrar por pantalla un mensaje que indique cual de los tres turnos tiene un promedio de edades mayor. ejercicio1.py cant1=0 cant2=0 cant3=0 cant4=0 n=int(input("Cantidad de puntos:")) for f in range(n): x=int(input("Ingrese coordenada x:")) y=int(input("Ingrese coordenada y:")) if x>0 and y>0: cant1=cant1+1 else: if x<0 and y>0: cant2=cant2+1 else: if x<0 and y<0: cant3=cant3+1 else: if x>0 and y<0: cant4=cant4+1 print("Cantidad de puntos en el primer cuadrante:") print(cant1) print("Cantidad de puntos en el segundo cuadrante:") print(cant2) print("Cantidad de puntos en el tercer cuadrante:") print(cant3) print("Cantidad de puntos en el cuarto cuadrante:") print(cant4) ejercicio2.py negativos=0 positivos=0 mult15=0 sumapares=0 for f in range(10): valor=int(input("Ingrese valor:")) if valor<0: negativos=negativos+1 else: if valor>0: positivos=positivos+1 if valor%15==0: mult15=mult15+1 if valor%2==0: sumapares=sumapares+valor print("Cantidad de valores negativos:") print(negativos) print("Cantidad de valores positivos:") print(positivos) print("Cantidad de valores múltiplos de 15:") print(mult15) print("Suma de los valores pares:") print(sumapares) ejercicio3.py suma1=0 suma2=0 suma3=0 for f in range(5): edad=int(input("Ingrese edad:")) suma1=suma1+edad pro1=suma1/5 print("Promedio de edades del turno mañana:") print(pro1) for f in range(6): edad=int(input("Ingrese edad:")) suma2=suma2+edad pro2=suma2/6 print("Promedio de edades del turno tarde:") print(pro2) for f in range(11): edad=int(input("Ingrese edad:")) suma3=suma3+edad pro3=suma3/11 print("Promedio de edades del turno noche:") print(pro3) if pro1<pro2 and pro1<pro3: print("El turno mañana tiene un promedio menor de edades.") else: if pro2<pro3: print("El turno tarde tiene un promedio menor de edades.") else: print("El turno noche tiene un promedio menor de edades.") Problema 1: Mostrar la tabla de multiplicar del 5 empleando primero el while y seguidamente de nuevo empleando el for. Programa: multiplicar.py (Practicando comentarios de una línea y de muchas líneas) """ Mostrar la tabla de 5 con las estructuras repetitivas: while y for """ #utilizando el while print("Tabla del 5 empleando el while") x=5 while x<=50: print(x) x=x+5 #utilizando el for print("Tabla del 5 empleando el for") for x in range(5,51,5): print(x) Tercer encuentro ¿Dónde quedó el do-while? Una de las estructuras de control de ejecución que no está presente en el lenguaje de programación Python es el ciclo do-while. Diagrama de flujo respectivo: La diferencia central entre el ciclo while y ciclo do-while radica en el número mínimo de veces que se ejecuta el cuerpo respectivo. En el caso de la instrucción while, el cuerpo se ejecuta un mínimo de cero veces, mientras que la instrucción do-while el mínimo es una vez. A nivel sintáctico, la diferencia entre ambos ciclos se enfatiza por la posición en la que debe ir la expresión condicional: en la instrucción while va antes del cuerpo y en la instrucción do-while va después de éste Para ayudarles a entender la diferencia entre estos dos tipos de ciclos, tenemos el siguiente ejemplo: Hay un chico tímido que está con una chica que le gusta y desea darle de besos (todos los que se puedan). Existen dos alternativas: •Alternativa 1: El chico le pregunta a la chica si la puede besar. Si la chica dice que no, el chico no le queda mas que aguantarse. Pero si la chica dice que sí, el chico besa a la chica y luego le vuelve a preguntar si la puede besar otra vez, repitiendo este proceso hasta que la chica diga que no. •Alternativa 2: El chico besa a la chica. El chico le pregunta a la chica si la puede besar otra vez. Si la chica dice que sí, el chico besa nuevamente a la chica y luego le vuelve a preguntar si la puede besar una vez más, repitiendo este proceso hasta que la chica diga que no. En la alternativa 1, si la chica no quiere besos, entonces el chico nunca la podrá besar. Sin embargo en la alternativa 2, si la chica no quiere besos, el chico por lo menos le alcanza a robar uno. Por tanto la alternativa 1 es un ejemplo del ciclo while, mientras que la alternativa 2 es un ejemplo del ciclo do-while. sentencia switch-case En Python no existe la estructura de control switch porque sus desarrolladores no se pusieron de acuerdo y no llegaron a una solución satisfactoria para su implementación. Entre los motivos principales destaco, por un lado, la sintaxis, pues no les convencía ninguna propuesta, y por otro, la poca voluntad o disposición general para hacerlo. Switch con sentencias if elif Tal vez esta sea la solución preferida por muchos. Ten en cuenta que esta solución implica que todas las ramas son excluyentes entre sí, es decir, solo se puede ejecutar una. Veamos un ejemplo dia = 4 if dia == 1: print('lunes') elif dia == 2: print('martes') elif dia == 3: print('miércoles') elif dia == 4: print('jueves') elif dia == 5: print('viernes') elif dia == 6: print('sábado') elif dia == 7: print('domingo') else: print('error') Crear calculadora en Python print(" Calculadora que ejecuta las cuatro operaciones básicas") print(" Suma de dos valores") num1=int(input("Ingrese primer valor:")) num2=int(input("Ingrese segundo valor:")) suma=num1+num2 print("La suma de los dos valores es: ") print(suma) print(" Resta de dos valores") num1=int(input("Ingrese primer valor:")) num2=int(input("Ingrese segundo valor:")) resta=num1-num2 print("La resta de los dos valores es: ") print(resta) print(" Multiplicación de dos valores") num1=int(input("Ingrese primer valor:")) num2=int(input("Ingrese segundo valor:")) mult=num1*num2 print("La multiplicación de los dos valores es: ") print(mult) print(" División de dos valores") num1=int(input("Ingrese primer valor:")) num2=int(input("Ingrese segundo valor:")) div=num1/num2 print("La división de los dos valores es: ") print(div) •Ver ejercicio calculadora (con menú) Igual resultado obtenemos si utilizamos la comilla simple: #definición e inicio de una cadena de caracteres dia='lunes' Para la carga por teclado de una cadena de caracteres utilizamos la función input que retorna una cadena de caracteres: nombre=input("ingrese su nombre:") Problema 1: Realizar la carga por teclado del nombre, edad y altura de dos personas. Mostrar por pantalla el nombre de la persona con mayor altura. Programa: datos.py print("Datos de la primer persona") nombre1=input("Ingrese nombre:") Es importante notar que cuando cargamos un entero el dato edad1=int(input("Ingrese la edad:")) devuelto por la función input se lo pasamos a la función int que altura1=float(input("Ingrese la altura Ej 1.75:")) tiene por objetivo convertirlo a entero: print("Datos de la segunda persona") edad1=int(input("Ingrese la edad:")) nombre2=input("Ingrese nombre:") Cuando cargamos un valor con decimal el dato devuelto por la edad2=int(input("Ingrese la edad:")) función input se lo pasamos a la función float que tiene por altura2=float(input("Ingrese la altura Ej 1.75:")) objetivo convertirlo a float: print("La persona mas alta es:") altura1=float(input("Ingrese la altura Ej 1.75:")) if altura1>altura2: Finalmente cuando cargamos una cadena de caracteres como print(nombre1) es en este caso el nombre de una persona la función input else: retorna directamente una cadena de caracteres. print(nombre2) nombre1=input("Ingrese nombre:") Funciones en python Una función es un conjunto de líneas de código que realizan una tarea específica y pueden tomar Argumentos para diferentes Parámetros que modifiquen su funcionamiento y los datos de salida. Una función nos permite implementar operaciones que son frecuentemente utilizadas en un programa y así reducir la cantidad de código. Toda función recibe parámetros ya sea que se los indiquemos nosotros o por defecto, a la hora de llamar a esa función se le brindan los argumentos que son los datos que la función utilizará como valor del parámetro. Podemos hacer referencia a una calculadora, tu puedes ingresar dos números (Parámetros) por ej: 10 y 30 (Argumentos). ¿Pero qué operación quieres realizar con estos números? ¿Sumarlos, restarlos, dividirlos o multiplicarlos?, en este caso según la operación que elijas obtendrás diferentes resultados. Podemos ver a los números (10 y 30) como Argumentos para los Parámetros de la función, estos serán los “datos de entrada“, a la operación SUMA como una “función” y al resultado como un “dato de salida“. Parámetros –> Operación –> Datos de Salida Argumentos(Datos de entrada) – > Función –> Resultado 10, 30 Suma 40 10, 30 Resta -20 10, 30 Multiplicación 300 10, 30 División 0,333.. Declaración de una función Por ejemplo vamos a declarar la función suma: def Suma(parametro1, parametro2): Resultado = parametro1 + parametro2 Llamada de una función en python Suma(argumento1, argumento2) #En este caso podria ser: Suma(10, 30) Pero si ahora yo quisiera sumar 2 y 5 lo único que tengo que hacer es cambiar los “Argumentos” y cambiarían los resultados. No es necesario cambiar nada en la función!. Por eso las funciones en python nos ahorran escribir mucho código, solo necesitamos definir una función y enviando diferentes argumentos a sus parámetros obtendremos diferentes resultados. Tipos de funciones en python Hay dos tipos de funciones, las que podemos crear nosotros y aquellas que ya vienen predefinidas por el lenguaje. Hay muchas funciones que podemos “Llamar” y utilizarlas sin nosotros declararlas (crearlas). Primeramente nos vamos a enfocar en las predefinidas por el lenguaje que son funciones que ya vienen declaradas para facilitarnos las cosas y poder empezar a programar rápidamente. Luego aprenderemos a crear las nuestras propias. Sintaxis de la Función Print Una de las primeras funciones que debemos aprender es la función Print, que significa “Imprimir” en inglés. Esta función lo que hace sencillamente es imprimir en pantalla lo que nosotros le indiquemos como Argumento!! Ejecutando este código estamos invocando la función predefinida Print y nos debería mostrar en pantalla “Hola esto es una cadena de texto”. Puesto que la función toma como argumento para parámetro el texto que está entre comillas. Evitar los errores de sintaxis •El texto siempre, siempre! debe estar entre comillas porque sino se interpretara a las palabras como algún objeto que por supuesto no existe!! y nos dará un Error de sintaxis! •Siempre respeta la Sintaxis de la llamada de las funciones en python colocando luego de ella los paréntesis, aunque no le indiques ningún Argumento debe llevar los paréntesis que serán los que indiquen que es una función!. Por ejemplo: print() , esto no imprimirá nada, pero no nos dará ningún error. Invocar una función Función(Argumentos) Función seguida de paréntesis y dentro de los paréntesis van los Argumentos para los parámetros! Sintaxis •Recuerda que el texto siempre se encuentra entre comillas simples, dobles o triples! •Las comillas deben ir dentro del paréntesis porque son el parámetro de la función print – ¿Pero cuando sabemos que comillas utilizar? ¿y si quiero incluir comillas en mi texto? Podremos anidar comillas dentro de otras! Supongamos que yo quiero imprimir el texto : Hola “carambolas” para esto debes emplear comillas simples, ejemplo: print ('Hola "carambolas"') Funciones predefinidas en Python Funciones numéricas en python Funciones de cadenas en python Función Utilidad Ejemplo Resultado print() Imprime en pantalla el argumento. print (“Hola”) “Hola” len() Determina la longitud en caracteres de una cadena. len(“Hola Python”) 11 join() Convierte en cadena utilizando una separación Lista = [‘Python’, ‘es’] ‘-‘.join(Lista) split() Convierte una cadena con un separador en una lista a = (“hola esto sera una lista”) Lista2 = a.split() print (Lista2) Reemplaza una cadena por otra texto = “Manuel es mi amigo” print (texto.replace (‘es’, ‘era’)) replace() Función Utilidad Ejemplo Resultado range() Crea un rango de números x = range (5) print (list(x)) [0, 1, 2, 3, 4] str() Convierte un valor numérico a texto str(22) ’22’ ‘Python-es’ int() Convierte a valor entero int(’22’) 22 [‘hola’, ‘esto’, ‘sera’, ‘una’, ‘lista’] float() Convierte un valor a decimal float(‘2.22’) 2.22 max() Determina el máximo entre un grupo de números x = [0, 1, 2] print (max(x)) 2 min() Determina el mínimo entre un grupo de números x = [0, 1, 2] print (min(x)) 0 sum() Suma el total de una lista de números x = [0, 1, 2] print (sum(x)) 3 Manuel era mi amigo upper() Convierte una cadena en Mayúsculas texto = “Manuel es mi amigo” texto.upper() ‘MANUEL ES MI AMIGO’ lower() Convierte una cadena en Minúsculas texto = “MaNueL eS mI AmIgO” texto.lower() ‘manuel es mi amigo’ Otras funciones útiles en python Función Utilidad Ejemplo Resultado list() Crea una lista a partir de un elemento x = range (5) print (list(x)) [0, 1, 2, 3, 4] tuple() Crea o convierte en una tupla print(tuple(x)) (0, 1, 2, 3, 4) open() Abre, crea, edita un elemento (archivo) with open(“Ejercicios/Ejercicio.py”, “w”) as variables: variables.writelines(“Eje”) Crea el archivo “Ejercicio.py” con el contenido “Eje” ord() Devuelve el valor ASCII de una cadena o carácter. print(ord(‘A’)) 65 round() Redondea después de la coma de un decimal print (round(12.723)) 13 type() Devuelve el tipo de un elemento type(x) <class ‘range’> input() Permite la entrada de datos al usuario en Python 3 y = int(input(“Ingrese el número”)) print (y) 3 3 Estas son solo algunas funciones predefinidas de Python que yo considero por ahora las más importantes, pero probablemente encuentres algunas más. Puedes ver en la tabla los ejemplos de su utilidad y los beneficios que presentan a la hora de ahorrarnos código. Como crear tus propias funciones En python para crear una función recurrimos a la instrucción def y seguido el nombre que le queramos dar a la función siempre y cuando lo hagamos utilizando la sintaxis correcta al igual que cuando creamos una variable! y continuamos con paréntesis y finalizamos con dos puntos de la siguiente manera: De esta manera creamos la función “sumar” y debajo de esta colocamos def sumar(a, b): identado el código con el que opera la misma. x=a+b print (("Resultado"), (x)) Llamar nuestras funciones Ahora si llamamos la función lo hacemos de la siguiente manera: sumar(2, 3) Sintaxis de una función Donde “2” y “3” son los argumentos para los parámetros “a” y “b” que establecimos al crear nuestra función. Esta función debe ser declarada al inicio de nuestro código fuente, es decir, debemos llamarla debajo de donde la creamos. Nunca podemos llamar una función que no fue creada anteriormente. Funciones en python: ejemplo de la calculadora Como hemos dicho anteriormente las funciones nos servirán para reutilizar código de esta manera creamos una función y podemos utilizarla cada vez que la necesitemos cambiando los argumentos para obtener un resultado diferente. O bien utilizamos las funciones internas si estas aplican a lo que queremos realizar. Creamos cuatro funciones correspondientes al cálculo que habrá disponible (pero aun no las llamamos). Habiendo creado las funciones pasamos a la parte dos. Creamos un bucle (que se repite para no dejar continuar al usuario hasta que ingrese los números con lo que va a trabajar nuestra calculadora, los cuales se almacenan en variables). El try/except se utiliza para que si surgiera un error no finalizara el programa y nos mostrara un “Error” personalizado (Todo esto lo veremos más adelante pero al menos ya puedes comprender el funcionamiento del código en su totalidad). Una vez que presentamos las entradas también le presentamos al usuario la elección de 4 opciones correspondientes al cálculo a realizar el cual se almacena en la variable op. Determinamos el número almacenado en la variable op mediante un If/elif y según sea el número ejecutamos la llamada a la función correspondiente al cálculo que quiere realizar. Espero que hayas comprendido el funcionamiento de este código, que es muy sencillo a decir verdad.. Si aún no logras comprender el funcionamiento no te frustres, que luego los veremos nuevamente aplicando funciones más detenidamente.