Está en la página 1de 10

Pág. 12 Capítulo 2.

El primer contacto

teclado

ratón

pantalla
memoria CPU
discos

impresora

otros

Figura 2.2: Esquema de transferencia de datos en la computadora.

computadora. Aunque las computadoras modernas suelen tener más


de una CPU, en nuestro modelo consideraremos que hay una sola.(1)
Así, imaginamos que lo que escribimos en el teclado no es procesa-
do directamente por la CPU, sino que es traducido adecuadamente y
alojado en la memoria previamente. Tenemos entonces un esquema
como el de la figura 2.2. Los elementos a la izquierda permiten que
la computadora intercambie datos con el exterior (como el teclado
o la pantalla) o los conserve para uso posterior (como el disco), y la
«verdadera acción» está entre la memoria y la CPU.
La CPU toma datos de la memoria, realiza alguna acción con ellos,
y pone en la memoria el resultado de esta acción. Curiosamente, las
instrucciones de la acción a realizar forman parte de los mismos datos.
Aunque las CPU modernas permiten el procesamiento simultáneo,
nosotros pensaremos que las instrucciones se realizan secuencialmente,
es decir, de a una y en un orden preestablecido.
Resumiendo —y muy informalmente— nuestro modelo tiene las
siguientes características:
• hay una única CPU,
• que sólo intercambia datos con la memoria,
• las instrucciones que recibe la CPU forman parte de los datos
(1)
¡y será más que suficiente!
2.2. Bits y bytes Pág. 13

bits

1 0 1 0 1 0 0 1

byte

Figura 2.3: Un byte de 8 bits.

en la memoria,
• la CPU realiza las operaciones secuencialmente.
- El modelo, con pocos cambios, se debe a John von Neumann
(1903–1957).

2.2. Bits y bytes


Podemos pensar que la memoria, en donde se almacenan los datos,
está constituida por muchas cajitas llamadas bits (binary digit o dígito
binario), en cada una de las cuales sólo se puede guardar un 0 o un 1.
Puesto que esta caja es demasiado pequeña para guardar información
más complicada que «sí/no» o «blanco/negro», los bits se agrupan en
cajas un poco más grandes llamadas bytes, generalmente de 8 bits,(2)
en los que pensamos que los bits están alineados y ordenados, puesto
que queremos que 00001111 sea distinto de 11110000. Ver el esquema
en la figura 2.3.

E 2.1. Suponiendo que un byte tenga 8 bits:


a) ¿Cuántas «ristras» distintas de 0 y 1 puede tener?
Sugerencia: hacer la cuenta primero para un byte de 1 bit,
luego para un byte de 2 bits, luego para un byte de 3 bits,...
(2)
Históricamente la cantidad de bits en un byte dependía de la computadora, pero
más recientemente se estandarizó en 8 bits (por ejemplo, IEC 80000-13 de 2008).
Pág. 14 Capítulo 2. El primer contacto

b) Si no importara el orden de los bits que forman el byte, y enton-


ces 00001111, 11110000, 10100101 fueran indistinguibles entre sí,
¿cuántos elementos distintos podría contener un byte?
Sugerencia: si el byte tiene 8 bits puede ser que haya 8 ceros
y ningún uno, o 7 ceros y 1 uno, o... ¡

Para las computadoras más recientes, estas unidades de 8 bits re-


sultan demasiado pequeñas para alimentar a la CPU, por lo que los
bits se agrupan en cajas de, por ejemplo, 32, 64 o 128 bits (usualmente
potencias de 2), siempre conceptualmente alineados y ordenados.
- La palabra dígito viene del latín digitus = dedo, y originalmente
se refería a los números entre 1 y 10 (como la cantidad de dedos
en las manos). El significado fue cambiando con el tiempo y
actualmente según la RAE: un número dígito es aquél que puede
expresarse con un solo guarismo. Así, en la numeración decimal
los dígitos son los enteros entre cero y nueve (ambos incluidos),
mientras que en base 2 los dígitos son 0 y 1.
Más recientemente, entendemos que algo es digital (como las
computadoras o las cámaras fotográficas) cuando trabaja interna-
mente con representaciones binarias, y tiene poco que ver con la
cantidad de dedos en las manos.

