El condicional (if)

Es quizá la estructura de control más utilizada. A continuación presentamos un sencillo ejemplo para observar cómo es su sintaxis en Python:


In [1]:
def mayor_o_menor(x, y):
    if x < y:
        print(x, "es menor que", y)
    elif x > y:
        print(x, "es mayor que", y)
    else:
        print(x, "y", y, "son iguales")

Al aplicar esta función a distintos números obtenemos:


In [2]:
mayor_o_menor(2, 5)


2 es menor que 5

In [3]:
mayor_o_menor(100, 10)


100 es mayor que 10

In [5]:
mayor_o_menor('a', 1)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-67a444824ba2> in <module>()
----> 1 mayor_o_menor('a', 1)

<ipython-input-1-d0ae70963511> in mayor_o_menor(x, y)
      1 def mayor_o_menor(x, y):
----> 2     if x < y:
      3         print(x, "es menor que", y)
      4     elif x > y:
      5         print(x, "es mayor que", y)

TypeError: unorderable types: str() < int()

Algunos de los operadores con los que se pueden hacer comparaciones al momento de usar en if son:

Operador Resultado
== Igualdad
!= No es igual
< Menor que
> Mayor que
<= Menor o igual
>= Mayor o igual
not Niega una condición
in Verifica si un elemento está en una lista
and Verifica si dos condiciones se cumplen
or Verifica si se cumple al menos una condición
is Verifica si un objeto es igual a otro

A excepción de in y not, todos los demás operadores son similares a los usados en otros lenguajes de programación, por lo que no vamos a mirar ejemplos de ellos. Veamos, por tanto, sólo como funcionan los primeros:


In [6]:
3 in [1, 2, 4]


Out[6]:
False

In [7]:
3 in [1, 2, 3]


Out[7]:
True

In [8]:
not (2 == 5)


Out[8]:
True

A través de estos ejemplos también podemos notar que los valores de verdad en Python se escriben como True y False para verdadero y falso, respectivamente.

Problemas

Problema 1

Definir una función absoluto(x) que tome un número x y retorne su valor absoluto, así:

absoluto(100.22)
100.22
absoluto(-18.7)
18.7

In [ ]:
# Escribir la solución aquí

Problema 2

Definir una función es_divisible_entre_siete(x) que imprima si un número es o no es divisible entre 7. La función debe imprimir resultados como los siguientes:

es_divisible_entre_siete(12)
'12 no es divisible entre 7'
es_divisible_entre_siete(14)
'14 es divisible entre 7'
es_divisible_entre_siete(32)
'32 no es divisible entre 7'
es_divisible_entre_siete(21)
'21 es divisible entre 7'

Nota:

Utilizar el operador módulo (%) para decidir si un número es múltiplo de otro. Este operador retorna el residuo de la división entre dos números. Por tanto, si un número divide exactamente a otro, retorna 0, sino retorna cualquier otro número. Veamos algunos ejemplos:

12%4
0
12%6
0
12%5
2
25%5
0
25%6
1

In [ ]:
# Escribir la solución aquí

Problema 3

Generalizar la función anterior como una nueva función llamada es_divisible_entre_n(x, n) que tome dos números enteros e imprima si el primero es divisible entre el segundo, así: (Tomado de Aprenda a pensar como un programador con Python)

es_divisible_entre_n(20, 4)
'20 es divisible entre 4'
es_divisible_entre_n(36, 5)
'36 no es divisible entre 5'

Problema 4

Definir una función agregar_nuevo(li, x) que reciba una lista y un elemento, y retorne una nueva lista en la que esté añadido el elemento, pero sólo si éste no hace parte de la lista original (Tomado de Introducción a Mathematica del Prof. Jurgen Tischer).

Por ejemplo, algunos resultados de esta función son:

agregar_nuevo([3,9,6], 11)
[3, 9, 6, 11]
agregar_nuevo([3,9,6], 9)
[3, 9, 6]

El ciclo for

En Python for se utiliza para moverse (o iterar) entre los elementos de una secuencia de datos. Su sintaxis es más sencilla que la usada en C o C++, porque en lugar de utilizar un contador cuyo valor va aumentando o disminuyendo durante el ciclo, se toma una secuencia completa (i.e. una lista, una tupla, o una cadena), y se recorren sus elementos en el orden en que aparecen en ella.

