Restructure content and add notes from HolaMundo

Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
2023-05-20 09:36:26 +02:00
parent 64ed03f811
commit f4e9797c4b
430 changed files with 889 additions and 24 deletions

View File

@@ -0,0 +1,24 @@
print("# BUSCAR LA POSICIÓN DE UN CARACTER")
# CON index() PODEMOS ENCONTRAR LA POSICIÓN DE UN CARACTER EN UN STRING
mi_texto = "hola mundo"
posicion = mi_texto.index("o",0,11)
print(f"EJEMPLO: La posición del caracter \"o\" es {posicion}")
# PREGUNTAR LETRA Y DAR POSICIÓN EN FRASE
pregunta_carater = input("PREGUNTA: De qué carater quieres saber la posición: ")
print(f"El carater \"{pregunta_carater}\" está en la posición \"{mi_texto.index(pregunta_carater)}\"")
print("\n# SE PUEDE BUSCAR CON rindex PARA BUSCAR DE DERECHA A IZQUIERDA")
posicion_r = mi_texto.rindex("o")
print(f"EJEMPLO: La posición en búsqueda reversa del caracter \"o\" es {posicion_r}")
print("\n# BUSCAR EL CARACTER DE UNA POSICIÓN")
# SABER LA LETRA DE UNA POSICIÓN
que_carater = mi_texto[3]
print(f"EJEMPLO: El carater en la posición \"3\" del string es la \"{que_carater}\"")
# PREGUNTAR POSICIÓN Y DAR RESULTADO EN FRASE
pregunta_posicion = int(input("PREGUNTA: De que posición quieres saber el caracter: "))
resultado_posicion = mi_texto[pregunta_posicion]
print(f"En la posición \"{pregunta_posicion}\" está el caracter \"{resultado_posicion}\"")

View File

@@ -0,0 +1,32 @@
# DISTINTAS POSIBILIDADES CON Sub-strings. slicing (rebanar)
# Limitando la rebanada
print("# Limitando la rebanada")
texto = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
fragmento01 = texto[2:15]
print(fragmento01)
# Hasta el final
print("# Hasta el final")
fragmento02 = texto[2:]
print(fragmento02)
# Desde el inicio
print("# Desde el inicio")
fragmento03 = texto[:10]
print(fragmento03)
# Con saltos de dos
print("# Con saltos de dos")
fragmento04 = texto[2:15:2]
print(fragmento04)
# Con saltos de tres de prinicipio a fin
print("# Con saltos de tres de prinicipio a fin")
fragmento05 = texto[::3]
print(fragmento05)
# Con saltos de dos desde el final
print("# Con saltos de dos desde el final")
fragmento06 = texto[::-2]
print(fragmento06)

View File

@@ -0,0 +1,53 @@
""" Métodos en strings """
texto = "Este es el texto de Federico"
# Mayúsculas
resultado01 = texto.upper()
print(resultado01)
# Mayúsculas (Podemos determinar un índice)
resultado02 = texto[20].upper()
print(resultado02)
# Mayúsculas
resultado03 = texto.upper()
print(resultado03)
# Split (Separar dentro de una lista)
resultado04 = texto.split()
print(resultado04)
# Split (Separar dentro de una lista) Se puede seleccionar el elemento separador
resultado05 = texto.split(" ")
print(resultado05)
# Join
a = "Aprender"
b = "Python"
c = "es"
d = "genial"
unir = "-".join([a,b,c,d])
print(unir)
# Find
resultado06 = texto.find("F")
print(resultado06)
## La diferencia de find con index es que
## si buscas un carácter que no existe no da error
## arroja el valor -1
resultado07 = texto.find("g")
print(resultado07)
# Reemplazar
resultado08 = texto.replace("Federico", "Manuel")
print(resultado08)
frase = "Si la implementación es difícil de explicar, puede que sea una mala idea."
resultado001 = frase.replace("difícil","fácil")
resultado002 = resultado001.replace("mala","buena")
print(resultado002)

View File

