{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ¿Qué es programar?\n", "Un programa de ordenador es una serie de __instrucciones__ que le dicen a la máquina qué tiene que hacer. Las máquinas no entienden nuestro lenguaje, por lo que tenemos que aprender un lenguaje para poder comunicarnos con ellas y darles órdenes. Hay muchísimos lenguajes de programación hoy en día, cada lenguaje se usa para hacer un tipo de programa. Por ejemplo, si quieres hacer una página web puedes usar _HTML_, _CSS_ y _Javascript_, si quieres hacer un programa para consultar una base de datos puedes usar _SQL_. En el caso de __Python__, es un lenguaje usado para muchas cosas: desde hacer cálculos científicos hasta programación web, pasando por robótica, seguridad, ciencia de datos, física y muchísimas cosas más. Además, _Python_ es muy sencillo de entender y programar, ya que simplifica muchas tareas que en otros lenguajes como _C_ son muy tediosas. Por eso, es ideal para entender los conceptos básicos de programación y para iniciarse en este mundillo.\n", "\n", "\n", "# Hola mundo!\n", "Vamos a empezar a programar. El primer programa que se suele hacer en todos los lenguajes de programación es conocido como el _hola mundo_. En otros lenguajes como _C_, tendríamos que hacer varias líneas de código y, después, compilar nuestro programa para poder ejecutarlo, en cambio, en _Python_ lo podemos ejecutar en una sola línea!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PARA EJECUTAR EL CODIGO EN LAS CELDAS DONDE PONE IN [ ], DALE AL SÍMBOLO DE **RUN** EN LA BARRA DE HERRAMIENTAS" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(\"Hola mundo\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora imagina que quieres hacer un programa para saludar a tu amiga _Marta_, ¿cómo lo harías? De primeras, podrías hacer lo siguiente:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "print(\"Hola Marta!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Así, tendríamos un programa para saludar a cualquier Marta del mundo, pero, ¿y si quisiéramos un programa para poder saludar a cualquier persona? Para poder llevar esto a cabo necesitamos introducir un concepto de programación básico: las __variables__.\n", "\n", "# Variables\n", "Una variable en programación describe un lugar donde guardar información, que puede ser diferente en cada ejecución. En nuestro caso, queremos saludar al usuario que ejecute nuestro programa, pero no sabemos su nombre a priori y no lo sabremos hasta la ejecución, por tanto, necesitamos reservar un espacio para poder guardar ahí el nombre del usuario durante la ejecución de nuestro programa.\n", "\n", "Hay muchos tipos de variables: \n", "\n", "* números enteros (`int`)\n", "* números reales (`float` o `double`)\n", "* caracteres (`char`) y cadenas de caracteres (`string`)\n", "* booleanos (`bool`), estos últimos sólo pueden tomar dos valores: verdadero (`True`) o falso (`False`).\n", "\n", "En otros lenguajes de programación, como _C_, necesitamos indicar el tipo que tiene cada variable que declaramos. En cambio, en python no es necesario ya que el propio intérprete lo infiere por sí mismo. \n", "\n", "Una vez hemos aprendido el concepto de variable, ya sí podemos hacer nuestro programa para saludar a cualquier persona." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nombre= input(\"Introduce tu nombre\")\n", "print (nombre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Operando con variables\n", "\n", "En Python podemos hacer operaciones sobre las variables que tenemos de forma muy sencilla. A modo de resumen, las principales operaciones en python son:\n", "\n", "| Símbolo | Operación |\n", "|:-------:|:-------------:|\n", "|+ | suma |\n", "|- | resta |\n", "|* | multiplicación|\n", "|/ | división |\n", "\n", "Estos operadores se pueden usar con cualquier tipo de variable, tanto números como letras. A continuación, te muestro varios ejemplos.\n", "\n", "Podemos concatenar dos palabras usando el operador +." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "primerapalabra=\"PY\"\n", "segundapalabra=\"DAY\"\n", "print(primerapalabra+\"-\"+segundapalabra)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También podemos multiplicar una palabra por un número usando el operador *." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "var=input(\"Cómo te llamas?\")\n", "print(var*5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y por último, también podemos hacer operaciones numéricas. En las operaciones numéricas Python respeta el orden de los operadores: primero se realizan las multiplicaciones y divisiones y, después, las sumas y restas. Si queremos cambiar este orden simplemente tenemos que usar paréntesis." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "num2 = 6\n", "operacion1 = num1 + num2 * 2\n", "print(operacion1)\n", "operacion2 = (num1 + num2) * 2\n", "print(operacion2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En el primer caso hemos realizado la operación \n", "\n", "$$5 + (6 * 2) = 5 + 12 = 17$$\n", "\n", "y en el segundo, en cambio\n", "\n", "$$ (5 + 6) * 2 = 11 * 2 = 22$$\n", "\n", "### Ejercicio: \n", "\n", "__Haz un pequeño programa que le pida al usuario introducir dos números ($x_1$ y $x_2$), calcule la siguiente operación y muestre el resultado de la misma ($x$):__\n", "\n", "$$ x = \\frac{20 * x_1 - x_2}{x_2 + 3} $$\n", "\n", "__Si intentas operar con el resultado de la función `input` obtendrás un error que te informa que no se pueden restar dos datos de tipo `str`. Usa la función `int` para convertir los datos introducidos por teclado a datos numéricos.__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x1= input(\"Introduce la variable x1\")\n", "x2= input (\"Introduce la variable x2\")\n", "x1=int(x1)\n", "x2=int(x2)\n", "x=((20*x1)-x2)/(x2+3)\n", "print(\"El resultado es: \", x)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Librería `math`\n", "\n", "Una __librería__ es un conjunto de operaciones relacionadas entre sí, guardadas en una especie de \"paquete\". En este caso, vamos a hablar de la librería `math` que tiene operaciones matemáticas más avanzadas tales como la raíz cuadrada.\n", "\n", "Para poder usar esta librería debemos importarla a nuestro programa. Esto se hace usando la instrucción `import`:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import math as matematicas\n", "x=matematicas.sqrt()\n", "x=int(x)\n", "print(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Usando sólo la instrucción `import` debemos preceder la instrucción que queremos del nombre de la librería. Si este nombre es muy largo, podemos importar la librería usando un alias:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import math as m\n", "\n", "print(m.sqrt(4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora bien, si sólo vamos a usar unas operaciones concretas de una librería, podemos especificar cuáles son y así no tener que usar el nombre de la librería para poder utilizarlas." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from math import sqrt\n", "\n", "print(sqrt(4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esta librería tiene muchas más operaciones que puedes consultar en la [documentación oficial](https://docs.python.org/3/library/math.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Estructuras de control\n", "\n", "Hasta ahora, nuestros programas se basan en una serie de instrucciones que se ejecutan una detrás de otra. Esto limita mucho los programas que podemos hacer, ya que no nos permite controlar el __flujo de ejecución__ (_control flow_) de nuestro programa. A continuación vamos a ver una serie de instrucciones especiales que nos permiten hacer precisamente eso.\n", "\n", "## `if`\n", "\n", "Imagina que estás operando con raíces cuadradas, como sabrás la raíz cuadrada de un número es negativa, y quieres evitar hacer la raíz cuadrada si el número introducido por el usuario es negativo." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "num = int(input(\"Introduce un número: \"))\n", "raiz = sqrt(num)\n", "print (raiz)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "¿Qué podemos hacer para que no ocurra esto? Controlar con un `if` la __condición__ de que el número sea positivo para hacer la raíz cuadrada y avisar al usuario en caso contrario:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "num = int(input(\"Introduce un número: \"))\n", "if num > 0:\n", " raiz = sqrt(num)\n", "else:\n", " print(\"No puedo hacer la raíz de un número negativo!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si quisiéramos controlar una condición más, usaríamos la instrucción `elif`, que en otros lenguajes como C es conocida como `else if`:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "if num > 0:\n", " raiz = sqrt(num)\n", "elif num == 0:\n", " print(\"Para qué quieres saber eso jaja saludos\")\n", "else:\n", " print(\"No puedo hacer la raíz de un número negativo!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejercicio\n", "\n", "__Haz un programa que le pida al usuario un número (de ninjas). Si dicho número es menor que 50 y es par, el programa imprimirá \"puedo con ellos!\", en caso contrario imprimirá \"no me vendría mal una ayudita...\"__\n", "\n", "Nota: para saber si un número es par o no debes usar el operador $\\%$ y para saber si dos condiciones se cuplen a la vez, el operador lógico `and`" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# `while`\n", "\n", "En el ejemplo anterior le decíamos al usuario que no podíamos hacer la raíz negativa de un número pero, ¿cómo haríamos para, en vez de darle este mensaje, volver a pedirle un número una y otra vez hasta que fuese negativo? Necesitamos ejecutar el mismo código hasta que se dé la condición que buscamos: que el usuario introduzca un número positivo.\n", "\n", "Esto podemos hacerlo usando un __bucle `while`__! " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "num = int(input(\"Introduce un número: \"))\n", "\n", "while (num < 0):\n", " num = int(input(\"Introduce un número: \"))\n", "\n", "raiz = sqrt(num)\n", "print(raiz)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejercicio\n", "\n", "__Haz un bucle `while` que imprima todos los números desde el 0 hasta un número que introduzca el usuario. Si el número que introduce es negativo puedes tomar dos decisiones: pedirle que introduzca un número positivo o contar hacia atrás, tú eliges!__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `for`\n", "\n", "En lenguajes de programación como C o Java, un bucle `for` sirve para recorrer una secuencia de números, de la siguiente forma:\n", "\n", "```\n", "for (int i=0; i