Está en la página 1de 55

Algorítmica Básica en Python

Directo al Código

AITEC
Asociación de Investigadores en Tecnología del Cusco

Condori Alagón, Héctor Vera Olivera, Harley


Magister en Bioinformática Magister en Informática
Cárdenas Maita, Ana Rocío
Magister en Sistemas de Información
Chullo Lave, Boris
Magister en Ciencia de la Computación
Soncco Álvarez, José Luis
Doctor en Informática

16 de abril de 2018

1
Prefacio

Este libro es el producto de nuestra experiencia como programadores, in-


vestigadores y principalmente profesores.
El libro esta dirigido a cualquier persona que quiera aprender a programar,
especialmente a personas de áreas como ciencia de la computación, ingeniería
informática, ingeniería de sistemas, ingeniería de software y afines.
El libro abarca los temas que se ven en un primer curso de programación
o de algorítmica, y siendo el publico objetivo bastante amplio, diseñamos un
enfoque simplificado para poder crear programas usando el lenguaje de progra-
mación Python. El libro cuenta con bastantes ejercicios resueltos y propuestos
para que el alumno pueda desarrollar sus habilidades en la resolución de pro-
blemas algorítmicos.

Los Autores.

i
Índice general

Prefacio i

Índice general ii

1 Conceptos básicos 1
1.1. La computadora . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. Lenguajes de Programación . . . . . . . . . . . . . . . . . . . . 1
1.4. Instalación de Python . . . . . . . . . . . . . . . . . . . . . . . 2
1.5. Ejecutando un Programa Simple en Python . . . . . . . . . . . 2

2 Programas en Python 3
2.1. ¿Qué es un Programa? . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Variables y la Sentencia de Asignación . . . . . . . . . . . . . . 3
2.3. Tipos de Datos Básicos . . . . . . . . . . . . . . . . . . . . . . 4
2.4. Expresiones y Operaciones . . . . . . . . . . . . . . . . . . . . . 5
2.5. Sentencias Básicas . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.6. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Metodología de Programación 11
3.1. Una Metodología para Python . . . . . . . . . . . . . . . . . . 11
3.2. Estructura Secuencial . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Ejercicios Resueltos . . . . . . . . . . . . . . . . . . . . . . . . . 15

4 Estructuras selectivas 19
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3. Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . 28

5 Estructuras Iterativas 31
5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2. Ejercicios Resueltos . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . 43

6 Modularidad: Funciones 45

ii
ÍNDICE GENERAL iii

6.1. Declarando una función . . . . . . . . . . . . . . . . . . . . . . 45

7 Notas 47

Bibliografía 49
1

Conceptos básicos

1.1. La computadora
Probablemente, la computadora, en especial el procesador, sea el artefacto
más sofisticado creado por el ser humano en toda su historia. Pero concep-
tualmente, no es más que una calculadora con esteroides. Sólo sabe efectuar
tareas simples como operaciones aritméticas y lógicas, y mover datos de un
lugar a otro. La gran ventaja de la computadora, a diferencia de una simple
calculadora, es que también pueden almacenar y ejecutar programas, es decir,
una secuencia precisa y ordenada de operaciones. Estas operaciones simples,
dispuestas de la forma correcta, una después de otra, dan lugar al sofisticado
mundo digital actual.

Organización básica
1.2. Algoritmo
Un algoritmo no es más que una secuencia de pasos bien definida para resol-
ver un problema. En este entender, incluso una receta de cocina, que detalla los
pasos para convertir un conjunto de ingredientes en una torta es un algoritmo.
Cuando decimos que un algoritmo es una secuencia de pasos bien definida, nos
referimos a que ambigüedades tales como “unas cuantas veces” o “más o menos”
no son tolerables....

1.3. Lenguajes de Programación


Hay muchas formas de interactuar con una computadora. Un usuario pro-
medio lo hace usualmente a través de programas prefabricados, o enlatados,
como procesadores de texto u hojas de cálculo. No hay nada de malo con eso,
siempre y cuando cubra nuestras necesidades. Pero puede que lleguemos a un
punto en el que estos programas no sean lo suficientemente flexibles como para
resolver los problemas que tengamos en ese momento. Necesitamos de un medio
más directo para comunicarnos con nuestra computadora.
A la fecha, la forma más directa de decirle a la máquina lo que debe hacer
es a través de un lenguaje de programación. Un lenguaje de programación(y

1
2 CAPÍTULO 1. CONCEPTOS BÁSICOS

digo “un” ya que hay cientos) es un lenguaje, como lo es el castellano o el


inglés, pero con una gramática mucho más estricta, evitando las ambigüedades
de los lenguajes naturales. Además, son mucho más sencillos, para facilitar su
procesamiento automático.
En este texto, utilizaremos el lenguaje Python.

1 i = i + 1 ;
2 w = w +5;
3 j = j + 1 ; //ojo
4 k = k + 1 ;

Algoritmo 1.1: Un listado de código

Ojo con la línea 3 del listado 1.1.

1.4. Instalación de Python


Python es muy fácil de instalar. Puedes descargar el instalador oficial desde
el sitio web del proyecto, python.org. También hay distribuciones Python, que
además del mismo Python y sus bibliotecas standard, también traen muchos
de los paquetes más populares para Python, como Pandas y NumPy. Tal es el
caso de Anaconda(anaconda.org).
En caso de que utilices una distribución GNU/Linux, como Ubuntu y De-
bian, es mucho más sencillo, ya que Python casi siempre viene preinstalado. Si
no lo está, se puede instalar desde el gestor de paquetes de la distribución.

Editores de texto
En instalador de Python trae un editor propio, IDLE. Anaconda también
trae varios editores. Puedes usar estos, u otro de tu elección. Ten en cuenta que
para escribir código fuente, debes usar un editor de texto, y no un procesador
de texto, como Microsoft Word o LibreOffice Writer, ya que éstos, además del
texto, también guardan el formato, generando archivos incomprensibles para
Python.

1.5. Ejecutando un Programa Simple en Python


2
Programas en Python

2.1. ¿Qué es un Programa?


Un programa es un conjunto de instrucciones que realizan una determinada
tarea. Normalmente los programas describen algoritmos los cuales son escritos
en un lenguaje de programación, es nuestro caso Python.

2.2. Variables y la Sentencia de Asignación


Tradicionalmente una variable es vista como una posición de memoria en la
cual podemos guardar algún contenido. Por ejemplo una variable cuyo nombre
(o identificador) es la palabra jugador podría ser vista de la siguiente forma:

jugador Ronaldo

Notar que la variable jugador guarda la palabra “Ronaldo” en una determi-


nada posición de la memoria principal. ¿Qué pasaría si le asignamos un nuevo
valor a esta variable? Digamos que el nuevo valor va a ser “Paolo”, entonces el
antiguo valor es borrado y el nuevo valor es escrito sobre la variable jugador,
la cual quedaría de la siguiente forma:

jugador Paolo

Las variables en Python funcionan un poco diferente del modelo tradicional


en la cual una variable es vista como una caja donde podemos poner un deter-
minado valor [1]. En Python las variables asocian un objeto de la memoria con
un nombre [2], por ejemplo analicemos la siguiente instrucción en Python:

radio = 10

Después que se ejecuta la instrucción anterior en Python, se crea un objeto


en la memoria conteniendo el entero 10. Luego, la sentencia de asignación =
asocia este objeto a el nombre de variable (o simplemente la variable) radio
(Ver Figura 2.1).

3
4 CAPÍTULO 2. PROGRAMAS EN PYTHON

radio −−−−−→ 10
Figura 2.1: Asociando un objeto a el nombre radio

Veamos que pasa si ejecutamos la siguiente instrucción:

radio = 30.5

Después que se ejecuta la instrucción anterior, se crea un nuevo objeto en


la memoria conteniendo el número real 30.5. Luego, la sentencia de asignación
= asocia este objeto a el nombre de variable radio (Ver Figura 2.2).

10

radio −−−−−→ 30.5


Figura 2.2: Asociando un nuevo objeto a el nombre radio

Nota:
Las variables en Python tienen el mismo sentido que en las matemáticas,
es decir es algo cuyo contenido puede variar. En el resto del libro cuando
se diga o se de a entender que una variable guarda un valor, en realidad
no estamos refiriendo a que el nombre de esta variable está asociado a
un objeto en la memoria.

2.3. Tipos de Datos Básicos


En Python existen diferentes tipos de datos de variables como números
enteros, números reales (o de punto flotante), cadenas de texto y valores lógicos
(o booleanos). Veamos algunos ejemplos:

entero = 25
real = 3.1416
texto1 = "Juan Perez"
texto2 = "C"
logico1 = True
logico2 = False

Como se puede ver en el anterior ejemplo, la variable entero guarda un


valor de tipo entero, la variable real guarda un valor de tipo real, la variable
texto1 guarda una cadena de texto de tamaño 10, la variable texto2 guarda
una cadena de texto de tamaño 1, la variable logico1 guarda un valor lógico
verdadero (True) y la variable logico2 guarda un valor lógico falso (False).
A diferencia de otros lenguajes de programación en Python no es necesario
declarar el tipo de dato de una variable, ya que el tipo se infiere del valor
guardado.
2.4. EXPRESIONES Y OPERACIONES 5