2.3. Programas y lenguajes de programación


Un programa es un conjunto de instrucciones para que la compu-
tadora realice determinada tarea. En particular, el sistema operativo
de la computadora es un programa que alimenta constantemente a la
CPU y le indica qué hacer en cada momento. Entre otras cosas le va a
indicar que ejecute o corra nuestro programa, leyendo y ejecutando las
instrucciones que contiene.
Los lenguajes de programación son abstracciones que nos permi-
ten escribir las instrucciones de un programa de modo que sean más
sencillas de entender que ristras de ceros y unos. Las instrucciones
para la máquina se escriben como sentencias —de acuerdo a las reglas
2.3. Programas y lenguajes de programación Pág. 15

éxito
editar probar terminar

error

corregir

Figura 2.4: Esquema del desarrollo de un programa.

del lenguaje— que luego serán traducidas a algo que la CPU pueda
entender, es decir, las famosas ristras de ceros y unos. Las sentencias
que escribimos (en lenguaje humano) forman el programa fuente o
código fuente o simplemente código, para distinguirlo del programa
ejecutable o aplicación que es el que tiene los ceros y unos que entiende
la computadora.
Cuando trabajamos con el lenguaje Python, el programa llamado
(casualmente) python hace la traducción de humano a binario e indica
a la CPU que realice la tarea.
En la mayoría de los casos —aún para gente experimentada—
habrá problemas, por ejemplo por errores de sintaxis (no seguimos las
reglas del lenguaje), o porque al ejecutar el programa los resultados no
son los esperados. Esto da lugar a un ciclo de trabajo esquematizado
en la figura 2.4: editamos, es decir, escribimos las instrucciones del
programa, probamos si funciona, y si hay errores —como será la
mayoría de las veces— habrá que corregirlos y volver a escribir las
instrucciones.
A medida que los programas se van haciendo más largos (ponemos
mayor cantidad de instrucciones) es conveniente tener un mecanismo
que nos ahorre volver a escribir una y otra vez lo mismo. En todos
los lenguajes de programación está la posibilidad de que el programa
traductor (en nuestro caso Python) tome las instrucciones de un archi-
vo que sea fácil de modificar. Generalmente, este archivo se escribe y
modifica con la ayuda de un programa que se llama editor de textos.
Para los que están haciendo las primeras incursiones en progra-
Pág. 16 Capítulo 2. El primer contacto

mación es más sencillo tener un entorno que integre el editor de texto


y la terminal. Afortunadamente, la distribución de Python incluye
uno de estos entornos llamado IDLE (pronunciado áidl), y en el curso
trabajaremos exclusivamente con éste. Así, salvo indicación contraria,
cuando hablemos de la terminal nos estaremos refiriendo a la terminal
de IDLE, y no la de Unix (aunque todo lo que hacemos con IDLE lo
podemos hacer desde la terminal de Unix).
En resumen, en el curso no vamos a trabajar con Python directa-
mente, sino a través de IDLE.

2.4. Python y IDLE


