Logo Studenta

[APUNTES] UBA - CBC - Pensamiento Computacional

¡Este material tiene más páginas!

Vista previa del material en texto

UBA - CBC - Pensamiento
Computacional
Cátedra: Camejo.
Profesores: -
Días de cursada: Asincrónico.
Aula: -
Comisión: Sede Central UBA XXI (Ciudad
de Buenos Aires)
Definiciones
Algoritmos
Manejo de errores
Tablas
“Aprender a programar o pensar como un programador no sólo implica conocer
ciertos modelos, herramientas y técnicas, también es importante aprender a hablar
como ellos.”
Definiciones
● Computadora: dispositivo físico de procesamiento de datos con propósito
general. Es capaz de procesar datos y obtener nueva información o
resultados.
● Software: conjunto de herramientas abstractas (programas). Se lo llama
como el componente lógico de un modelo computacional. Es lo que puedes
ver pero no tocar.
● Hardware: es el componente físico del dispositivo. Es decir que, el Software
dirá qué hacer y el Hardware lo hará. Es lo que puedes ver y tocar.
● Modelo de Von Neumann:modelo de arquitectura de una Computadora que
consta de tres componentes o subsistemas a través de los cuales fluye la
información de una manera determinada.
○ Entrada - Salida (E/S): es donde la información entra y sale. Es el
primer y último paso del modelo.
○ Memoria Interna (MI): es donde se alojan los datos, incluyendo los
programas y los datos temporales que se generen.
○ Unidad Central de Proceso (UCP): es quien realiza todas las
transformaciones de datos, es decir, el proceso en sí.
● Modelo de Funcionamiento de Programa Almacenado: es el concepto que
implica que para poder ser ejecutado un programa debe ser cargado
previamente en la memoria interna (MI).
● Sistema Operativo (SO): programa encargado de la administración de los
recursos y la solución a la disputa entre solicitudes de diferentes procesos.
Administra el equipo y responde a los programas que piden servicios.
Ejemplos de SOs sonWindows, Linux,macOS, Android, iOS, Fuchsia,
ChromeOS, TempleOS, etc..
● Programa: es un Algoritmo escrito en un Lenguaje de Programación. También
se lo puede describir como la suma de algoritmos (A) y datos (D) tal que P =
A + D.
● Dato: en el mundo de las Tecnologías de la Información, un dato es una
representación simbólica ya sea numérica o alfabética, cuyo valor está listo
para ser procesado por un ordenador y mostrarlo a un usuario en modo de
información.
● Algoritmo: serie finita de pasos precisos para alcanzar un objetivo.
● Lenguaje: es un protocolo de comunicación.
● Compilación: técnica de traducción de lenguaje el cual consiste en traducir
completamente un programa y sólo entonces puede ser ejecutado.
● Interpretación: técnica de traducción de lenguaje el cual consiste en traducir
sentencia a sentencia a medida que se solicita su ejecución.
● Programa fuente: es un archivo de instrucciones escrito en un lenguaje de
alto nivel. Se denominan así debido a que desde allí parten los traductores
para generar una versión ejecutable. Generalmente se pueden editar con
cualquier editor, por muy básico que sea.
● Multi paradigma: un lenguaje con esta característica es equivalente a decir
que puedes construir programas con distintos enfoques o modelos de
resolución de problemas usando el mismo lenguaje.
● Multiplataforma: un lenguaje capaz de ser ejecutado en distintos sistemas
operativos.
● Flujo de control de un programa (FCP): la secuencia en que las sentencias se
ejecutan (la ejecución de la primera a la última línea, una por una, es un Flujo
de Control Estándar en Python).
● Invocar: usar (ej: invocar una función = usar una función).
● Cuerpo de la función: las líneas que indican qué va a hacer una función.
● Sentencias estructuradas: sentencias que tienen una o varias líneas de
encabezado.
● Ámbito de la función: la memoria que dispone una función para ser ejecutada
(con sus sentencias, datos y resultados).
● Ciclos: cantidad constante de repeticiones. Sus componentes son la
invariante y el cuerpo.
○ Invariante: es la parte de la sentencia que permite decidir si se
ejecutará el Cuerpo de ese Bucle una vez más o se abandonará el
mismo para proseguir con la sentencia siguiente al Ciclo.
Normalmente se escribe como una condición válida.
○ Cuerpo: es la parte del Bucle que se ejecutará repetidamente hasta
que la evaluación de la Condición o Invariante diga lo contrario.
● Aspectos relevantes del bucle:
○ Cuerpo: Bloque de sentencias que se ejecuta por vuelta.
○ Condición o Invariante: Puerta de entrada/salida al Ciclo.
○ Estado Previo: Valores de las variables de la Condición antes del Bucle.
○ Paso: Posibilidad de cambio de valor en alguna de las variables de la
Condición.
● Secuencias (type sequence): en Python es un grupo de elementos con una
organización interna; que se alojan de manera contigua en la memoria.
● String: es una Subclase de secuencia que sólo admite caracteres como
elementos.
● Tuplas (type tuple): son una secuencia inmutable y heterogénea de objetos
que pueden ser de cualquier tipo, a diferencia de las string que sólo pueden
tener caracteres.
● Listas (type list): son una secuencia genérica heterogénea mutable.
● Diccionario (type dict): es una Estructura que permite mapear un valor (clave)
con un grupo de datos.
● Estructuras de Datos persistentes: (perduran más allá de la vida de quien las
genera) se conocen genéricamente como archivos. Un archivo debe
guardarse en algún dispositivo que administre datos no volátiles (es decir, no
desaparecen cuando se apaga el equipo).
●
Algoritmos
La creación de un algoritmo, para programadores, habitualmente consiste en los
siguientes pasos:
1. Análisis del problema.
2. Primer esbozo de solución.
3. División del problema en partes.
4. Ensamble de las partes.
Manejo de errores
Cuando de Sistemas y Programas hablamos:
● El ingreso de datos es uno de los puntos de mayor frecuencia de errores.
● El ingreso de datos es el lugar más económico donde se pueden detectar y
salvar errores.
Para intentar disminuir la tasa de errores en el ingreso podemos:
● Simplificar el formato de los datos o adaptarlos a sistemas de lectura
automática (códigos de barra, QR, etc.).
● Validar los ingresos.
A la hora de testear algo, como cuando se usa un while loop, hay que utilizar como
condición un ingreso inválido para que ofrecerle al usuario cuantas oportunidades
sean necesarias para que ingrese un dato válido. Un ejemplo sería:
par = int(input('Ingresá un número par: '))
while par < 0 or par % 2 != 0: # También te serviría la condición
# par < 0 or par % 2.
par = int(input('Ingresá un número par: '))
print('Tu número es',par)
Una ejecución ejemplo podría ser:
Ingresá un número par: 11
Ingresá un número par: 8
Tu número es 8
>>>
Hay otros casos donde el usuario puede ingresar un tipo inválido de dato, como un
string en vez de un int. Estas situaciones podrían causar errores fatales en el
programa, por lo que también se recomienda validar ante estas situaciones. Una
forma de manejar elegantemente esta situación sería aceptar el ingreso como
string, validar que el ingreso sea compatible con un número y recién castear:
# Solicita el ingreso de un string (aunque se espera un número).
num = input('Ingresá un número: ')
# ¿Es compatible con un número?
# Si no es así, vuelve a pedirle un número al usuario.
while not num.isnumeric():
num = input('Ingresá un número: ')
# Si es compatible con un número, imprímelo junto a un mensaje.
print('Tu número es',int(num))
Miremos una probable ejecución:
Ingresá un número: cxc
Ingresá un número: 3.66
Ingresá un número: 22
Tu número es 22
>>>
Disponemos de la sentencia estructurada try/except que funciona básicamente
intentando realizar una acción (con try, intento con recaudos) y si tiene éxito, el
programa prosigue relajadamente, sin embargo, si en el intento emerge un error, la
sentencia lo captura y lo trata de una manera conveniente en la cláusula except. La
sintaxis es:
try:
<código a probar>
except:
<código a ejecutar si hay un error>
Un ejemplo de uso sería:
sigue = True
while sigue:
try:
num = int(input('Ingresá un número entero: '))
sigue = False
except:
print('Debe ser un númeroentero')
print('Tu número es',num)
Una ejecución posible sería:
Ingresá un número entero: hola
Debe ser un número entero
Ingresá un número entero: 1.33
Debe ser un número entero
Ingresá un número entero: -77
Tu número es -77
>>>
Nota: Los errores deben escribirse exactamente como los identifica Python. En el ejemplo,
el Código de error que pretendemos capturar es: ValueError. Debe anotarse tal cual.
sigue = True
while sigue:
try:
num = int(input('Ingresá un número entero: '))
sigue = False
except ValueError:
print('Debe ser un número entero')
print('Tu número es',num)
En este caso la excepción se activará únicamente si el error que se produce es de
ese tipo.
Tablas
Tipo de dato Ejemplos
entero (int) 1, 2, 3, 4…
real (float) 0.55, 0.23897, 2.569, 0.0, -2.4…
complejo (complex) (10,9j) la componente con j del par indica la
parte imaginaria
lógico (bool) true, false
texto (str) “¡Hola mundo!”
Operadores aritméticos
Símbolo(s) Nombre Ejemplo(s)
+ Suma 10 + 10 = 20
- Resta 10 - 5 = 5
* Multiplicación 5 * 2 = 10
/ División con precisión decimal 10 / 3 = 3.33
// División entera 10 / 3 = 3
% Resto 10 % 3 = 1 || 10 % 4 = 2
+= Suma abreviada, agrega 10 += 10→ 20
-= Resta abreviada, quita 10 -=5→ 5
*= Multiplicación abreviada 5 *=2→ 10
/= División abreviada 10 /=3→ 3.33
//= División entera abreviada 10 //= 3→ 3
%= Resto abreviado 10 %= 3→ 1 || 10 %= 4→ 2
Operadores de texto
Símbolo(s) Nombre Ejemplo
+ Concatenación ‘Hola, ‘ + ‘Juan.’→ ‘Hola Juan.’
* Repetición ‘ja’*3→ ‘jajaja’
[k] o [-k] Selección de carácter ‘Hola’[0]→ ‘H’
[i:j:p] Selección de texto ‘Hola’[0:2]→ ‘Hol’
+= Concatenación abreviada ‘Hola’ += ' y chau.'→ ‘Hola y chau.’
*= Repetición abreviada ‘Hola’ *= 2→ ‘HolaHola’
>, <, >=, <=, !=,
==
Comparación de textos 1 > 2→ False
400 != 399→ True
len(s) Devuelve la longitud de la
secuencia
len([1, 2, 3, 4])→ 3
min(s) Devuelve el mínimo elemento de
“s”.
min([10, 50, 100, 5, 20, -2])→ -2
max(s) Devuelve el máximo elemento de
“s”.
max([10, 50, 100, 5, 20, -2])→ 100
sorted(s) Devuelve “s” ordenada en forma de
lista.
sorted([10, 50, 100, 5, 20, -2])→
[-2, 5, 10, 20, 50, 100]
reversed(s) Devuelve “s” invertida. reversed([10, 50, 100, 5, 20, -5])
[100, 50, 20, 10, 5, -2]
s.count(eleme Devuelve la cantidad de veces que “Hello world!”.count(“o”)→ 2
nto|substring[,
desde[,hasta]])
aparece el elemento|substring en la
secuencia “s”.
s.index(eleme
nto|substring[,
desde[,hasta]])
Devuelve la posición de la primera
ocurrencia elemento o del
comienzo de substring en “s”.
“Hello world!”.index(“o”)→ 4
Operadores lógicos
Símbolo Nombre Ejemplo
and Conjunción isOver5 and isOdd
or Disyunción isOver2 or isEven
not Negación not isPositive
== Igual 1 == 2/2→ True
!= Distinto 1 != 2→ True
< Menor 1 < 2→ True
<= Menor o igual 2 <= 2→ True
> Mayor 1 > 2→ False
>= Mayor o igual 1 >= 2→ False
in Pertenece 4 in evenNumbers→ True
not in No pertenece 3 not in evenNumbers→ True
Métodos de una lista
Nombre Descripción Ejemplo
lista.copy() Copia la lista original en una variable distinta. a = [1, 2, 3]
b = a.copy()
print(b)→ [1, 2, 3]
lista.append(valor). Agrega el elemento valor al final de “lista”. [1, 2, 3].append(4)
[1, 2, 3, 4]
lista.insert(p, v) Inserta el elemento “v” en la posición “p”. [1, 2, 3, 5].insert(3, 4)
[1, 2, 3, 4, 5]
lista.remove(valor) Quita de la lista el elemento “valor”. [1, 2, 3, 4, 5].remove(4)
[1, 2, 3, 5]
lista.pop([índice]) Quita de “lista” el elemento de la posición
“índice”. Si no se usa este parámetro, quita el
último elemento.
[1, 2, 3, 4, 5].pop()
[1, 2, 3, 4]
[1, 2, 3, 4, 5].pop(3)
[1, 2, 3, 5]
lista.extend(otraLista) Agrega “otraLista” al final de “lista”. a = [1, 2, 3]
b = [“a”, “b”, “c”]
a.extend(b)
[1, 2, 3, “a”, “b”, “c”]
lista.sort([reverse=Tru
e][,key=función])
Ordena la lista. Si se emplea el parámetro
“reverse”, en orden descendente, si se usa
“key”, con criterio de ordenamiento “función”.
[1, 3, 2].sort()→
[1, 2, 3]
[1, 2,
3].sort(reverse=True)→
[3, 2, 1]
lista.reverse() Invierte el orden de la lista (el primero pasa a
ser último).
[1, 2, 3].reverse→
[3, 2, 1]
lista.count(valor) Cuenta la cantidad de apariciones de valor
en la lista.
[1, 0, 1, 1, 0, 1].count(1)
→ 4
lista.index(valor) Devuelve la posición de la primera aparición
de valor en la lista.
[“H”, “e”, “l”, “l”,
“o”].index(“l”)→ 2
Métodos de una cadena (string)
Nombre Descripción Ejemplo
s.capitalize() Devuelve una copia del string
con la primera letra en
mayúscula y el resto en
minúscula.
‘hello world’→ ‘Hello world’
s.center(ancho[,relleno]) String centrado con ese
relleno a los costados.
‘hello world’.center(3, ‘a’)→
‘aaahello worldaaa’
s.find(substring[,from[,to]]) Devuelve la primera posición
de comienzo del substring en
s.
‘hello world’.substring(‘e’, ‘r’)→
‘ello wor’
s.rfind(substring[,from[,to]]) Devuelve la última posición de
comienzo del substring en s.
s.format(args, *) Devuelve s formateada texto = "Bienvenido a mi
sustituyendo dinámicamente
un texto.
aplicación{0}"
print(texto.format(" en
Python"))
Retorna: “Bienvenido a mi
aplicación en Python”
texto = "Bruto: ${bruto} +
IVA: ${iva} = Neto:
${neto}"
print(texto.format(bruto =
100, iva = 21, neto = 121))
Retorna: “Bruto: $100 + IVA:
$21 = Neto: $121”
s.join(iterable) Arma una string uniendo los
elementos de iterable e
intercalándolos con s.
tup = (‘a’, ’b’, ’c’)
print(‘-‘.join(tup))
Retorna: a-b-c
s.rindex(substring[,from[,to]]) idem a s.rfind
s.ljust(ancho[,relleno]) Justifica hacia la izquierda.
s.rjust(ancho[,relleno]) Justifica hacia la derecha.
s.lower() Devuelve s en minúsculas.
s.upper() Devuelve s en mayúsculas.
s.maketrans(x[,y[,z]]) Asocia en un diccionario los
correspondientes caracteres
de las cadenas x e y.
vocales = "aeiou"
numeros = "12345" 12
texto = "murcielagos"
print(texto.maketrans(vocal
es, numeros))
Retorna:
{97: 49, 111: 52, 117: 53,
101: 50, 105: 51}
s.translate(pares) Devuelve s con los caracteres
asociados en el diccionario
pares reemplazados.
vocales = "aeiou"
acentos = "áéíóú"
texto = "murcielagos"
parejas =
texto.maketrans(vocales,
acentos)
print(texto.translate(parej
as)
Retorna: múrcíélágós
s.replace(antes,ahora[,cantida
d])
Reemplaza el substring de
antes por el de ahora.
s.strip() Elimina los espacios del inicio
y fin del string.
s.lstrip() Elimina los espacios del inicio.
s.rstrip() Elimina los espacios del final.
s.swapcase() Devuelve s con las
mayúsculas convertidas en
minúsculas y viceversa.
“Hello World”.swapcase()→
“hELLO wORLD”
s.split([separador[,maximaDivi
sion]])
Devuelve una lista cuyos
elementos son las partes del
texto separadas por
separador. Si se omite
separador toma blancos.
s.rsplit([separador[,maximaDiv
ision]])
ídem a derecha.
s.startswith(prefijo[,desde[,ha
sta])
Devuelve True si s comienza
con prefijo, si no False.
“Hello”.startswith(“He”)→
True
s.endswith(sufijo[,desde[,hast
a])
Devuelve True si s termina con
sufijo, si no False.
“Hello”.endswith(“lo”)→ True
s.zfill(ancho) Rellena con ceros a la
izquierda hasta el ancho.
s.title() Devuelve s en minúsculas con
cada palabra inicializada en
mayúsculas.
“hello guys we eat meat”→
“Hello Guys We Eat Meat”
s.isnumeric() Devuelve True si s es
numérico, si no False.
1.isnumeric()→ True
“lol”.isnumeric()→ False
s.isalnum() Devuelve True si s es
alfanumérico, si no False.
“abc123”.isalnum()→ True
[“a”, 1, “e”].isalnum()→ False
s.isalpha() Devuelve True si s es
alfabético, si no False.
s.isdecimal() Devuelve True si s tiene sólo
dígitos decimales (0-9), si no
False.
s.isdigit() Devuelve True si s tiene sólo
números (los dígitos
decimales de 0 a 9), si no
False.
2648248376.isdigit()→ True
s.isprintable() Devuelve True si s es un
carácter imprimible, si no
False.
s.isspace() Devuelve True si s es espacio,
si no False.
“ ”.isspace()→ True
“ a “.isspace()→ False
s.istitle() Devuelve True si s es un título,
si no False.
“We jump together”→ False
“We Jump Together”→ True
s.isidentifier() Devuelve True si s es un
nombreválido de objeto, si no
False.
s.isupper() Devuelve True si s está en
mayúsculas, si no False.
“HELLO”→ True
“HELLo”→ False
s.islower() Devuelve True si s está en
minúsculas, si no False.
“hello”→ True
“hellO”→ False
Métodos de un diccionario
Nombre Descripción Ejemplo
d.clear() Elimina todos los elementos de d. foo = {“one”: 1, “two”: 2, “three”: 3}
foo.clear()→ {}
d.pop(clave) Remueve el par clave, valor del
diccionario y devuelve valor. Si la
clave no está da error.
{“Name”: “Tobias”, “Apellido”:
“Alcaraz”}.pop(“Name”)→
{“Apellido”: “Alcaraz”}
(devuelve “Tobias”)
d.popitem() Remueve y devuelve cualquier par
clave, valor. Si d está vacío da
error d.copy() devuelve una copia
de d en otra región de memoria.
{“Name”: “Tobias”, “Apellido”:
“Alcaraz”}.popitem(“Name”)→
{“Apellido”: “Alcaraz”}
(devuelve {“Name”: “Tobias”})
d.fromkeys(secuencia) Crea el diccionario d, tomando las
claves de una secuencia
d.get(clave) devuelve el valor
asociado a clave.
d.items() Crea el diccionario d, tomando las
claves de una secuencia
d.get(clave) devuelve el valor
asociado a clave.
d.keys() Devuelve una lista con las claves
de d.
foo = {
“Nombre”: “Tobias”
“Edad”: 21
“Turno”: “Tarde”
}
foo.keys()→
[“Nombre”, “Edad”, “Turno”]
d.update(b) Agrega los pares clave,valor de b
a d. Si alguna clave existe
actualiza su valor.
Métodos de manejo de archivos
Nombre Descripción Ejemplo
open(nombre[,modo])) No es un método sino una
función; abre un archivo para
leer/editar. Elmodo hará que
varíe lo que pueda hacer el
programador:
● r: lectura.
● r+: lectura/escritura.
● w: sobreescritura (crea
el archivo si no existe).
● a: añadir. Escribe al
final del archivo.
Un tercer argumento llamado
encoding determina la
codificación de grabado del
archivo. Dos ejemplos son
utf+8 o ansi.
foo = open(“foo.txt”, “r+”,
encoding = ”'utf_8”)
close() Cierra el archivo y guarda los
cambios.
foo.close()
.read() Permite leer una determinada
cantidad de bytes, si no se
pone nada, lee hasta el final.
.readline() Lee la siguiente línea
(caracteres hasta el próximo
\n).
.readlines() Permite leer varias líneas, si
no se indica nada, lee todas
las que falten.
.write() Permite escribir en el archivo
lo que se envía como
argumento.
.writelines() Permite escribir varias líneas
en un archivo.
.splitlines() No se menciona en el PDF,
pero devuelve una lista con
cada línea en el documento
sin los \n al utilizar junto con
.read() (a comparación de
utilizar sólamente .readlines(),
el cual te devuelve una lista
con cada línea del documento
pero incluye los saltos de línea
en los elementos de la lista).
foo.txt:
Horacio
Juana
María
bar.py:
bar foo = open(“foo.txt”,
“r+”)
print(foo.readlines())
[“Horacio\n”, “Juana\n”,
“María”]
print(foo.read().splitlin
es())
[“Horacio”, “Juana”,
“María”]

Continuar navegando

Materiales relacionados

Clase 5 Controladores de Flujo 2

SIN SIGLA

User badge image

gonzalrodri22

5 pag.
237 pag.
IntroPython

SIN SIGLA

User badge image

Ryan Presler