2.4. Expresiones y Operaciones


Un fragmento de código que produce un nuevo valor es considerado una
expresión, así tenemos que las expresiones mas simples son los literales (valores
específicos como 3.1416) y las variables, en cuyo caso producen o representan
el mismo el mismo valor [1]. Por ejemplo el literal 3.1416 representa el número
3.1416 y la variable x que guarda el valor 10 produce el valor 10.
Ademas se pueden construir expresiones mas complejas por medio de opera-
dores juntando de esta manera literales numéricos (o constantes) con variables.
Los operadores aritméticos disponibles en Python son la suma (+), la resta
(-), la multiplicación (*), la potenciación (**), la división real (/), la división
entera (//) y la operación de modulo ( %). A continuación veremos algunos
ejemplos de estas operaciones:

1 a = 3.1416 * radio + 2
2 a = 3.1416 * (radio + 2)
3 x = 10 ** 3
4 y = 10 / 3
5 z = 10 // 3
6 m = 10 % 3

En en la linea 1 del anterior ejemplo si asumimos que el valor de radio es


10, entonces el valor después de la evaluación de la expresión 3.1416 * radio
+ 2 será 33.416. En Python la precedencia de operadores es la misma que en
expresiones algebraicas. Si queremos cambiar la precedencia de los operadores
podemos usar los paréntesis como en la linea 2.
Un resultado interesante del anterior ejemplo es la división real entre 10
y 3 (ver linea 4), que es 3.33. El resultado de la expresión de la linea 5 seria
simplemente 3 que representa la división entera entre 10 y 3. Finalmente, el
resultado de la expresión de la linea 6 es 1 que representa el resto de dividir 10
entre 3.
Ademas de los operadores aritméticos existen otros operadores como los
de comparación (o relación) y operadores lógicos los cuales serán vistos en los
subsecuentes capítulos.
Nota:
Vea que en Python, antes de ejecutar la sentencia de asignación =,
primero se evalúa la expresión que está a su derecha, luego este resultado
es guardado en la variable que esta a la izquierda.

2.5. Sentencias Básicas


Hasta este punto hemos visto como trabajar con constantes, variables y en
general hacer cálculos con expresiones. Pero en ningún momento hemos visto
como interactuar con el usuario, es decir, no aprendimos como mostrar los
resultados en la pantalla, y tampoco como hacer que un usuario ingrese datos.
Para solucionar este problema, es que existen las sentencias de salida y entrada
que serán explicadas a continuación.
6 CAPÍTULO 2. PROGRAMAS EN PYTHON

Sentencia de Salida
En Python la sentencia de salida o para imprimir en la pantalla es print y
su sintaxis es la siguiente:

print(expresion o variable o literal)

Veamos nuestro primer ejemplo de como usar la sentencia print:

1 #Imprimir un mensaje en la pantalla


2 print("Bienvenidos a Python!")

Pantalla:
Bienvenidos a Python!

Algoritmo 2.1: Imprimir un mensaje en la pantalla.

En la linea 2 del Algoritmo 2.1 podemos ver que la sentencia print muestra
en la pantalla la cadena de texto que está entre paréntesis. Ademas, vemos que
en la linea 1 aparece un mensaje después del símbolo #, vea que este mensaje
no es mostrado en la pantalla, esto es porque el interprete de Python descarta
cualquier símbolo que viene después de #. El símbolo # nos sirve para hacer
comentarios en nuestros algoritmos y de esta forma dejar claro la tarea están
realizando.
¿Y que tal si ahora queremos imprimir más lineas? pues simplemente usa-
mos varias veces la sentencia print, veamos el Algoritmo 2.2.

1 #Imprimir mensaje en varias lineas


2 print("Bienvenidos")
3 print("a")
4 print("Python!")

Pantalla:
Bienvenidos
a
Python!

Algoritmo 2.2: Imprimir un mensaje en varias lineas.

En caso de que queramos imprimir varias lineas con una sola sentencia
print tenemos que usar los caracteres especiales \n los cuales representan el
carácter de nueva linea (ver Algoritmo 2.3).
2.5. SENTENCIAS BÁSICAS 7

1 #Imprimir mensaje en varias lineas con un solo print


2 print("Bienvenidos\na\nPython!")

Pantalla:
Bienvenidos
a
Python!

Algoritmo 2.3: Imprimir un mensaje en varias lineas con un solo print.

Ademas como ya se menciono podemos usar la sentencia print para mostrar


los valores de una variable o para imprimir el valor de una expresión, veamos
el Algoritmo 2.4.

1 #Imprimir el valor de una variable y una expresión


2 x = 35
3 print("El valor de la variable x es: ", x)
4 print("El valor de la expresión 2x + 10 es: ", 2*x + 10)

Pantalla:
El valor de la variable x es: 35
El valor de la expresión 2x + 10 es: 80

Algoritmo 2.4: Imprimir el valor de una variable y una expresión.

Sentencia de Entrada
En Python la sentencia para que el usuario pueda ingresar datos al compu-
tador es input y su sintaxis es la siguiente:

variable = input("mensaje")

La sentencia input funciona de la siguiente manera: primero muestra un


mensaje en la pantalla y después retorna un valor que previamente fue ingresado
por el usuario. Veamos un primer ejemplo de como usar esta instrucción:
8 CAPÍTULO 2. PROGRAMAS EN PYTHON

1 #Leer un valor ingresado por el usuario


2 x = input("Ingresa un número: ")
3 print("El número ingresado por el usuario es: ", x)

Pantalla:
Ingresa un número: 12
El número ingresado por el usuario es: 12

Algoritmo 2.5: Leer un valor ingresado por el usuario.

Al ejecutar la linea 2 del Algoritmo 2.5, la sentencia input primero muestra


el mensaje entre paréntesis, luego retorna el valor que previamente fue ingresado
por el usuario (en este caso 12). Este valor es guardado en la variable x mediante
la sentencia de asignación =.
Ahora que ya aprendimos a leer datos ingresados por el usuario, ¿Que tal
usar estos datos para hacer algunos cálculos? Veamos el siguiente ejemplo:

1 #Leer un valor ingresado por el usuario y


2 #hacer un calculo simple
3 x = input("Ingresa un número: ")
4 y = x + 20
5 print("El valor de la variable y es: ", y)

Pantalla:
Ingresa un número: 10
Traceback (most recent call last):
File "main.py", line 2, in <module>
y = x + 20
TypeError: must be str, not int

Algoritmo 2.6: Leer un valor ingresado por el usuario y hacer un calculo simple.

Al ejecutar linea 3 del Algoritmo 2.6 vemos que el usuario ingresa el valor
de 10 el cual es guardado en la variable x, luego al ejecutar la linea 4 vemos que
en la pantalla aparece un error, pero ¿por que?. Básicamente cuando el usuario
ingresa un valor mediante la instrucción input, esta instrucción retorna una
cadena de texto, es así que la variable x guarda una cadena de texto. En la
linea 4 la expresión x + 20 intenta sumar una cadena de texto con un numero
y es por eso que en la pantalla aparece un error.
Para solucionar este error haremos uso de la función int. Las funciones
en Python trabajan de forma similar a las funciones en matemáticas, es decir
toman como entrada un valor y retornan otro. Veamos un ejemplo de como
usar la función int:
2.6. EJERCICIOS PROPUESTOS 9

1 #Leer un valor ingresado por el usuario y


2 #hacer un calculo simple
3 x = input("Ingresa un número: ")
4 x = int(x)
5 y = x + 20
6 print("El valor de la variable y es: ", y)

Pantalla:
Ingresa un número: 10
El valor de la variable y es: 30

Algoritmo 2.7: Leer un valor ingresado por el usuario y hacer un calculo simple.

En la linea 4 del Algoritmo 2.7 la función int toma como entrada la cadena
de texto guardada en la variable x y luego retorna un número entero, el cual
es guardado nuevamente en la variable x.
Nota:
Ademas de int en Python existen otras funciones importantes como la
función float que transforma una cadena de texto en un número real,
también existe la función str que transforma un número en una cadena
de texto.

2.6. Ejercicios Propuestos


1. Escribir un algoritmo que lea dos números reales e imprima sus valores.
2. Escribir un algoritmo que lea los datos de una persona (nombre completo,
edad y dirección) y después los muestre en la pantalla.
3. Escriba un algoritmo que lea dos números enteros e imprima su suma,
diferencia, multiplicación y división.
4. Escriba un algoritmo que imprima la siguiente figura:

* *
* *
* * * * * * * * * * * * * *
* *
* *

5. Recuerde que podemos usar Python como una calculadora. Escriba un


algoritmo que imprima el resultado de la siguiente expresión: 75 − 8 × 4 +
5/2.
3

Metodología de Programación

3.1. Una Metodología para Python


En este libro, la metodología para construir algoritmos fue simplificada y
adaptada para resolver problemas usando el lenguaje de programación Python.
Una metodología más tradicional y completa se puede encontrar en [1]. A
continuación mostramos la metodología que será usada:

1. Analizar el problema. En esta etapa se debe entender exactamente


cual es el problema a ser resuelto, osea dejar por escrito en palabras
entendibles e intuitivas al lector el problema que se tiene que resolver,
en lo posible no utilizar los mismos términos técnicos que se usan en el
enunciado del problema.

2. Especificar la solución.

a) En esta etapa se debe analizar el problema identificando primeramente