Observemos algunos ejemplos:


In [ ]:
for x in [3, 9, 12, 4]:
    print(x)

In [ ]:
prefijos = "JKLMNOPQ"
sufijo = "ack"
for letra in prefijos:
    print(letra + sufijo)

In [ ]:
for i in range(10):
    print(i**2)

range es un comando que se utiliza muy a menudo junto a los ciclos for, pues sirve para generar una lista con todos los números desde 0 hasta cierto valor. También puede usarse con dos valores, uno como límite inferior y el otro como límite superior, así:

Nota:

En Python 3 range genera un objeto de tipo range en lugar de una lista, por razones de eficiencia. Por ello hay que convertirlo a una lista para observar lo que contiene.


In [ ]:
list(range(10))

range no sólo acepta un único argumento. Al evaluarlo con dos argumentos, genera una lista desde el valor inicial, hasta uno antes del valor final


In [ ]:
list(range(1, 20))

Y con un tercer argumento, range genera una lista con valores espaciados según el tercer argumento


In [ ]:
list(range(7, 25, 3))

Dado que no es fácil recordar como funciona range, su ayuda puede consultarse interactivamente al evaluar su nombre, seguido de ?, así:


In [ ]:
range?

Problemas

Problema 5

Construir un ciclo for que imprima todos los números pares de 1 a 100.


In [ ]:
# Escribir la solución aquí

El ciclo while

Finalmente vamos a mirar la sintaxis del comando while, que si bien no es tan usado como los dos anteriores, es muy útil porque permite recorrer los elementos de una lista, tupla o cadena por medio de su índice. Esto es algo que no puede hacerse con mucha naturalidad con for, que está ideado para recorrer los elementos directamente, sin tener que preocuparse por sus posiciones.

Además, con while no es necesario definir un límite superior para realizar un ciclo, como si hay que hacerlo con for.

Miremos un par de ejemplos:

(1) En este primer ejemplo, imprimimos la lista de todos los elementos de una lista li, pero seleccionándolos de li por medio de su índice.


In [ ]:
li = [3, 6, 9, 11]
i = 0
while i < 4:
    print(li[i])
    i += 1

(2) En este ejemplo vamos a imprimir los 20 primeros números que son divisibles entre 4.


In [ ]:
def es_divisible_entre_n(x, n):
    if (x%n) == 0:
        return True
    else:
        return False
i = 1
j = 1
while i <= 20:
    if es_divisible_entre_n(j, 4):
        print(i,j)
        i += 1
    j += 1

En este caso vemos cómo usar dos contadores en el ciclo, uno (i) para poder detenerlo cuando se haya obtenido el veinteavo número divisible entre 4, y otro (j) para movernos entre los números mayores a 1 y revisar cuáles de ellos son divisibles entre 4.

Problemas

Problema 5

Definir una función cuenta_atras(n) que tome un número entero n e imprima todos los números desde n hasta 1 usando un ciclo while. Además, después de imprimir 1, debe imprimir Este es el fin!.


In [ ]:
# Escribir la solución aquí

Problema 6

Dada la siguiente cadena:

s = "jhkdaskduwqludhlasdklashdihlasdhljakhuekysbvjkasdhlasdkhlashkdedlahskdlkbasmndkm"

Imprimir en qué posiciones se encuentra la letra k, usando un ciclo while.

Respuesta:

2, 6, 19, 35, 39, 45, 54, 60, 68, 71, 78

In [ ]:
# Escribir la solución aquí

Problema 7

Usar la función digitos, definida en el Problema 3. de la sección anterior, para encontrar el primer número de 4 cifras que sea divisible entre 8 y cuya primera y última cifras sean iguales.

Respuesta:

2032

Nota:

Definir dos contadores: uno que empiece en 1000 para ir revisando todos los números de 4 cifras, y otro para detener el ciclo while tan pronto se encuentre el primer número que cumpla la condición deseada.


In [ ]:
# Escribir la solución aquí

El material de este notebook fue recopilado para Clubes de Ciencia Colombia 2017 por Luis Henry Quiroga (GitHub: lhquirogan) - Germán Chaparro (GitHub: saint-germain), y fue adaptado de https://github.com/PythonBootcampUniandes