@@ -0,0 +1,55 @@
# Métodos de strings
## Métodos de análisis
print("Hola mundo".count("Hola"))
print("Hola mundo".find("world"))
print("C:/python36/python.exe".rfind("/"))
print("Hola mundo".startswith("Hola"))
print("abc123".isdigit())
print("1234".isnumeric())
print("1234".isdecimal())
print("abc123".isalnum())
print("abc123".isalpha())
print("abcdef".islower())
print("ABCDEF".isupper())
print("Hola mundo".isspace())
print("hola mundo".capitalize())
print("Hola mundo".encode("utf-8"))
print("Hola mundo".replace("mundo", "world"))
print("Hola Mundo!".lower())
print("Hola Mundo!".upper())
print("Hola Mundo!".swapcase())
print(" Hola mundo! ".strip())
print("Hola".center(10, "*"))
print("Hola mundo!\nHello world!".split())
print("Hola mundo!\nHello world!".splitlines())
print("Hola mundo. Hello world!".partition(" "))
print("Hola mundo. Hello world!".rpartition(" "))
print(", ".join(["C", "C++", "Python", "Java"]))

View File

@@ -0,0 +1,37 @@
#INMUTABLE
# Este código intenta cambiar un caracter del string,
# con lo que no permitirá, dará error
# nombre = "Carina"
# nombre[0] = "K"
# print(nombre)
#CONCATENAR
n1 = "Kari"
n2 = "na"
print(n1 + n2)
# MULTIPLICAR
print(n1 * 5)
# MULTILINEA
# Perfecto para poemas
poema = """ Mil pequeños peces blancos
como si hirviera
el color del agua."""
print(poema)
# VERIFICAR contenido. booleano
print("agua" in poema)
# También se puede verificar si NO está
print("escorbuto" not in poema)
# LONGITUD DE STRING
print(len(poema))
print(len("Otro ejemplo"))
print(len("Anticonstitucionalidades"))
print(len("electroencefalografistas"))
print(len("Esternocleidomastoideo"))

View File

@@ -0,0 +1,36 @@
# LAS LISTAS
lista_1 = ["C", "C++", "Python", "Java"]
lista_2 = ["PHP", "SQL", "Visual Basic"]
lista_3 = ["d", "a", "c", "b", "e"]
lista_4 = [5, 4, 7, 1, 9]
# Ver tipo de dato de las listas
print(type(lista_1))
# Concatenar listas
lista_1_2 = lista_1 + lista_2
print(lista_1_2)
# EN LAS LISTAS SE PUEDEN MODIFICAR LOS ELEMENTOS
# Agregar un elemento a la lista
lista_1.append("R")
print(lista_1)
# Eliminar un elemento de la lista con el índice (Devuelve el valor eliminado)
print(lista_1.pop(4))
guardar_elemento = lista_1_2.pop(2)
print(guardar_elemento)
# Ordenar los elementos de la lista
lista_3.sort()
print(lista_3)
# Cuidado que no devuelve nada, modifica la variable
guardar_sort = lista_3.sort()
print(guardar_sort)
# Es de tipo None, un objecto sin valor, que no es lo mismo que 0
print(type(guardar_sort))
# Invierte el orden de los elementos (No es lo opuesto a sort)
lista_4.reverse()
print(lista_4)

View File

@@ -0,0 +1,56 @@
# DICCIONARIOS (No se puede repetir el valor)
mi_diccionario = {"c1":"valor1","c2":"valor2"}
print(type(mi_diccionario))
print(mi_diccionario)
# Guardando un valor
resultado = mi_diccionario['c1']
print(resultado)
# Ejemplo 1
cliente = {
'nombre':'Juan',
'apellido':'Fuentes',
'peso':'88',
'talla':'1760'
}
consulta = (cliente['talla'])
print(consulta)
# Ejemplo 2
paciente ={
"nombre":"Eusebio",
"apellido":"García",
"peso":82.6,
"altura":"172"
}
print(f"El paciente se llama {paciente['nombre']} {paciente['apellido']} pesa {paciente['peso']} kg y mide {paciente['altura']} cm.")
# Diccionarios anidados y listas anidadas
dic = {'c1':55,'c2':[10,20,30],'c3':{'s1':100,'s2':200}}
print(dic['c2'])
print(dic['c2'][1])
print(dic['c3'])
print(dic['c3']['s2'])
# Ejercicio sacar la letra e en mayúscula
diccio = {'c1':['a','b','c'],'c2':['d','e','f']}
print(diccio['c2'][1].upper())
# Cambios en un diccionario
dic2 = {1:'a',2:'b'}
print(dic2)
dic2[3] = 'c'
print(dic2)
dic2[2] = 'B'
print(dic2)
print(dic2.keys())
print(dic2.values())
print(dic2.items())
mi_dic = {"nombre":"Karen", "apellido":"Jurgens", "edad":35, "ocupacion":"Periodista"}
mi_dic['edad'] = 36
mi_dic['ocupacion'] = 'Editora'
mi_dic['pais'] = 'Colombia'
print(mi_dic)