cuales son las entradas y salidas del algoritmo. Se recomienda colocar
un ejemplo para entender mejor las entradas y salidas del algoritmo.
b) Seguidamente se debe intentar proponer un modelo que nos permita
solucionar el problema. En muchos casos la relación entre la entrada
y la salida nos da una pista sobre el posible modelo. Se recomienda
colocar un ejemplo para entender mejor el modelo.

3. Diseñar e implementar la solución en Python. En esta etapa se di-


seña e implementa el algoritmo directamente en Python. Dicho algoritmo
deberá estar basado en el modelo encontrado en la etapa 2.

Nota:
Algunas veces es más fácil describir el modelo usando las sentencias
de Python, para estos casos se puede obviar el paso 2 b), e ir directa-
mente a la etapa 3. Sin embargo, en la mayoría de casos se recomienda
fuertemente seguir la metodología propuesta en este libro.

11
12 CAPÍTULO 3. METODOLOGÍA DE PROGRAMACIÓN

3.2. Estructura Secuencial


Como se explicó en el Capítulo 1, una secuencia de pasos bien definidos nos
da la definición de algoritmo, en este capítulo veremos como esta secuencia de
pasos puede usarse para resolver ciertos problemas básicos, a esta secuencia de
pasos de manera inicial llamaremos estructura secuencial. Para resolver lo
problemas aplicaremos la metodología propuesta en este libro, ademas en este
capitulo usaremos las sentencias básicas de Python que ya aprendimos en el
anterior capítulo.
A continuación veremos unos ejemplos de como aplicar la metodología pro-
puesta para resolver problemas:
Ejemplo 3.1:

Escribir un algoritmo que calcule la suma de dos números.

1. Analizar el problema: Dado dos números debemos calcular la suma de


dichos números.
2. Especificar la solución:
a) Entrada: Dos números cualesquiera numero1 y numero2.
Salida: La suma de los números ingresados.
Ejemplo:

Entrada Salida
numero1 numero2 suma
5 7 12

b) La relación entre la entrada y la salida está dado por la siguiente


formula: suma = numero1 + numero2. Por ejemplo si los números
son 23 y 11 el calculo de la suma de los dos números será suma =
23 + 11 = 44.
3. Diseñar e implementar la solución en Python:

1 #ALGORITMO: Imprime la suma de dos números


2 #Leer numero 1
3 numero1 = input("Ingrese número 1: ")
4 numero1 = float(numero1)
5 #Leer numero 2
6 numero2 = input("Ingrese número 2: ")
7 numero2 = float(numero2)
8 #Calculamos la suma de numero 1 y numero 2
9 suma = numero1 + numero2
10 #Mostrar el resultado
11 print("La suma es: ", suma)

Algoritmo 3.1: Imprimir la suma de dos números.


3.2. ESTRUCTURA SECUENCIAL 13

Nota:
Una recomendación importante es que, todos los programas escritos
en el lenguaje de programación Python empiecen con un encabezado
indicando la tarea que van a realizar. Por ejemplo:

1 #ALGORITMO: Imprime la suma de dos números

La linea 1 del Algoritmo 3.1 describe con un comentario la tarea va a rea-


lizar. Las instrucciones de las lineas 3-4 nos permiten leer el primer número.
Las instrucciones de las lineas 6-7 nos permiten leer el segundo número. Luego,
en la linea 9 se realiza la suma de los dos números previamente ingresados.
Finalmente, la instrucción de la linea 11 nos permitirá imprimir el resultado de
la suma. La Figura 3.1 muestra el resultado en la pantalla después de ejecutar
el Algoritmo 3.1.

Ingrese número 1: 23
Ingrese número 2: 15
La suma es: 48.0

Figura 3.1: Resultado de ejecutar el Algoritmo 3.1.

Nota:
Otra recomendación importante es que los pasos de nuestros algoritmos
sean documentados con comentarios. Por ejemplo en el Algoritmo 3.1,
las lineas 2, 5, 8 y 10 documentan los pasos de la solución.

Ejemplo 3.2:

Escribir un algoritmo que calcule el área de un círculo.

1. Analizar el problema: Dado el radio de un circulo tenemos que calcular


el área de un circulo.
2. Especificar la solución:
a) Entrada: Radio del circulo (R)
Salida: Área del circulo (A)
Ejemplo:

Entrada Salida
Radio Área
5 A = 3.1416 × 52 = 78.54

b) La relación entre la entrada y la salida está dado por la siguiente


formula: A = π × R2 . Por ejemplo si el radio tiene un valor de 10 el
área del circulo será A = π × 102 = 314.16
14 CAPÍTULO 3. METODOLOGÍA DE PROGRAMACIÓN

3. Diseñar e implementar la solución en Python:

1 #ALGORITMO: Calcular el área de un círculo


2 #Leer Radio
3 radio = input("Leer Radio: ")
4 radio = float(radio)
5 #Calcular el área
6 area = 3.1416 * radio * radio
7 #Mostrar el resultado
8 print("El área del circulo es: ", area)

Algoritmo 3.2: Calcular el área de un circulo.

Operadores MOD y DIV


En la división entera existen dos tipos de operadores que serán mucha uti-
lidad al momento de resolver problemas. En el capitulo anterior vimos los ope-
radores % y // que se corresponden con los operadores MOD y DIV. Es decir
MOD representa el residuo de una división entera y DIV representa el cociente
de dicha división. A continuación mostramos un ejemplo donde hacemos uso
de estos operadores.
Ejemplo 3.3:

Escribir un algoritmo que calcule la suma de los dígitos de un número


de 3 cifras.

1. Analizar el problema: Dado un número de la forma abc, nos piden


calcular la suma de los dígitos del número.

2. Especificar la solución:

a) Entrada: Un numero de la forma abc.


Salida: La suma de a, b y c.
Ejemplo:

Entrada Salida
Número Suma
456 4 + 5 + 6 = 15

b) Lo primero que tenemos que hacer antes de sumar los dígitos de un


número (digamos 456) es separarlo en unidades, decenas y centenas
para lo cual podemos realizar las siguientes operaciones:

unidad = 456 MOD 10 = 6


decena = (456 DIV 10) MOD 10 = 45 MOD 10 = 5
centena = 456 DIV 100 = 4
3.3. EJERCICIOS RESUELTOS 15

Luego simplemente tenemos que sumar unidad+decena+centena =


6+5+4 = 15. Entonces, para un número abc tendríamos el siguiente
modelo:

unidad = abc MOD 10


decena = (abc DIV 10) MOD 10
centena = abc DIV 100
Y la suma podría ser calculada sumando unidad+decena+centena.

3. Diseñar e implementar la solución en Python:

1 #ALGORITMO: Dado un numero de 3 cifras calcular


2 #la suma de sus dígitos.
3 #Leer número
4 numero = input("Leer número: ")
5 numero = int(número)
6 #Descomponemos el número en unidades, decenas y centenas
7 #luego realizamos la suma
8 unidad = numero % 10 # numero mod 10
9 decena = (numero // 10) % 10 # (numero div 10) mod 10
10 centena = numero // 100 # numero div 100
11 sumaDigitos = unidad + decena + centena
12 #Mostrar el resultado
13 print("La suma de las cifras del número es: ", sumaDigitos)

3.3. Ejercicios Resueltos

Ejemplo 3.4:

Escribir un algoritmo que dado un numero de 4 dígitos calcule cuantos


dígitos son pares y cuantos son impares.

1. Analizar el problema: Dado un número de la forma abcd, nos piden


calcular cuantos dígitos son pares y cuantos dígitos son impares.

2. Especificar la solución:

a) Entrada: Un numero de la forma abcd.


Salida: Verificar y determinar si los dígitos a, b, c y d son pares o
impares.
Ejemplo:

Entrada Salida
Número pares impares
4564 3 1
16 CAPÍTULO 3. METODOLOGÍA DE PROGRAMACIÓN

b) Lo primero que tenemos que hacer antes de identificar que digitos


son pares y que digitos son impares es separarlos en unidades, de-
cenas, centenas y unidades de millar, para lo cual podemos realizar
las siguientes operaciones:

unidad = 4564 M OD 10 = 4
decena = (4564 DIV 10) M OD 10 = 456 M OD 10 = 6
centena = (4564 DIV 100) M OD 10 = 45 M OD 10 = 5
unM illar = 4564 DIV 1000 = 4

Una vez separado los dígitos del número tenemos que analizar se-
paradamente estos. Sabemos que el módulo MOD de un número
cualesquiera con 2, puede ser 0 o 1, de ser 1, podemos rápidamen-
te saber que ese número es impar. En otras palabras, para saber
cuantos números impares tenemos en el numero 4564 realizamos lo
siguiente:

cantidadImpares = 4 M OD 2+5 M OD 2+6 M OD 2+4 M OD 2 = 1

En este paso, solo el módulo que nos dá como resultado 1 nos da la


información de que el número es impar. Para saber cuantos número
pares existen simplemente realizamos la diferencia entre la cantidad
de digitos (en este caso 4) y la cantidad de digitos impares encon-
trados hasta el momento.

cantidadP ares = 4 − cantidadImpares = 4 − 1 = 3

Entonces, para un número abcd tendríamos el siguiente modelo:

unidad = abcd M OD 10 = d
decena = (abcd DIV 10) M OD 10 = abc M OD 10 = c
centena = (abcd DIV 100) M OD 10 = ab M OD 10 = b
unM illar = abcd DIV 1000 = a

y calculamos la cantidad de numeros pares e impares

cantidadImpares = unidad M OD 2+decena M OD 2+centena M OD 2+unM illar M OD 2

cantidadP ares = 4 − cantidadImpares


.
3. Diseñar e implementar la solución en Python:

Ejemplo 3.5:

En una cabina de internet se mantiene la siguiente oferta: Por cada 4


horas seguidas de permanencia en la cabina de internet la 5ta hora es
gratis, sabiendo que una persona permanece un número determinado
de horas en la cabina, escribir un algoritmo que determine el monto a
3.3. EJERCICIOS RESUELTOS 17

1 #ALGORITMO: Dado um numero, calcular la cantidad


2 # de digitos pares y la cantidad de digitos impares.
3 #Leer numero
4 numero = input("Leer numero: ")
5 numero = int(numero)
6 #Descomponemos el numero en unidade, decena, centena
7 # y unidades de millar, luego calculamos
8 # la cantidad de digitos impares y pares.
9 unidad = numero % 10
10 decena = (numero // 10) % 10
11 centena = (numero // 100) % 10
12 umillar = numero // 1000
13 cantidadImpares = unidad % 2 + decena % 2 + centena % 2 +
14 umillar % 2
15 cantidadPares = 4 - cantidadImpares
16 #Mostrar el resultado
17 print("La cantidad de digitos pares es : ",cantidadPares)
18 print("La cantidad de digitos impares es : ",cantidadImpares)

Algoritmo 3.3: Calcular la cantidad de dígitos pares y dígitos impares

pagar sabiendo que la hora es S/. 1.00.

1. Analizar el problema: Dado el número de horas que una persona per-


manece en la cabina de internet tenemos que determinar cuanto es lo que
se debe pagar sabiendo que por cada 4 horas de consumo, la 5ta hora es
gratuita.
2. Especificar la solución:
a) Entrada: La cantidad de horas que una persona permanece en la
cabina de internet.
Salida: Costo total a pagar según la especificación del problema.
ejemplo:

Entrada Salida
Total Horas Total a pagar (S/.)
6 5.00
12 10.00
16 13.00

b) Lo primero que tenemos que hacer antes de todo es determinar la


cantidad de horas gratuitas que existen en un número determinado
de horas consumidas (12 horas), para esto usamos la operación DIV ,
esto nos devuelve cuantos horas gratuitas se presentan en la cantidad
total de horas consumidas,
horasGratis = 12 DIV 5 = 2
18 CAPÍTULO 3. METODOLOGÍA DE PROGRAMACIÓN

entonces para determinar cuanto se debe pagar simplemente reali-


zamos la diferencia entre el total de horas consumidas (12 horas) y
el total de horas gratuitas (2 horas), tomando como dato uno

horasP ago = 12 − 2 = 10

Entonce para una cantidad arbitraria de horas consumidas (totalHoras),


tendremos el siguiente modelo:

horasGratis = totalHoras DIV 5


horasP ago = totalHoras − horasGratis
3. Diseñar e implementar la solución en Python:

1 #ALGORITMO: Dada la cantidad total de horas,


2 # determinar el monto a pagar segun la oferta
3 # por cada 4 horas de consumo la 5ta hora es gratuita.
4 #Leer numero
5 totalHoras = input("Leer el total de horas consumidas: ")
6 totalHoras = int(totalHoras)
7 #Calculamos la cantidad de horas gratuitas
8 horasGratis = totalHoras % 5
9 # Calculamos las horas a pagar
10 horasPago = totalHoras - horasGratis
11 #Mostrar el resultado
12 print("La cantidad a pagar es : ",cantidadPares," soles")

Algoritmo 3.4: Calcular el monto a pagar en una cabina de internet.


4

Estructuras selectivas

4.1. Introducción
Todos los días de nuestra vida tenemos que tomar decisiones entre dos o
más opciones. Estas decisiones pueden ser muy simples y cotidianas que no
percibimos que lo hacemos, por ejemplo: “Sí el día está soleado, entonces
vestiré ropa ligera, sino vestiré ropa de abrigo”. Algunas veces estas decisiones
son más complejas porque dependen de muchas condiciones que pueden cambiar
según el contexto, por ejemplo: “Si llega el recibo de la luz y tengo dinero,
entonces iré a pagar el recibo”.
En el capitulo anterior aprendimos a programar usando estructuras secuen-
ciales. La secuenciación es un concepto fundamental de programación, pero no
es suficiente para resolver todos los problemas [1].
Así como en nuestra vida tomamos decisiones también en programación
existen estructuras que nos permiten seleccionar una opción u otra durante
la ejecución de un programa según determinadas condiciones. A este tipo de
estructuras se les conoce como estructuras selectivas y a la expresión que
nos indica qué camino tomar se le conoce como condición lógica.
Una condición lógica es una expresión booleana que cuando es evaluada nos
da un resultado de verdadero o falso (True o False en Python). Para formar
expresiones o condiciones que bifurquen la ejecución de un programa se utilizan
los operadores de comparación y lógicos, los cuales veremos a continuación.

Cuadro 4.1: Operadores de comparación


Operador Ejemplo Significado Resultado
== 1 == 7 Igual que False
!= 1 != 7 Diferente que True
< 1 < 7 Menor que True
> 1 > 7 Mayor que False
<= 1 <= 7 Menor o igual que True
>= 1 >= 7 Mayor o igual que False

Operadores de comparación. Este tipo de operadores permiten com-


parar dos valores entre sí, por ejemplo si quisiéramos saber si el valor de una

19
20 CAPÍTULO 4. ESTRUCTURAS SELECTIVAS

variable x es mayor que el valor de otra variable y lo haríamos usando la si-


guiente expresión x > y, y dependiendo de los valores de x, y el resultado de
evaluar dicha expresión seria True o False. En el cuadro 4.1 podemos ver todos
los posibles operadores de comparación.
Operadores lógicos. Los operadores lógicos soportados en Python son
and (y), or (o) y not (no), los cuales nos permiten realizar operaciones lógicas.
Se puede encontrar mas información sobre como realizar operaciones lógicas
en [3]. En el cuadro 4.2 podemos ver algunos ejemplos del uso de operadores
lógicos.

Cuadro 4.2: Operadores lógicos


Operador Ejemplo Explicación Resultado
and 1 == 7 and 7 == 8 False and False False
and 1 < 7 and 7 < 8 True and True True
and 1 < 7 and 1 = 8 True and False False
or 1 < 7 or 1 == 8 True or False True
or 1 < 7 or 1 < 7 True or True True
not not 1 < 7 not True False
not not 1 = 8 not False True

En Python, las estructuras selectivas se definen mediante el uso de las si-


guientes sentencias: if(si), else (sino) y elif (sino, si).

Estructura de Selección Simple


Ejecuta una determinada acción cuando se cumple una determinada condi-
ción. La selección if evalúa la condición y si la condición es verdadera, entonces
ejecuta la acción del bloque siguiente, si la condición es falsa, entonces no hace
nada.
Ejemplo:

1 #ALGORITMO: Calcular el valor absoluto de un número


2 #Leer número
3 numero = int(input('Ingrese un numero: '))
4 #Estructura condicional simple
5 if numero < 0:
6 numero = numero * (-1)
7 print ('El valor absoluto del numero es ', numero)

Algoritmo 4.1: Algoritmo para calcular el valor absoluto de un número

En este ejemplo, podemos traducir la porción de código después de la línea


5 literalmente al español como "Sí num es menor que cero, entonces el valor
de num será el anterior valor de num multiplicado por -1 y luego imprime un
texto indicando que el valor alsoluto del numero ingresado en pantalla es el
nuevo valor de la variable num."
4.1. INTRODUCCIÓN 21

Estructura de Selección Doble


Para elegir entre dos opciones o alternativas posibles usamos la estructura
de selección doble. La selección if evalúa la condición y si la condición es
verdadera, entonces se ejecuta el bloque 1, si la condición es falsa entonces se
ejecuta el bloque 2.
Ejemplo:

1 #ALGORITMO: Mostrar sí número es par o impar


2 #Leer número
3 numero = int(input('Ingrese un numero: '))
4 #Estructura condicional doble
5 if numero % 2 == 0:
6 print ('El numero ', numero, ' es par.')
7 else:
8 print ('El numero ', numero, ' es impar.')