Usaremos la última versión «estable» de Python (3.7 al escribir
estas notas), que puede obtenerse del sitio oficial de Python,(3) donde
hay instalaciones disponibles para los principales sistemas operativos.
La forma de iniciar IDLE depende del sistema operativo y la ins-
talación, pero finalmente debe aparecer la terminal de IDLE con un
cartel similar al siguiente (recortado para no salirse de los márgenes):
Python 3.7.2 ((v3.7.2:9a3ffc0492, Dec 24 2018, 02
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license"
>>>

Es importante verificar que aparezca anunciado


Python 3.7 (o al menos 3.4) en alguna parte:
versiones menores como 2.7 o 2.6 nos darán
dolores de cabeza.

Los signos >>> en la terminal indican que Python está a la espera de


que ingresemos alguna orden. Por ejemplo, ponemos 2 + 2, quedando
(3)
http://www.python.org/download/
2.4. Python y IDLE Pág. 17

>>> 2 + 2
y ahora apretamos la tecla «retorno» (o «intro» o «return» o «enter» o
con un dibujo parecido a , dependiendo del teclado) para obtener
4
>>>
quedando IDLE a la espera de que ingresemos nuevos comandos. En
un rapto de audacia, ingresamos 2 + 3 para ver qué sucede, y seguimos
de este modo ingresando operaciones como en una calculadora.
Si queremos repetir o modificar alguna entrada anterior, podemos
movernos con alt-p (previous o previo) o alt-n (next o siguiente)
donde «alt» indica la tecla modificadora alterna marcada con «alt»,
o bien —dependiendo del sistema y la instalación— con ctrl-p y
ctrl-n, donde «ctrl» es la tecla modificadora control. En todo caso se
pueden mirar las preferencias en el menú de IDLE para ver qué otros
atajos hay o modificarlos a gusto.
Con ctrl-d (fin de datos) cerramos la ventana de la terminal, o
bien podemos salir de IDLE usando el menú correspondiente.

A partir de este momento, suponemos que


sabemos cómo iniciar y salir de IDLE e ingresar
comandos en su terminal.

q
Capítulo 3

Python como calculadora

En este capítulo usamos Python como una calculadora sencilla,


observamos que números enteros y decimales son muy diferentes para
Python, y terminamos ampliando la calculadora básica a una científica
mediante el módulo math.

3.1. Operaciones con números


E 3.1. En la terminal de IDLE ingresar 123 + 45, y comprobar que el
resultado es entero (no tiene punto decimal).
Repetir en cada uno de los siguientes, reemplazando + (adición)
por el operador indicado y ver el tipo de resultado que se obtiene (si
tiene o no coma decimal).
a) - (resta, es decir, calcular 123 - 45),
b) * (multiplicación, en matemáticas «123 × 45»),
45
c) ** (exponenciación, en matemáticas « 123 »)
d) / (división),
e) // (división con cociente entero),
f) % (resto de la división con cociente entero, ¡no confundir con
porcentaje!).
3.1. Operaciones con números Pág. 19

- La guía de estilos de Python sugiere dejar un espacio en blanco


alrededor de los operadores, como en 1 + 2. No es estrictamente
necesario seguir esta regla, y a veces pondremos 1+2 sin espacios
alrededor del operador. Lo que definitivamente no es estéticamen-
te agradable es poner 1 +2, dejando un espacio de un lado pero
no del otro,... ¡sobre gustos hay tanto escrito!
Observar que, excepto el caso de la división 123 / 45, todos los
resultados son enteros (no tienen coma decimal). ¡

E 3.2. Repetir los apartados del ejercicio anterior considerando 12.3 y


4.5 (en vez de, respectivamente, 123 y 45), y ver si los resultados tienen
o no coma decimal.
Observar que el resultado de 12.3 // 4.5 es 2.0 y no 2. ¡

E 3.3. ¿Qué pasa si ponemos cualquiera de las siguientes?


a) 12 / 0 b) 34.5 / 0 c) 67 // 0 ¡

E 3.4. ¿Cuánto es 00 (cero a la cero) según las matemáticas? ¿Y según


Python? ¡

E 3.5. Si tenemos más de una operación, podemos agrupar con parénte-


sis como hacemos en matemáticas. Ejecutar las siguientes instrucciones,
comprobando que los resultados son los esperados.
a) 4 - (3 + 2) b) (4 - 3) + 2 ¡

Cuando no usamos paréntesis, tenemos que tener cuidado con la


precedencia (cuál se aplica primero) de los operadores. Por ejemplo, si
ponemos 2 + 3 × 4, sabemos que tenemos que calcular primero 3 × 4 y
a eso agregarle 2, o sea, « × » tiene mayor precedencia que « + ».
No es claro cómo evaluar 2 − 3 + 4 − 5. Parte del problema es que
el signo « − » se usa tanto para indicar la resta como para indicar el
inverso aditivo de un número. También ayuda a la confusión el que la
suma es conmutativa (2 + 3 = 3 + 2), pero la resta no (2 − 3 ≠ 3 − 2).
Algo similar pasa con la expresión 3⇑4 × 5: no queda claro si nos
referimos a (3⇑4) × 5 o a 3⇑(4 × 5).
Pág. 20 Capítulo 3. Python como calculadora