View File

@@ -0,0 +1,33 @@
mi_tuple = (1,2,3,4)
mi_tuple2 = 1,2,(10,20),4
print(type(mi_tuple))
print(mi_tuple2)
print(mi_tuple[2])
print(mi_tuple[-2])
print(mi_tuple2[2][0])
# El tuple se puede convertir en una lista
mi_tuple =list(mi_tuple)
print(type(mi_tuple))
# También al revés, se puede convertir una lista en un tuple
mi_tuple =tuple(mi_tuple)
print(type(mi_tuple))
# Se puede dar cada uno de los valores a una variable distinta
# pero tienen que coincidir la cantidad de valores con las variables
t = 1,2,1
x,y,z = t
print(x, y, z)
# Se puede pedir el número de elementos
print(len(t))
# Se puede contar la cantidad de apareciones de un valor
print(t.count(1))
# También se puede consultar el indice de un valor
print(t.index(2))

View File

@@ -0,0 +1,46 @@
""" Sets """
mi_set = set([1, 2, 3, 4, 5])
print(type(mi_set))
print(mi_set)
# No acepta repeticiones
# No acepta listas
# pero sí tuples porque son inmutables
otro_set = set([1, 2, 3, 4, 5, (1,2,3), 1, 1, 1])
print(otro_set)
print(len(mi_set))
print(2 in mi_set)
# MÉTODOS
# Union
s1 = {1,2,3}
s2 = {3,4,5}
s3 = s1.union(s2)
print(s3)
# Agregar
s1.add(4)
print(s1)
# Eliminar. Si no encuentra el elemento
# da error
s1.remove(3)
print(s1)
# Descartar. Funciona como remove
# pero no da error si no encuentra el elemento
s1.discard(3)
print(s1)
# Elimina un elemento aleatorio
sorteo = s1.pop()
print(sorteo)
print(s1)
# Vaciar el set
s1.clear()
print(s1)

View File

@@ -0,0 +1,23 @@
"""
booleano
"""
# Creación directa del booleano
var1 = True
var2 = False
print(type(var1))
print(var1)
# Creación indirecta del booleano
numero = 5 > 2+3
print(type(numero))
print(numero)
# Creación explícita
compara = bool(5 != 5+1)
print(compara)
lista = (1, 2, 3, 4)
control = 5 not in lista
print(type(control))
print(control)

View File

@@ -0,0 +1,31 @@
"""
Programa día 3 - Analizador de text
"""
txt = input("""
Ingresa un texto para analizar
""")
print("\nIngresa tres letras por favor")
l1 = input("\tIngresa la primera letra: ")
l2 = input("\tIngresa la segunda letra: ")
l3 = input("\tIngresa la tercera letra: ")
letras = [l1, l2, l3]
print("\nPRIMERO. Vamos a ver las veces que aparecen las letras en el texto:")
print(f"\t- La letra {l1} se encuentra {txt.lower().count(letras[0].lower())} veces en el texto.")
print(f"\t- La letra {l2} se encuentra {txt.lower().count(letras[1].lower())} veces en el texto.")
print(f"\t- La letra {l3} se encuentra {txt.lower().count(letras[2].lower())} veces en el texto.")
print(f"\nSEGUNDO. El texto tiene {len(txt.split())} palabras.")
pos_pri = txt[0]
pos_fin = txt[-1]
print(f"\nTERCERO. La primera letra del texto es \"{pos_pri}\" y la última es \"{pos_fin}\"")
print(f"\nCUARTO. Cuidao, el texto al revés es así:\n{' '.join(txt[::-1])}")
ser_o_no_ser = ("python" in txt)
dic_si_o_no = {True:"",False:"no"}
print(f"\nQUINTO. La palabra python {dic_si_o_no[ser_o_no_ser]} se encuentra en el texto")