Algoritmo 4.2: Algoritmo que muestra sí número es par o impar

Podemos traducir la porción de código después de la línea 5 literalmente


al español como "Sí num mod dos es igual a cero, entonces imprime un texto
indicando que el valor del numero ingresado es par, caso contrario imprime un
texto indicando que el valor del numero ingresado es impar..En este ejemplo, el
bloque 1 sería la línea 6 y el bloque 2 sería la línea 8.

Estructura de Selección Múltiple


En muchos caso a no basta con evaluar dos opciones sino varias alternativas,
para estos casos usamos las estructuras de selección múltiple. La selección if”
evalúa la condición y si éste es verdadera, entonces se ejecuta el bloque 1, si
es falsa entonces se evalúa la condición elif, si ésta es verdadera entonces
se ejecuta el bloque 2 y si es falsa se evalúa la siguiente condición elif sí es
que hubiera; y así, de forma continua hasta terminar con las condiciones elif,
finalmente se ejecuta el último bloque debajo de else.
Ejemplo:
Podemos traducir la porción de código después de la línea 6 literalmente al
español como "Sí nota es mayor o igual a once, entonces imprime Aprobó,
sino sí nota es mayor o igual a cinco, entonces imprime Desaprobó, caso
contrario imprime Reprobó..En este ejemplo, el bloque 1 sería la línea 7 y el
bloque 2 sería la línea 9.
En la vida real también debemos resolver problemas en los cuales las todas
condiciones no están definidas desde el inicio, en estos casos se evalúan con-
diciones principales y en base al resultado se da una respuesta o se continua
evaluando las condiciones siguientes. Puedes poner tantos elif como quieras.
El bloque else se ejecuta si no se cumple ninguna de las condiciones if y elif.
También se pueden combinar estructuras selectivas simples, dobles y múl-
tiples, observa una variación del ejemplo anterior donde se incluyen mensajes
particulares dentro de cada caso:
22 CAPÍTULO 4. ESTRUCTURAS SELECTIVAS

1 #ALGORITMO: Mostrar si el alumno aprobó, desaprobó o reprobó


2 #un curso según su nota
3 #Leer nota
4 nota = int(input('Ingrese una nota: '))
5 #Estructura condicional múltiple
6 if nota >= 11:
7 print ('Aprobó')
8 elif nota >= 5:
9 print ('Desaprobó')
10 else:
11 print ('Reprobó')

Algoritmo 4.3: Algoritmo que muestra si el alumno aprobó, desaprobó o reprobó


un curso

1 #ALGORITMO: Mostrar si el alumno aprobó, desaprobó o reprobó


2 #un curso y un mensaje de felicitación si obtuvo buena nota
3
4 #asignación de variable
5 nota = int(input('Ingresa tu nota: '))
6 #inicio
7 if nota > 20:
8 print ('Valor de nota incorrecto')
9 elif nota >= 11:
10 print ('Aprobaste')
11 if nota >= 16:
12 print ('Felicitaciones! eres un excelente alumno')
13 else:
14 print ('Muy bien! puedes más')
15 elif nota >= 5:
16 print ('Desaprobaste')
17 else:
18 print ('Reprobaste')

Algoritmo 4.4: Algoritmo que muestra si el alumno aprobó, desaprobó o reprobó


un curso y un mensaje de felicitación si obtuvo buena nota

4.2. Ejercicios resueltos

Ejemplo 4.1:

Escribir un algoritmo que lea un número y en caso de que sea mayor a


20 imprima la mitad del número.

Analizar el problema: Debemos leer un número (no indica ningun tipo


de restricción) y verificar si es mayor a 20, sí es así imprimir la mitad del
4.2. EJERCICIOS RESUELTOS 23

número.
Determinar especificaciones:
• Entrada: Un número cualquiera "numero"
• Salida: Imprimir en pantalla la mitad del número sí es que es mayor
a 20
• Relacion entre la entrada y la salida: Es necesario comparar el "nu-
mero" ingresado con 20 si es mayor entonces debemos dividir el
número por la mitad y mostrar ese resultado. En este caso debe-
mos usar una estructura condicional simple ya que la operación se
ejecutará sólo cuando la evaluación sea verdadera o True.
Diseño e implementación en Python:

#ALGORITMO: Leer un número y en caso de que sea mayor


#a 20 imprimir la mitad.
#Leer número
numero = int(input("Ingrese entero: "))
#Determinar si es mayor a 20 e imprimir
if numero > 20:
numero = numero / 2
#Mostrar el resultado
print("Número es mayor a 20. La mitad es: ", numero)

Ejemplo 4.2:

Escribir un algoritmo que lea dos números y efectúe la adición. En caso


de que el resultado de la adición sea mayor que 20, sumarle 8 y mostrar
en pantalla; en caso de que el resultado sea menor o igual a 20, restarle
5 y mostrar en pantalla.

Analizar el problema: El ejercicio pide leer dos números y sumarlos,


luego evaluar y este resultado es mayor que 20 para según esto sumarle
8 o restarle 5.
Determinar especificaciones:
• Entrada: Dos número cualquiera
• Salida: El resultado final luego de operar los números según la con-
dición
• Relación entre la entrada y la salida: Este ejemplo es diferente al
anterior ya que el problema indica que debemos realizar dos opera-
ciones distintas si la evaluación del resultado de la suma es mayor a
20 (caso verdadero) sumarle 8 o si es menor o igual a 20 (caso falso)
restarle 5, y finalmente mostrar en pantalla el nuevo resultado.
Diseño e implementación en Python:
24 CAPÍTULO 4. ESTRUCTURAS SELECTIVAS

#ALGORITMO: Leer dos números, realizar operaciones y


#mostrar el resultado
#Leer números
numero1 = int(input("Ingrese el primer número: "))
numero2 = int(input("Ingrese el segundo número: "))
#Sumar números
resultado = numero1 + numero2
#Mostrar el resultado dependiendo si es mayor o no a 20
if resultado > 20:
print("El resultado es: ", resultado + 8)
else:
print("El resultado es: ", resultado - 5)

Ejemplo 4.3:

El profesor de una asignatura tomó cuatro exámenes parciales durante


un semestre. Al final del semestre informa a sus alumnos que pueden
calcular su promedio final eliminando la nota más baja y promediando
las tres restantes. Escribir un algoritmo para calcular el promedio final
de un alumno.

Analizar el problema: El ejercicio nos dice que el promedio debe ser


canculado eliminando la nota menor para esto debemos encontrar cuál
de las 4 notas es la menor, quitarla y calcular el promedio entre las tres
restantes.
Determinar especificaciones:
• Entrada: Las cuatro notas que el profesor registró
• Salida: El primero de las cuatro notas más altas
• La relación entre la entrada y la salida: Existen muchas formas de
resolver este problema, esta vez vamos a usar una estructura condi-
cional simple, primero asumimos que la primera nota almacenada en
la variable "nota1.es la menor de las cuatro notas asignando su va-
lor en una variable "notaMenor", y comparamos "notaMenorçon la
segunda nota almacenada en la variable "nota2", sí "nota2.es menor
que "notaMenor.entonces asignamos el valor de "nota2.en "notaMe-
nor", ahora tenemos en la variable "notaMenor"la menor de las dos
primeras notas y repetimos esta lógica con las variables "nota1 2

"nota2". Una vez que sepamos cuál es la valor de la nota menor


debemos calcular el promedio, para esto sumamos las cuatro notas
y le restamos "notaMenor"para tener la suma sólo de las tres notas
más altas, hacemos la división y finalmente mostramos el resultado
en pantalla.
Diseño e implementación en Python:
4.2. EJERCICIOS RESUELTOS 25

#ALGORITMO: Calcular promedio de tres notas más altas


#Leer notas
nota1 = float(input("Ingrese nota 1: "))
nota2 = float(input("Ingrese nota 2: "))
nota3 = float(input("Ingrese nota 3: "))
nota4 = float(input("Ingrese nota 4: "))
#Determinar la nota menor
notaMenor = nota1
if notaMenor > nota2:
notaMenor = nota2
if notaMenor > nota3:
notaMenor = nota3
if notaMenor > nota4:
notaMenor = nota4
#Calcular el promedio
promedio = (nota1 + nota2 + nota3 + nota4 - notaMenor) / 3
#Escribir promedio
print("El promedio es: ", promedio)

Nota:
Intenta resolver este problema usando otra estructura condicial. Tam-
bién puedes hacer una modificación para que el usuario ingrese una nota
mayor a 20 aparezca un mensaje que le indique .El valor ingresado para
nota es incorrecto". Buena suerte!

Ejemplo 4.4:

Escribir un algoritmo que lea la edad de una persona y que muestre en


pantalla su condición laboral.

Analizar el problema: El problema indica que el usuario debe ingresar


su edad y el programa mostrar un mensaje en patalla sobre su condición
laboral.
Determinar especificaciones:
• Entrada: La edad de la persona
• Salida: Mensaje en pantalla
• La relación entre la entrada y la salida: Como el problema no indica
detalles sobre la condición laboral, vamos asumir que que existen
cinco etapas laborales diferentes a lo largo de la vida. Dado que una
persona sólo puede estar en una de estas etapas a la vez entonces
vamos a usar una estructura condicional múltiple para mostrar cinco
mensajes diferentes según la edad de la persona.
Diseño e implementación en Python:
26 CAPÍTULO 4. ESTRUCTURAS SELECTIVAS

