Introducción a la programación en Python

clase 1e
Funciones I

conceptos previos

Una función o subrutina es un conjunto de instrucciones de programa que realizan una tarea, encapsuladas como una unidad. Toda función tiene un nombre, y puede ser llamada o invocada durante la ejecución del programa.

Una función puede realizar una acción o serie de acciones, y/o devolver un valor (por ejemplo, imprimir un valor en la pantalla, o calcular el promedio de un conjunto de valores).

Frecuentemente las funciones tienen parámetros de entrada, que controlan su comportamiento y/o proporcionan datos a ser procesados. Cada vez que se llama la función, a esos parámetros se les pueden asignar distintos valores, que son los argumentos con que se llama la función.

nombre(argumento)

Utilizar funciones en un programa tiene varias ventajas, las dos principales son:

  • modularidad: una tarea compleja se puede dividir en una sucesión de tareas más sencillas, cada una realizada por una función; eso facilita tanto la programación como la lectura y el depurado (debugging)
  • reusabilidad: una misma función puede reutilzarse repetidamente, no solo en el mismo programa, sino también en otros programas

En Python, como en la mayoría de los lenguajes de programación, las funciones pueden tener tres orígenes diferentes:

  • proporcionadas por el propio lenguaje (built-in)
  • incorporadas al lenguaje mediante módulos o bibliotecas de funciones
  • definidas por el usuario

Funciones de Python (I)

print()

La función print() imprime en la salida estándar (la pantalla) el valor de la expresión que recibe como argumento.

  • Cuando se escriben expresiones en el intérprete (modo interactivo), el resultado evaluado se envía directamente a la salida estándar (eco).

  • Cuando se ejecuta un programa escrito en Python (modo script), no hay eco, y para imprimir un objeto en la pantalla se utiliza la función print().

In [1]:
print(2)
2
In [2]:
print(2**(1/12))
1.0594630943592953
In [3]:
print("do")
do
In [4]:
print("hola, Python")
hola, Python
In [5]:
la = 440
print(la)
440
In [6]:
print(do)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-02b67413a08e> in <module>
----> 1 print(do)

NameError: name 'do' is not defined

En una llamada a la función print() se pueden concatenar varias expresiones:

In [7]:
la = 440
print("la frecuencia de la es", la, "Hz")
la frecuencia de la es 440 Hz

Por defecto, la separación entre las expresiones es un espacio en blanco, pero se puede definir otro separador.

In [9]:
la = 440
print("la frecuencia de la es", la, "Hz", sep='__')
la frecuencia de la es__440__Hz

El separador puede ser un carácter extendido.

In [10]:
print("1", "12", "123", "1234", sep="\t")
print("2345", "234", "23", "2", sep="\t")
1	12	123	1234
2345	234	23	2

Ejemplo 1.1

Convertir temperatura en grados Fahrenheit a grados Celsius.

In [12]:
temp_fahrenheit = 40
temp_celsius = (temp_fahrenheit-32)*5/9
print(temp_celsius)
4.444444444444445

input()

La función input() se puede usar en un programa para ingresar datos a través de la entrada estándar (el teclado) durante su ejecución.

In [13]:
gusto = input("díganos su sabor preferido de helado: ")
print("entonces, le vamos a regalar un helado de", gusto)
díganos su sabor preferido de helado: chocolate
entonces, le vamos a regalar un helado de chocolate

La función input() siempre devuelve una cadena de caracteres (tipo string).

In [14]:
num = input("ingrese un número: ")
print(num*2)
ingrese un número: 45
4545

int()

La función int devuelve un número entero de tipo int a partir de la expresión que recibe como argumento, si eso es posible.

Se puede decir que tiene polimorfismo, según el tipo del argumento:

  • si es un número, devuelve la parte entera por truncado
  • si es una cadena de caracteres (string), la convierte a un número entero (int).
In [15]:
int(2.34)
Out[15]:
2
In [16]:
int("234")
Out[16]:
234
In [17]:
a = "200"
print(a*2)
print(int(a)*2)
200200
400
In [18]:
a = input("ingrese un número: ")
print(a*2)
print(int(a)*2)
ingrese un número: 45
4545
90

La función int() sólo procesa correctamente cadenas de caracteres que contengan exclusivamente números.
Si la cadena contiene cualquier otro carácter, la función devuelve un error.

In [19]:
int("2")
Out[19]:
2
In [20]:
int("2.5")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-20-91a97d16ed7b> in <module>
----> 1 int("2.5")

ValueError: invalid literal for int() with base 10: '2.5'
In [21]:
int("doscientos")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-21-17e2a59e53d2> in <module>
----> 1 int("doscientos")

ValueError: invalid literal for int() with base 10: 'doscientos'

float()

La función **float()** es similar a int(), pero devuelve un número de coma flotante.

In [22]:
float("2.5")
Out[22]:
2.5
In [23]:
a = input("ingrese un número flotante: ")
print(a*2)
print(float(a)*2)
ingrese un número flotante: 4.7
4.74.7
9.4

La función float() sólo procesa correctamente cadenas de caracteres que contengan números y hasta un punto.
Si la cadena contiene cualquier otro carácter, la función devuelve un error.

Ejemplo 1.1 bis

Convertir una temperatura ingresada en grados Fahrenheit, a grados Celsius.

In [24]:
temp_fahrenheit = input("ingrese la temperatura en grados Fahrenheit: ")
temp_celsius = (int(temp_fahrenheit)-32)*5/9
print("equivalente en grados Celsius: ", temp_celsius)
ingrese la temperatura en grados Fahrenheit: 80
equivalente en grados Celsius:  26.666666666666668

Ejemplo 1.2

A partir de una frecuencia dada, calcular la frecuencia a un número determinado de cents de distancia.

In [26]:
frec_inicial = int(input("ingrese la frecuencia inicial: "))
cents = int(input("ingrese la cantidad de cents: "))
frec_final = frec_inicial*(2**(cents/1200))
print("frecuencia final: ", frec_final)
ingrese la frecuencia inicial: 441.3
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-29f9317ffa27> in <module>
----> 1 frec_inicial = int(input("ingrese la frecuencia inicial: "))
      2 cents = int(input("ingrese la cantidad de cents: "))
      3 frec_final = frec_inicial*(2**(cents/1200))
      4 print("frecuencia final: ", frec_final)

ValueError: invalid literal for int() with base 10: '441.3'