View File

@@ -0,0 +1,646 @@
# Día 3 - Programa un analizador de texto
Los strings en python tienen incorporados más de 30 métodos que nos permiten manipularlos y analizarlos. Aquí veremos algunos de los más importantes.
## Índice
- [Día 3 - Programa un analizador de texto](#día-3---programa-un-analizador-de-texto)
- [Índice](#índice)
- [3.1. - Index( )](#31---index-)
- [3.2. - Substrings](#32---substrings)
- [3.3. - Métodos para Strings](#33---métodos-para-strings)
- [3.3.1. - Métodos de análisis](#331---métodos-de-análisis)
- [3.3.2. - Métodos de transformación](#332---métodos-de-transformación)
- [3.3.3. - Métodos de separación y unión](#333---métodos-de-separación-y-unión)
- [3.4. - Strings: propiedades](#34---strings-propiedades)
- [3.5. - Listas](#35---listas)
- [3.6. - Diccionarios](#36---diccionarios)
- [3.7. - Tuples](#37---tuples)
- [3.8. - sets](#38---sets)
- [3.8.1. - Métodos set](#381---métodos-set)
- [3.9. - booleanos](#39---booleanos)
- [3.9.1. - operadores lógicos](#391---operadores-lógicos)
- [3.10. - Proyecto del Día 3](#310---proyecto-del-día-3)
- [Ficheros y documentación del día 3](#ficheros-y-documentación-del-día-3)
## 3.1. - Index( )
Cada carácter de los strings tienen una posición en el índice:
![](../img/dia03_01.png)
También podemos utilizar el índice reverso, que también empieza por cero pero luego todos los números están al revés con el signo menor.
![](../img/dia03_02.png)
Utilizamos el método index( ) para explorar strings, ya que permite hallar el índice de aparición de un caracter o cadena de caracteres dentro de un texto dado. Sintaxis:
string.index(value, start, end)
- *string*: variable que almacena un string
- *value*: caracter(es) | buscado(s)
- *start*: las apariciones antes del índice start se ignoran
- *end*: las apariciones luego del índice end se ignoran
Búsqueda en sentido inverso. Sintaxis:
string.rindex(value, start, end)
Devuelve el caracter en el índice i*
string[i]
*: En Python, el índice en primera posición es el 0.
## 3.2. - Substrings
Podemos extraer porciones de texto utilizando las herramientas de manipulación de strings conocidas como slicing (rebanar). Sintaxis:
string[start:stop:step]
- *start*: índice de inicio del sub-string (incluido)
- *stop*: índice del final del sub-string (no incluido)
- *step*: paso
Ejemplos:
![](../img/dia03_03.png)
```python
saludo = H o l a _ M u n d o
print(saludo[2:6])
```
la_M
![](../img/dia03_04.png)
```python
print(saludo[3::3])
```
auo
![](../img/dia03_05.png)
```python
print(saludo[::-1])
```
odnuM_aloH
## 3.3. - Métodos para Strings
### 3.3.1. - Métodos de análisis
**count( ) **: retorna el número de veces que se repite un conjunto de caracteres especificado.
```python
"Hola mundo".count("Hola")
```
1
**find( ) e index( )** retornan la ubicación (comenzando desde el cero) en la que se encuentra el argumento indicado. Difieren en que index lanza ValueError cuando el argumento no es encontrado, mientras find retorna
```python
"Hola mundo".find("world")
```
-1
**rfind( ) y rindex( )**.Para buscar un conjunto de caracteres pero desde el final.
```python
"C:/python36/python.exe".rfind("/")
```
11
**startswith( ) y endswith( )** indican si la cadena en cuestión comienza o termina con el conjunto de caracteres pasados como argumento, y retornan True o False en función de ello.
```python
"Hola mundo".startswith("Hola")
```
True
**isdigit( )**: determina si todos los caracteres de la cadena son dígitos, o
pueden formar números, incluidos aquellos correspondientes a lenguas
orientales.
```python
"abc123".isdigit()
```
False
**isnumeric( )**: determina si todos los caracteres de la cadena son números, incluye también caracteres de connotación numérica que no necesariamente son dígitos (por ejemplo, una fracción).
```python
"1234".isnumeric()
```
True
**isdecimal( )**: determina si todos los caracteres de la cadena son decimales; esto es, formados por dígitos del 0 al 9.
```python
"1234".isdecimal()
```
True
**isalnum( )**: determina si todos los caracteres de la cadena son alfanuméricos.
```python
"abc123".isalnum()
```
True
**isalpha( )**: determina si todos los caracteres de la cadena son alfabéticos.
```python
"abc123".isalpha()
```
False
**islower()**: determina si todos los catacteres de la cadena son minúsculas.
```python
abcdef".islower()
```
True
**isupper()**: determina si todos los catacteres de la cadena son mayúsculas.
```python
"ABCDEF".isupper()
```
True
**isprintable( )**: determina si todos los caracteres de la cadena son imprimibles (es decir, no son caracteres especiales indicados por \...).
```python
"Hola \t mundo!".isprintable()
```
False
**isspace( )**: determina si todos los caracteres de la cadena son espacios.
```python
"Hola mundo".isspace()
```
False
### 3.3.2. - Métodos de transformación
En realidad los strings son inmutables; por ende, todos los métodos a continuación no actúan sobre el objeto original sino que retornan uno nuevo.
**capitalize( )** retorna la cadena con su primera letra en mayúscula.
```python
"hola mundo".capitalize()
```
'Hola mundo'
**encode( )** codifica la cadena con el mapa de caracteres especificado y retorna una instancia del tipo bytes.
```python
"Hola mundo".encode("utf-8")
```
b'Hola mundo'
**replace( )** reemplaza una cadena por otra.
```python
"Hola mundo".replace("mundo", "world")
```
'Hola world'
**lower( )** retorna una copia de la cadena con todas sus letras en minúsculas.
```python
"Hola Mundo!".lower()
```
'hola mundo!'
**upper( )** retorna una copia de la cadena con todas sus letras en mayúsculas.
```python
"Hola Mundo!".upper()
```
'HOLA MUNDO!'
**swapcase( )** cambia las mayúsculas por minúsculas y viceversa.
```python
"Hola Mundo!".swapcase()
```
'hOLA mUNDO!'
**strip( ), lstrip( ) y rstrip( )** remueven los espacios en blanco que preceden y/o suceden a la cadena.
```python
" Hola mundo! ".strip()
```
'Hola mundo!'
Los métodos **center( ), ljust( ) y rjust( )** alinean una cadena en el centro, la izquierda o la derecha. Un segundo argumento indica con qué caracter se deben llenar los espacios vacíos (por defecto un espacio en blanco).
```python
"Hola".center(10, "*")
```
'***Hola***'
### 3.3.3. - Métodos de separación y unión
**split( )** divide una cadena según un caracter separador (por defecto son espacios en blanco). Un segundo argumento en split( ) indica cuál es el máximo de divisiones que puede tener lugar (-1 por defecto para representar una cantidad ilimitada).
```python
"Hola mundo!\nHello world!".split()
```
['Hola', 'mundo!', 'Hello', 'world!']
**splitlines( )** divide una cadena con cada aparición de un salto de línea.
```python
"Hola mundo!\nHello world!".splitlines()
```
['Hola mundo!', 'Hello world!']
**partition( )** retorna una tupla de tres elementos: el bloque de caracteres anterior a la primera ocurrencia del separador, el separador mismo, y el bloque posterior.
```python
"Hola mundo. Hello world!".partition(" ")
```
('Hola', ' ', 'mundo. Hello world!')
**rpartition( )** opera del mismo modo que el anterior, pero partiendo de derecha a izquierda.
```python
"Hola mundo. Hello world!".rpartition(" ")
```
('Hola mundo. Hello', ' ', 'world!')
**join( )** debe ser llamado desde una cadena que actúa como separador para unir dentro de una misma cadena resultante los elementos de una lista.
```python
", ".join(["C", "C++", "Python", "Java"])
```
'C, C++, Python, Java
## 3.4. - Strings: propiedades
Esto es lo que debes tener presente al trabajar con strings en Python:
- **Son inmutables**: una vez creados, no pueden modificarse sus partes, pero sí pueden reasignarse los valores de las variables a través de métodos de strings.
Las variables varian, pero los string son inmutables.
![](../img/dia03_06.png)
- **Concatenable**: es posible unir strings con el símbolo +
- **Multiplicable**: es posible concatenar repeticiones de un string con el símbolo *
![](../img/dia03_07.png)
- **Multilineales**: pueden escribirse en varias líneas al encerrarse entre triples comillas simples (''' ''') o dobles (""" """)
![](../img/dia03_08.png)
- **Determinar su longitud**: a través de la función len(mi_string)
![](../img/dia03_09.png)
- **Verificar su contenido**: a través de las palabras clave in y not in. El resultado de esta verificación es un booleano (True / False).
![](../img/dia03_10.png)
## 3.5. - Listas
Se pueden anidar listas. Se puede analizar y manipularlas, son mutables.
Una lista es de tipo `<class 'list'>`. Se pueden añadir tanto elementos str, int... todos juntos sin conflictos.
Igual que los strings, se puede seleccionar los elementos por su índice como un array:
```python
mi_lista[0:]
```
Se pueden concatenar las listas.
```python
lista_1 = ["C", "C++", "Python", "Java"]
lista_2 = ["PHP", "SQL", "Visual Basic"]
lista_3 = ["d", "a", "c", "b", "e"]
lista_4 = [5, 4, 7, 1, 9]
```
**función append( )**: agrega un elemento a una lista en el lugar
```python
lista_1.append("R")
print(lista_1)
```
["C", "C++", "Python", "Java", "R"]
**función pop( )**: elimina un elemento de la lista dado el índice, y devuelve el valor quitado
```python
print(lista_1.pop(4))
```
"R"
**función sort( )**: ordena los elementos de la lista en el lugar
```python
lista_3.sort()
print(lista_3)
```
['a', 'b', 'c', 'd', 'e']
**función reverse( )**: invierte el orden de los elementos en el lugar. *
```python
lista_4.reverse()
print(lista_4)
```
[9, 1, 7, 4, 5]
## 3.6. - Diccionarios
Los diccionarios son estructuras de datos que almacenan información en pares **clave:valor**. Son especialmente útiles para guardar y recuperar información a partir de los nombres de sus claves (no utilizan índices).
> mutable ✅ ordenado ❌* admite duplicados❌:✅
```python
mi_diccionario = {"curso":"Python TOTAL","clase":"Diccionarios"}
```
Agregar nuevos datos, o modificarlos:
```python
mi_diccionario["recursos"] = ["notas","ejercicios"]
```
Acceso a valores a través del nombre de las claves
```python
print(mi_diccionario["recursos"][1])
```
"ejercicios"
Métodos para listar los nombres de:
| Método | Descripción |
| :-------: | :-------------------- |
| keys( ) | las claves |
| values( ) | los valores |
| items( ) | los pares clave:valor |
*: A partir de Python 3.7+, los diccionarios son tipos de datos ordenados, en el sentido que dicho orden se mantiene según su orden de inserción para aumentar la eficiencia en el uso de la memoria.
Cuidado, las claves no se pueden repetir.
## 3.7. - Tuples
Los tuples o tuplas, son estructuras de datos que almacenan múltiples elementos en una única variable. Se caracterizan por ser ordenadas e inmutables. Esta característica las hace más eficientes en memoria y a prueba de daños, se procesan más rápido. Si se intentan cambiar devolverá un error.
> Mutable ❌ ordenado ✅ admite duplicados ✅
```python
mi_tuple = (1, "dos", [3.33, "cuatro"], (5.0, 6))
```
**indexado** (acceso a datos)
```python
print(mi_tuple[3][0])
```
5.0
**casting** (conversión de tipos de datos)
```python
lista_1 = list(mi_tuple)
print(lista_1)
```
[1, "dos", [3.33, "cuatro"], (5.0, 6)] # ahora es una estructura mutable
**unpacking** (extracción de datos)
```python
a, b, c, d = mi_tuple
print(c)
```
[3.33, "cuatro"]
## 3.8. - sets
Los sets son otro tipo de estructuras de datos. Se diferencian de listas, tuplas y diccionarios porque son una colección mutable de elementos inmutables, no ordenados y sin datos repetidos.
> mutable ✅ ordenado ❌ admite duplicados ❌
```python
mi_set_a = {1, 2, "tres"}
mi_set_b = {3, "tres"}
```
### 3.8.1. - Métodos set
```python
mi_set_a = {1, 2, "tres"}
mi_set_b = {3, "tres"}
```
**add(item)** agrega un elemento al set
```python
mi_set_a.add(5)
print(mi_set_a)
```
{1, 2, "tres", 5}
**clear( )** remueve todos los elementos de un set
```python
mi_set_a.clear()
print(mi_set_a)
```
set()
**copy( )** retorna una copia del set
```python
mi_set_c = mi_set_a.copy()
print(mi_set_c)
```
{1, 2, "tres"}
**difference(set)** retorna el set formado por todos los elementos que únicamente existen en el set A
```python
mi_set_c = mi_set_a.difference(mi_set_b)
print(mi_set_c)
```
{1, 2}
![](../img/dia03_11.png)
**difference_update(set)** remueve de A todos los elementos comunes a AyB
```python
mi_set_a.difference_update(mi_set_b)
print(mi_set_a)
```
{1, 2}
![](../img/dia03_12.png)
**discard(item)** remueve un elemento del set
```python
mi_set_a.discard("tres")
print(mi_set_a)
```
{1, 2}
**intersection(set)** retorna el set formado por todos los elementos que existen en A y B simultáneamente.
```python
mi_set_c = mi_set_a.intersection(mi_set_b)
print(mi_set_c)
```
{'tres'}
![](../img/dia03_13.png)
**intersection_update(set)** mantiene únicamente los elementos comunes a A y B
```python
mi_set_b.intersection_update(mi_set_a)
print(mi_set_b)
```
{"tres"}
![](../img/dia03_14.png)
**isdisjoint(set)** devuelve True si A y B no tienen elementos en común
```python
conjunto_disjunto = mi_set_a.isdisjoint(mi_set_b)
print(conjunto_disjunto)
```
False
![](../img/dia03_15.png)
**issubset(set)** devuelve True si todos los elementos de B están presentes en A
```python
es_subset = mi_set_b.issubset(mi_set_a)
print(es_subset)
```
False
![](../img/dia03_16.png)
**issuperset(set)** devuelve True si A contiene todos los elementos de B
```python
es_superset = mi_set_a.issuperset(mi_set_b)
print(es_superset)
```
False
![](../img/dia03_17.png)
**pop( )** elimina y retorna un elemento al azar del set
```python
aleatorio = mi_set_a.pop()
print(aleatorio)
```
{2}
**remove(item)** elimina un item del set, y arroja error si no existe
```python
mi_set_a.remove("tres")
print(mi_set_a)
```
{1, 2}
**symmetric_difference(set)** retorna todos los elementos de A y B, excepto aquellos que son comunes a los dos
```python
mi_set_c = mi_set_b.symmetric_difference(mi_set_a)
print(mi_set_c)
```
{1, 2, 3}
![](../img/dia03_18.png)
**symmetric_difference_update(set)** elimina los elementos comunes a A y B, agregando los que no están presentes en ambos a la vez
```python
mi_set_b.symmetric_difference_update(mi_set_a)
print(mi_set_b)
```
{1, 2, 3}
![](../img/dia03_19.png)
**union(set)** retorna un set resultado de combinar A y B (los datos duplicados se eliminan)
```python
mi_set_c = mi_set_a.union(mi_set_b)
print(mi_set_c)
```
{1, 2, 3, 'tres'}
![](../img/dia03_20.png)
**update(set)** inserta en A los elementos de B
```python
mi_set_a.update(mi_set_b)
print(mi_set_a)
```
{1, 2, 3, 'tres'}
![](../img/dia03_21.png)
## 3.9. - booleanos
Los booleanos son tipos de datos binarios (True/False), que surgen de operaciones lógicas, o pueden declararse explícitamente.
### 3.9.1. - operadores lógicos
| Operador | Descripción |
| :------: | :------------------------------------------- |
| `==` | igual a |
| `!=` | no igual a |
| `>` | mayor que |
| `<` | menos que |
| `>=` | mayor o igual a |
| `<=` | menor o igual a |
| `and` | y (True si dos declaraciones son True) |
| `or` | o (True si al menos una declaración es True) |
| `not` | no (invierte el valor del booleano |
## 3.10. - Proyecto del Día 3
Analizador de texto.
La consigna es la siguiente: vas a crear un programa que primero le pida al usuario que ingrese un texto. Puede ser un texto cualquiera: un artículo entero, un párrafo, una frase, un poema, lo que quiera.
Luego, el programa le va a pedir al usuario que también ingrese tres letras a su elección y a partir de ese momento nuestro código va a procesar esa información para hacer cinco tipos de análisis y devolverle al usuario la siguiente información:
1. Primero: ¿cuántas veces aparece cada una de las letras que eligió? Para lograr esto, te recomiendo almacenar esas letras en una lista y luego usar algún método propio de string que nos permita contar cuantas veces aparece un sub string dentro del string. Algo que debes tener en cuenta es que al buscar las letras pueden haber mayúsculas y minúsculas y esto va a afectar el resultado. Lo que deberías hacer para asegurarte de que se encuentren absolutamente todas las letras es pasar, tanto el texto original como las letras a buscar, a minúsculas.
2. Segundo: le vas a decir al usuario cuántas palabras hay a lo largo de todo el texto. Y para lograr esta parte, recuerda que hay un método de string que permite transformarlo en una lista y que luego hay una función que permite averiguar el largo de una lista.
3. Tercero: nos va a informar cuál es la primera letra del texto y cuál es la última. Aquí claramente echaremos mano de la indexación.
4. Cuarto: el sistema nos va a mostrar cómo quedaría el texto si invirtiéramos el orden de las palabras. ¿Acaso hay algún método que permita invertir el orden de una lista, y otro que permita unir esos elementos con espacios intermedios? Piénsalo.
5. Y por último: el sistema nos va a decir si la palabra “Python” se encuentra dentro del texto. Esta parte puede ser algo complicada de imaginársela, pero te voy a dar una pista: puedes usar booleanos para hacer tu averiguación y un diccionario para encontrar la manera de expresarle al usuario tu respuesta.
## Ficheros y documentación del día 3
- [01_index.py](01_index.py)
- [02_sub_strings.py](02_sub_strings.py)
- [03_metodos.py](03_metodos.py)
- [04_string.py](04_string.py)
- [05_propiedades.py](05_propiedades.py)
- [06_listas.py](06_listas.py)
- [07_diccionarios.py](07_diccionarios.py)
- [08_tuplas.py](08_tuplas.py)
- [09_set.py](09_set.py)
- [10_booleanos.py](10_booleanos.py)
- [11_programa03.py](11_programa03.py)
- [__pycache__](__pycache__)
[Documentación del día](../doc_curso/03_analizador_de_texto/)
---
Enlaces a todos los días: [dia 1 - creador de nombres](../dia_01/README.md) / [dia 2 - calculador de comisiones](../dia_02/README.md) / [dia 3 - analizador de texto](../dia_03/README.md) / [dia 4 - juego "adivina el número"](../dia_04/README.md) / [dia 5 - juego "El ahorcado"](../dia_05/README.md) / [dia 6 - recetario](../dia_06/README.md) / [dia 7 - cuenta bancaria](../dia_07/README.md) / [dia 8 - consola de turnos](../dia_08/README.md) / [dia 9 - buscador de números de serie](../dia_09/README.md) / [dia 10 - juego "Invasión espacial"](../dia_10/README.md) / [dia 11 - web scraping](../dia_11/README.md) / [dia 12 - gestor de restaurantes](../dia_12/README.md) / [dia 13 - asistente de voz](../dia_13/README.md) / [dia 14 - controlador de asistencia](../dia_14/README.md) / [dia 15 - machine learning](../dia_15/README.md) / [dia 16 - aplicación web de tareas pendientes](../dia_16/README.md)