#ALGORITMO: Mostrar situación laboral según la edad de


#una persona
#Leer edad
edad = int(input('¿Cuántos años tienes?'))
#Mostrar un mensaje según sea el valor de edad
if edad < 0:
print ('¿Todavía no has nacido?')
elif edad < 16:
print ('Legalmente todavía no puedes trabajar')
elif edad < 65:
print ('A esta edad, puedes trabajar')
elif edad < 120:
print ('Supongo que estarás ya jubilado/a')
else:
print ('¿Seguro que tienes', edad, 'años?')

Ejemplo 4.5:

Escribir un algoritmo que lea un número e indique si es positivo o ne-


gativo.

Analizar el problema: El problema pide leer un número cualquiera y


determinar si es positivo o negativo.

Determinar especificaciones:

• Entrada: Un número cualquiera


• Salida: Mensaje en pantalla indicando si es positivo o negativo
• La relación entre la entrada y la salida: Usamos una estructura con-
dicional doble que evalue el número sí es mayor que cero muestre en
pantalla "positivo" y caso contrario muestre en pantalla "negativo".
Pero ¿qué pasaría sí el número que el usuario ingresa es cero? el cero
no es positivo ni negativo entonces vamos a añadir un mensaje para
este caso específico.

Diseño e implementación en Python:

#ALGORITMO: Determinar si un número es positivo o negativo


#Leer número
numero=int(input('Ingrese numero: '))
#Mostrar mensaje en pantalla
if numero>0:
print ('Positivo')
elif numero<0:
print ('Negativo')
else:
print ('El número es cero')
4.2. EJERCICIOS RESUELTOS 27

Ejemplo 4.6:

Escribir un algoritmo que lea dos números, lea un operador matemáti-


co básico (considere suma, resta, multiplicación y división), ejecute la
operación y muestre en pantalla el resultado de los dos números.

Analizar el problema: El problema pide sumar, restar, multiplicar o


dividir dos números según sea el operador que el usuario ingrese.
Determinar especificaciones:
• Entrada: Dos números cualquiera y un operador mátemático básico
(+ , - , * , / )
• Salida: El resultado de operar los dos números con el operador in-
gresado
• La relación entre la entrada y la salida: Primero debemos leer los
dos números que necesitamos operar y el operador matemático, los
almacenamos en las variables: "numero1", "numero2" y .operador"
respectivamente. En este caso el problema indica que se precesarán
las operaciones básicas entonces necesitamos una estructura condi-
cional múlyiple para evaluar estas cuatro situaciones. Además de-
bemos prestar especial atención a la división ya que si el segundo
número ingresado es cero genera un error de división por cero, en-
tonces antes de aplicar esa operación agregamos una condición si
"numero2" es diferente de cero, si lo es mostrará un mensaje de
error para indicar el error y colocará un valor arbitrario en resulta-
do". Finalmente mostramos el resultado en pantalla.
Diseño e implementación en Python:

#ALGORITMO: Ejecutar operación de dos número según


#operador matemático
#Leer números
numero1 = int(input('Ingrese numero 1: '))
numero2 = int(input('Ingrese numero 2: '))
#Leer operador
operador = input('Ingrese operador: ')
if operador == '+':
resultado = numero1 + numero2
elif operador == '-':
resultado = numero1 - numero2
elif operador == '*':
resultado = numero1 * numero2
elif operador == '/' and numero2 != 0:
resultado = numero1 / numero2
else:
print ('Error división por cero')
resultado = 0
28 CAPÍTULO 4. ESTRUCTURAS SELECTIVAS

#Mostrar resultado en pantalla


print ('El resultado es', resultado)

Ejemplo 4.7:

Escribir un algoritmo que lea dos números x y y y que muestre en


pantalla un mensaje que indique la relación entre ellos.

Analizar el problema: El problema pide leer dos números y comparar-


los, luego mostrar si x es mayor que y o si x es menor que y.
Determinar especificaciones:
• Entrada: Dos número x y y
• Salida: Mensaje en pantalla indicando la relación entre ellos
• La relación entre la entrada y la salida : Primero haremos la compa-
ración para el caso más simple que estos dos números sean iguales,
si no lo son entonces debemos verificar cuál de ellos es mayor que el
otro y mostrar un mensaje según sea el caso.
Diseño e implementación en Python:

#ALGORITMO: Comparar dos números


#Leer números
x = int(input('Ingrese x: '))
y = int(input('Ingrese y: '))

#Mostrar resultado en pantalla


if x == y:
print (x, "y", y, "son iguales")
else:
if x > y:
print (x, "es menor que", y)
else:
print (x, "es mayor que", y)

4.3. Ejercicios propuestos


Escribir un algoritmo que lea un número y que imprima la tercera parte
del numero si es menor o igual a 50.
Escribir un algoritmo que lea dos números, en caso de que la suma de los
números sea menor o igual a 30 el algoritmo debe imprimir la suma, en
cualquier otro caso debe imprimir la resta.
Escribir un programa que lea tres numeros e imprima ’son iguales’ si los
tres son iguales y ’no son iguales’ si no lo son.
Escribir un algoritmo que lea un número e indique si es divisíble por 3 y
por 7.
4.3. EJERCICIOS PROPUESTOS 29

Escribir un algoritmo que simule una máquina dispensadora de dulces.


Es decir, que espere la cantidad de dinero que acepte (siempre menor a
5) y que permita al usuario escoger los productos que están disponibles
para después imprimir el vuelto según el costo del producto.
Un año es bisiesto si es divisible por 4, excepto si es una centuria, que
tiene que ser divisible por 400 (1800 y 1900 no fueron bisiestos, pero
1600 y el 2000 sí). Escribe un programa que pida el número de un año y
muestre si es bisiesto o no.
Escribir un algoritmo que lea tres números reales y me diga, si se trata
de un triángulo (La suma de dos lados cualesquiera debe ser mayor que
el tercer lado), y que tipo de triángulo es (Equiltero: todos los lados son
iguales, Issceles: al menos dos lados son iguales, Escaleno: no tiene dos
lados iguales).
El gobierno abrió una nueva línea de crédito para los funcionarios del
estado. El valor máximo de préstamo no puede pasar el 30 % del salario
bruto de un trabajador. Hacer un algoritmo que permita ingresar el sa-
lario bruto y el valor del préstamo y muestre en pantalla si el préstamo
puede ser concedido o no.
Escribir un algoritmo que lea dos número e imprima el cuadrado del
menor número y la raíz cuadrada del mayor número, si es que es posible.
Escribir un algoritmo que lea tres número, los almacene en tres variables
con los siguiente nombres "mayor", "menor" e ïntermedio" respectiva-
mente, luego que los muestre de en pantalle de forma ordenada.
5
Estructuras Iterativas

5.1. Introducción
Hasta este punto hemos visto como utilizar sentencias básicas y selectivas
los cuales nos permitieron resolver muchos problemas, pero aun no vimos como
hacer frente a problemas que requieren tareas repetitivas. Por ejemplo, para
determinar si una persona es mayor de edad tendríamos que ejecutar el algo-
ritmo respectivo una sola vez y obtendríamos la respuesta, pero si queremos
obtener la misma respuesta para 5 personas? probablemente tendríamos que
ejecutar nuestro algoritmo 5 veces y esta actividad no nos demandaría demasia-
do esfuerzo verdad? y si queremos saber esa información para 10 000 personas?
o talvez 100 000? seria necesario ejecutar nuestro algoritmo 10 000 o 100 000
veces?. Es ahí que las estructuras repetitivas(iteraciones o bucles) toman un
papel importante.
Python ofrece dos sentencias para realizar iteraciones while y for a conti-
nuación veamos el uso de cada uno de ellos.

Sentencia While
El Algoritmo 5.1 muestra un simple conteo regresivo y muestra un mensaje
al finalizar el conteo.

1 #ALGORITMO: Conteo regresivo.


2 #asignación de variable
3 n = 10
4 #inicio While
5 while n > 0:
6 print(n)
7 n = n - 1
8 print('Fuera !!!')

Algoritmo 5.1: Conteo regresivo

Podemos traducir la porción del código (lineas 5 - 7) literalmente al español


como “Mientras n sea mayor a 0, imprime el valor actual de n y luego reduce

31
32 CAPÍTULO 5. ESTRUCTURAS ITERATIVAS

Pantalla:
10
9
8
7
6
5
4
3
2
1
Fuera !!!

Figura 5.1: Resultado de ejecutar el Algoritmo 5.1.

el valor de n en 1. Cuando llegues a 0 sal de la sentencia while”. Este tipo de