Ante la ausencia de paréntesis, Python evalúa expresiones como


2 - 3 + 4 - 5 y 3 / 4 * 5 de izquierda a derecha, esto es, como si
hiciera los reemplazos

a − b → a + (−b) y a⇑b → a × b−1

antes de la evaluación.
E 3.6. Conjeturar el valor y luego verificarlo con Python:
a) 2 - 3 + 4 - 5 b) 3 / 4 * 5 / 6 ¡
E 3.7. La expresión de Python -3**-4, ¿es equivalente en matemáticas
a (−3)−4 o a −3−4 ?
¿Cuáles son las precedencias de Python en este caso? ¡
En el curso trataremos de evitar construcciones como la de los
ejercicios anteriores, agregando paréntesis aunque sean redundantes:
MVQSYNQF.(1)
⌋︂ ⌋︂
E 3.8. Desde las matemáticas, ¿es 3 entero?, ¿y 4?
¿De qué tipo son 3**(1/2) y 4**(1/2)? ¡
E 3.9. En un triángulo rectángulo, un cateto mide 12 y el otro 5. Cal-
cular cuánto mide la hipotenusa usando Python. ¡
E 3.10. Compré 4 botellas a $ 100 cada una y 7 a $ 60 cada una.
Resolver con lápiz y papel (o mentalmente) y luego hacer las cuen-
tas con Python:
a) ¿Cuántas botellas compré?
b) ¿Cuánto gasté en total?
c) En promedio, ¿cuál fue el costo por botella? ¡
E 3.11 (Inflación). a) Si la inflación el primer año fue del 22 %, y el
segundo año fue del 25 %, ¿cuánto cuesta ahora un artículo que
dos años atrás costaba $ 100?
(1)
Más vale que sobre y no que falte.
3.1. Operaciones con números Pág. 21

Aclaración: hablamos de un artículo genérico, seguramente


habrá artículos que aumentaron más y otros menos que la
inflación indicada.
b) En el apartado anterior, ¿cuál dirías que fue la inflación anual
promedio de estos dos años?
Aclaración: buscamos un valor r tal que si la inflación anual
hubiese sido constantemente r, en dos años habríamos obteni-
do la misma inflación acumulada que teniendo 22 % y 25 %.
- La media geométrica de los números positivos x 1 , . . . , x n
⌋︂
es n x 1 ⋯x n . Se demuestra que
⌋︂ x1 + ⋅ ⋅ ⋅ + x n
n
x 1 ⋯x n ≤ ,
n
con igualdad si y sólo si x 1 = x 2 = ⋅ ⋅ ⋅ = x n .

c) El kilo de pan hoy me cuesta $ 60 y (exactamente) dos años


atrás me costaba $ 30. ¿Qué estimación podrías dar sobre el
promedio de inflación en cada uno de estos dos años?
d) En determinado año la inflación interanual fue de 36 %, ¿cuál
fue, en promedio, la inflación mensual (ese año)?
e) Si la inflación mensual es de 3 % durante los 12 meses del año,
¿cuál será la inflación anual? ¡

E 3.12. Además de las operaciones entre números, podemos usar algu-


nas funciones como el valor absoluto de x, ⋃︀x⋃︀, que se escribe abs(x)
en Python, o el redondeo de decimal a entero, round(x), que nos da
el entero más próximo a x.
a) Ver qué hace abs poniendo help(abs) y luego repetir para
round.

- Cuando escribimos comandos como help o round en ID-


LE, es posible poner unas pocas letras y completar el co-
mando —o al menos obtener una lista de posibilidades—
introduciendo una tabulación (tecla «tab» o similar).

También podría gustarte