flujo utilizando while recibe el nombre de bucle o iteración ya que el último
paso (linea 7) enlaza de nuevo con el primero (linea 5).
Es importante aclarar que en el cuerpo de la iteración (lineas 5 - 7) el valor
de una o más variables (de control) deben cambiar, de tal forma que nuestra
condición de parada (linea 5) pueda ser falsa y la iteración pueda terminar.
En nuestro ejemplo la variable de control que cambia constantemente es n (ver
linea 7) hasta que llega a el valor de 0 y al evaluar la condición de parada n
>0 nos da como resultado falso y la iteración termina. La Figura 5.1 muestra
el resultado en la pantalla después de ejecutar el Algoritmo 5.1.
Una iteración que nunca termina se denomina iteración infinita y esto
sucede porque al evaluar la condición de parada siempre nos da como resultado
verdadero (True). El Algoritmo 5.2 muestra una iteración infinita donde a
pesar de existir una variable de control que varia en cada iteración esta nunca
es evaluada en la condición de parada, es así que este algoritmo se ejecutará para
siempre y la única forma de terminarlo será finalizando el proceso respectivo o
apagando tu máquina.

1 #ALGORTIMO: Iteración Infinita.


2 #asignación de variable
3 n = 10
4 #inicio While
5 while True:
6 print(n)
7 n = n - 1
8 print('Fuera !!!')

Algoritmo 5.2: Iteración infinita.

Pero calma, una forma de parar una iteración infinita es utilizando la sen-
tencia break para terminar la iteración cuando se desee, veamos un ejemplo
con esta sentencia:
5.1. INTRODUCCIÓN 33

1 #ALGORITMO: Iteración utilizando la sentencia break.


2 while True:
3 palabra = input('-->')
4 if palabra == 'terminar':
5 break
6 print(palabra)
7 print('Termino!')

Algoritmo 5.3: Iteración utilizando la sentencia break.

Como se puede apreciar en el Algoritmo 5.3 la iteración solo terminará


cuando la variable palabra contenga el valor de “terminar”, la Figura 5.2
muestra el resultado en la pantalla después de ejecutar el algoritmo.

Pantalla:
--> Esto
Esto
--> es
es
--> una prueba
una prueba
--> terminar
Termino!

Figura 5.2: Resultado de ejecutar el Algoritmo 5.3.

Algunas veces cuando se esta dentro de una iteración, se necesita terminar la


iteración actual y saltar a la siguiente, en ese caso se puede utilizar la sentencia
continue, el Algoritmo 5.4 muestra el uso de la sentencia continue.

1 #ALG.: Iteración utilizando las sentencias break y continue.


2 while True:
3 palabra = input('-->')
4 if palabra == 'saltar':
5 continue
6 if palabra == 'terminar':
7 break
8 print(palabra)
9 print('Termino!')

Algoritmo 5.4: Iteración utilizando las sentencias continue y break.

Para entender el funcionamiento de la sentencia continue basta ingresar la


palabra saltar a nuestro algoritmo, note que la linea 8 no es ejecutada mucho
menos las lineas 6 y 7, el efecto de la sentencia continue es que si se ejecuta
“salta” la iteración actual y comienza nuevamente en la linea 2. El algoritmo no
34 CAPÍTULO 5. ESTRUCTURAS ITERATIVAS

terminará a no ser que se ingrese la palabra terminar. La Figura 5.3 muestra


el resultado en la pantalla después de ejecutar el algoritmo.

Pantalla:
--> Esto
Esto
--> saltar
--> una prueba
una prueba
--> terminar
Termino!

Figura 5.3: Resultado de ejecutar el Algoritmo 5.4.

Sentencia For
Otra forma de trabajar con iteraciones en Python es la sentencia for, es
utilizada generalmente cuando se tiene una lista de cosas u objetos para recorrer
y se le denomina “iteración definida” a diferencia de la sentencia while que se
le denomina “iteración indefinida” [4]. ¿Cuál es la diferencia? En una sentencia
for tenemos definidas las iteraciones anticipadamente mientras que en una
sentencia while se repite hasta que cierta condición se hace falsa.
Veamos un ejemplo de la sentencia for:

1 #ALGORITMO: Iteración usando la sentencia For.


2 for i in range(0,10):
3 print(i)

Pantalla:
0
1
2
3
4
5
6
7
8
9

Algoritmo 5.5: Iteración usando la sentencia for

El Algoritmo 5.5 muestra el funcionamiento básico de la sentencia for,


véase que utilizamos la función range y esta nos permite iterar en un rango
de 0 a 9 (ojo, no toma el valor de 10, ¿Puede intuir como hacer para imprimir
hasta el valor de 10?). También podemos identificar que la sentencia for no
5.2. EJERCICIOS RESUELTOS 35

necesita de una variable de iteración como en la sentencia while, la variable


“i” itera automáticamente a través del rango (desde 0 hasta 9) e imprime cada
valor almacenado en “i”.
Algunos ejemplos de la función range están listadas a continuación:
range(1,11,2) nos permitirá recorrer de 1 al 10 de 2 en 2.
range(10,20,3) nos permitirá recorrer del 10 al 20 de 3 en 3.
range(100,10,-1) nos permitirá recorrer en forma inversa de 100 a 10
de 1 en 1.
range(50,10,-2) nos permitirá recorrer en forma inversa de 50 a 10 pero
de 2 en 2.

5.2. Ejercicios Resueltos

Ejemplo 5.1:

Escribir un algoritmo que imprima todos los números impares del 1 al


50.

Analizar el problema: Debemos imprimir todos los números impares


comprendidos entre 1 y 50.
Determinar especificaciones:
• Entrada: (sin entrada)
• Salida: Números impares dentro del rango
• Dados 50 números (desde el 1 hasta el 50) debemos imprimir sola-
mente aquellos que sean impares. Ejemplo 1,3,5, etc. La idea para
resolver el problema es analizar cada número mediante la operación
mod ( %) y verificar que el resto sea diferente de cero, recuerda que
esta es solo una idea tú podrías tener una diferente para solucionar
el mismo problema.
Diseño e implementación en Python: Notar que en la función range()

1 #ALGORITMO: Impresión de números impares comprendidos entre


2 # 1 y 50.
3 for numero in range(1,51):
4 if numero % 2 != 0:
5 print(numero)

identificamos el inicio en 1 y el fin en 51, de esta manera aseguramos que


el iterador “numero” llegue hasta 50.
El mismo problema puede ser resuelto utilizando la sentencia while, el
ejercicio abajo muestra una idea de la solución.
36 CAPÍTULO 5. ESTRUCTURAS ITERATIVAS

1 #ALGORITMO: Impresión de números impares comprendidos entre


2 # 1 y 50 utilizando la sentencia While.
3 iterador=1
4 while iterador<=50:
5 if iterador % 2 != 0:
6 print(iterador)
7 iterador = iterador + 1

Ejemplo 5.2:

Escribir un algoritmo que determine la potencia de un número n elevado


a exponente t (nt ). Ejemplo, 23 = 2 × 2 × 2 = 8

Analizar el problema: Debemos calcular la potencia de un número


dado.
Determinar Especificaciones:
• Entrada: La base “n” y el exponente “t”.
• Salida: La potencia del número “n” elevado a la potencia “e”.
• Para resolver este ejercicio utilizaremos la sentencia for, el número
de veces que iterará estará condicionado por el valor que se asigne
a la variable “t”, para obtener el resultado final necesitaremos de un
acumulador para acumular las multiplicaciones del número base “n”.
Diseño e implementación en Python: Una alternativa utilizando la

1 #ALGORITMO: Determinar la potencia de un número con for.


2 n = int(input("Base: "))
3 t = int(input("Exponente: "))
4 acumulador = 1
5 for i in range(t):
6 acumulador = acumulador * n
7 print(acumulador)

sentencia while sigue a continuación. La lógica de este algoritmo es iterar


mientras el valor del exponente sea mayor que 0, seguidamente y dentro
de while disminuimos en una unidad al exponente “t”.

Ejemplo 5.3:

Escribir un algoritmo que imprima los cuadrados de los números del 1


al 20

Analizar el problema: Imprimir los cuadrados de los números del 1 al


20.
5.2. EJERCICIOS RESUELTOS 37

1 #ALGORITMO: Determinar la potencia de un número con while.


2 n = int(input("Base: "))
3 t = int(input("Exponente: "))
4 acumulador = 1
5 while t > 0:
6 acumulador = acumulador * n
7 t = t - 1
8 print(acumulador)

Determinar Especificaciones:

• Entrada: (sin entrada)


• Salida: Números del 1 al 20 elevados al cuadrado
• Para solucionar este ejercicio lo que tendremos que hacer es recorrer
cada uno de los números del 1 al 20 y enseguida multiplicarlo por si
mismo, finalmente imprimir el resultado.

Diseño e implementación en Python: Nuevamente la función range


recibe el valor de 21, quiere decir que iterará hasta el número 20.

1 #ALGORITMO: Determina el cuadrado de cada numero del 1 al 20.


2 # usando for.
3 for i in range(21):
4 print(i*i)

En seguida el mismo ejercicio resuelto con la sentencia while.

1 #ALGORITMO: Determina el cuadrado de cada numero del 1 al 20


2 # usando while.
3 iterador = 1
4 while iterador <= 20:
5 print(iterador*iterador)
6 iterador = iterador + 1

Ejemplo 5.4:

Escribir un algoritmo que imprima todos los números del 1 al 100 y la


suma de ellos.

Analizar el problema: El ejercicio pide para imprimir todos los núme-


ros, sin ninguna distinción, y la suma de todos ellos.

Determinar Especificaciones:
38 CAPÍTULO 5. ESTRUCTURAS ITERATIVAS

• Entrada: (sin entrada)


• Salida: Los 100 números impresos en pantalla y la suma de todos
ellos.
Diseño e implementación en Python: La variable acumulador acu-

1 #ALGORITMO: Imprime los números del 1 al 100 y la suma


2 #total de ellos.
3 acumulador = 0
4 for i in range(1,101):
5 print(i)
6 acumulador = acumulador + i
7 print('la suma total de todos estos números es', acumulador)

mula (suma) en cada iteración el valor actual del iterador i. El mismo


ejercicio resuelto utilizando la sentencia while es el siguiente.

1 #ALGORITMO: Imprime los números del 1 al 100 y la suma


2 #total de ellos, usando la sentencia while.
3 acumulador = 0
4 i = 1
5 while i <= 100:
6 print(i)
7 acumulador = acumulador + i
8 i = i + 1
9 print('la suma total de todos estos números es', acumulador)

Ejemplo 5.5:

Escribir un algoritmo para ingresar 10 números enteros por el teclado e


imprimir la mitad de cada número.

Analizar el problema: A cada número ingresado por teclado debemos


calcular su mitad e imprimirlo inmediatamente.
Determinar especificaciones:
• Entrada: 10 números ingresados por teclado
• Salida: La mitad de cada número ingresado
• Esta vez utilizaremos una nueva función que nos permitirá ingresar
un valor por teclado, la función input(), sin embargo la función
input recibe los datos como strings en general, es decir, por más que
ingresemos números el tipo de dato asignado será str (string), por
lo tanto es necesario utilizar una función más, la función int(), esta
función convertirá el valor ingresado al tipo de dato entero (int)
como pueden ver en la linea 4 del algoritmo.
5.2. EJERCICIOS RESUELTOS 39

1 #ALGORITMO: Ingresar 10 números por el teclado


2 # e imprimir su mitad.
3 for i in range(10):
4 numero = int(input('-->'))
5 mitad = numero / 2
6 print(mitad)
7 print('Termino')

Diseño e implementación en Python: La versión del primer algorit-


mo utilizando la sentencia while es el algoritmo mostrado abajo.

1 #ALGORITMO: Ingresar 10 números por el teclado


2 # e imprimir su mitad usando la sentencia while.
3 i = 0
4 while i <= 10:
5 numero = int(input('-->'))
6 mitad = numero / 2
7 print(mitad)
8 i = i + 1
9 print('Termino')
40 CAPÍTULO 5. ESTRUCTURAS ITERATIVAS

Ejemplo 5.6:

Escribir un algoritmo para mostrar la tabla de multiplicar del 8.

Analizar el problema: El problema consiste en mostrar en pantalla la


tabla de multiplicar del 8, literalmente de la forma: 8 × 1 = 8, 8 × 2 = 16,
8 × 3 = 24 . . . 8 × 9 = 72
Determinar especificaciones:
• Entrada: (sin entrada)
• Salida: La tabla de multiplicar del 8 de la forma:
8×1=8
8 × 2 = 16
8 × 3 = 24
...
8 × 9 = 72
Diseño e implementación en Python: La diferencia básica entre los
dos algoritmos abajo (for y while) es la unidad adicional que agrega-
mos al iterador i en el algoritmo con la sentencia for, ya que la función
range() inicia el iterador en 0.

1 #ALGORITMO: Imprimir la tabla de multiplicar del


2 # número 8.
3 for i in range(9):
4 print('8 x', i+1, '=', 8*(i+1))

1 #ALGORITMO: Imprimir la tabla de multiplicar del


2 # número 8 usando la sentencia while.
3 i = 1
4 while i <= 9:
5 print('8 x', i, '=', 8*i)
6 i = i + 1
5.2. EJERCICIOS RESUELTOS 41

Ejemplo 5.7:

Escribir un algoritmo para contar los dígitos de un número n.

Analizar el problema: Dado un número debemos contar el número de


dígitos que contiene. Ejemplo 123 tiene 3 dígitos, 4534 tiene 4 dígitos.

Determinar especificaciones:

• Entrada: número entero.


• Salida: número de dígitos que tiene el número.
• La relación entre la entrada y la salida en este ejercicio está dada
por las divisiones enteras sucesivas del número entre 10 hasta que
el número sea menor que el divisor, paralelamente se deberá contar
cuantas divisiones se hizo y aumentar una unidad para saber cuantos
dígitos contiene el número.

Diseño e implementación en Python: Intenta desarrollar el mismo


ejercicio pero con la sentencia for.

1 #ALGORITMO: Contar el número de dígitos de un número entero.


2 numero = input("Número entero: ")
3 contador = 0
4 while numero > 10:
5 numero = numero // 10
6 contador = contador + 1
7 print(contador + 1)

Nota:
• El símbolo “//” utilizado en la linea 5 devuelve la parte
solamente entera de la división.
• La razón por la que imprimimos contador + 1 en la linea
7 es porque las divisiones sucesivas que se ejecutaran es una
menos que el número de dígitos.

Ejemplo 5.8:

Escribir un algoritmo para calcular el factorial de un número n.

Analizar el Problema: se debe determinar el factorial de un número


n. Ejemplo, el factorial de 5 es: 5! = 5 × 4 × 3 × 2 × 1 = 120.

Determinar especificaciones:
42 CAPÍTULO 5. ESTRUCTURAS ITERATIVAS

• Entrada: un número n.
• Salida: factorial del número n.
• La relación existente entre la entrada y salida está dada por las n
multiplicaciones sucesivas comenzando por uno y terminando en el
número n
Diseño e implementación en Python: Intenta realizar el mismo
ejercicio con la sentencia while.

1 #ALGORITMO: Determinar el factorial de un número.


2 n = int(input("Número entero: "))
3 acumulador = 1
4 for i in range(1, n + 1):
5 acumulador = acumulador * i
6 print(acumulador)
5.3. EJERCICIOS PROPUESTOS 43

5.3. Ejercicios Propuestos


1. Escribir un algoritmo que pida ingresar un número por teclado, inmedia-
tamente imprimir todos los números menores a este número. Ejemplo sea
5 el número ingresado, el algoritmo deberá imprimir 1, 2, 3, 4, 5.
2. Escribir un algoritmo que solicite dos números, limite inferior y superior,
y que inmediatamente imprima todos los números comprendidos en este
intervalo. Ejemplo si ingresamos 5 y 10 o 10 y 5 el algoritmo deberá
imprimir 5, 6, 7, 8, 9 y 10.
3. Escribir un algoritmo que solicite dos números, limite inferior y superior,
y que inmediatamente imprima los números pares comprendidos en este
intervalo. ejemplo si ingresamos 3 y 9 o 9 y 3 el algoritmo deberá imprimir
4, 6 y 8.
4. Escribir un algoritmo para ingresar 10 números por teclado e imprimir el
cubo de cada uno. Ejemplo 2 → 8, 5 → 125, 7 → 343, etc.
5. Escribir un algoritmo que imprima la suma de los números pares com-
prendidos entre 25 y 200.
6. Escribir un algoritmo que solicite dos números, limite inferior y superior,
y que imprima solamente los múltiplos de 3 y 5 al mismo tiempo. Ejemplo
sena los números 1 y 50 o 50 y 1 los múltiplos de 3 y 5 al mismo tiempo
son: 15, 30 y 45.
7. Escribir un algoritmo que solicite dos números, limite inferior y superior, y
que imprima los números comprendidos en el intérvalo descendentemente.
Ejemplo 1 y 7 o 7 y 1 los números impresos descendentemente serán 7,
6, 5, 4, 3, 2 y 1.
8. Escribir un algoritmo que solicite 5 números y que inmediatamente el
algoritmo imprima si es positivo o negativo.
9. Escribir un algoritmo para imprimir los n primeros números de la serie
Fibonacci (1, 1, 2, 3, 5, 8, 13, etc). El valor de n deberá ser ingresado por
teclado.
10. Escribir un algoritmo que solicite ingresar 3 notas de 5 estudiantes y que
inmediatamente calcule el promedio de cada estudiante.
6
Modularidad: Funciones

6.1. Declarando una función


La sintaxis para definir una función es

def nombre_de_la_función (parámetros ):


código

45
7
Notas

47
Bibliografía

[1] J. Zelle, Python Programming: An Introduction to Computer Science 2nd


Edition. Franklin, Beedle & Associates Inc., 2010.
[2] J. V. Guttag, Introduction to computation and programming using Python.
Mit Press, 2013.
[3] L. Joyanes Aguilar, Fundamentos de programación: algoritmos y estructura
de datos y objetos. 2008.
[4] C. Severance, Python for informatics: Exploring information. CreateSpace,
2013.

49

También podría gustarte