Almacenar varios valores en una variable: listas

<aside> 📦 En una variable, no solamente se puede escribir un dato en particular, hasta se pueden poner tipos de dato diferentes en una misma variable

</aside>

Para poner diferentes integer en una variable, declaras la variable de forma normal y pones los valores de la variable entre corchetes

En el caso de los strings se ponen entre comillas porque son strings, y los booleanos y los flotantes se ponen igual que los enteros

numeros = [1, 2, 3, 4]

variables[1, True, 2.77, "?"]

Y se puede saber los datos que contiene la variable de igual forma que una variable normal, para buscar un dato en particular pones el nombre de la variable y entre corchetes el numero del dato (partiendo desde el 0) por ejemplo:

Para cambiar los datos de una lista se usan métodos (variables que ya vienen declaradas por defecto)

Para añadir un dato se usa nombre_de_variable.append(dato_ que_se_ vaya_a_agregar)

Para quitar un dato se usa nombre_de_variable.pop(dato_que_se_vaya_a _quitar)

Las listas también se pueden recorrer con el ciclo for

Y también se puede cambiar el orden y mostrar ciertas partes de la variable de la misma forma que se hacía con los strings:

[::-1] para cambiar el orden, y [0:1] para mostrar desde el dato 0 al dato 1.

>>> variables = [1, True]    
>>> variables                
[1, True]                    
>>> variables [0]            
1      
     

                 
>>> variables.append(False) 
>>> variables               
[1, True, False] 
           
>>> variables.pop(True)  
True                     
>>> variables            
[1, False]               
>>> for elemento in variables:
...    print(elemento)                                   
1                             
False

>>> variables[0:1] 
[1]                
>>> variables[::-1]
[False, 1]         
>>>

<aside> 📦 A pesar de que lleve distintos nombres en distintos lenguajes el concepto de las listas es algo que te puedes encontrar en muchos otros lenguajes de programación

</aside>


Entendiendo como funcionan las tuplas

<aside> 📦 Una tupla es un tipo de dato parecido a las listas

</aside>

Con las listas, al igual que los strings se pueden hacer operaciones de suma, multiplicación, etc. Como si fueran números

x = variables * variables

Sin embargo el problema es que las listas gastan mucha memoria para poder guardar y cambiar los tipos de dato distintos de las listas, y para solucionar este problema es que se introducen las tuplas.

Las tuplas se declaran de la misma forma que las listas, solo que en vez de usar corchetes [], se usan los paréntesis ()

Sin embargo la gran diferencia es que a diferencia de las listas que son dinámicas y se pueden agregar y quitar elementos, las tuplas no, y por lo tanto se dice que son estáticas.

Sin embargo el beneficio de las tuplas es que a pesar de que no sean dinámicas (inmutables) y no se puedan cambiar recorrer es mucho más rápido de lo que sería con una lista.

>>>tupla = (1, 2, 3, 4, 5, 6, 7)
>>> tupla = (1, 2, 3, 4, 5, 6, 7)                       
>>> tupla.append(False)                                 
Traceback (most recent call last):                      
  File "<stdin>", line 1, in <module>                   
AttributeError: 'tuple' object has
no attribute 'append'
>>>

>>>for numero in tupla:
 >>>   print(numero)
...

1
2
3
4
5
6
7

¿Qué son los diccionarios?

<aside> 📘 Los diccionarios, como las listas y las tuplas son tipos de estructuras de datos, entre muchas otras.

</aside>

Para declarar diccionarios en vez de corchetes o paréntesis se usan llaves, los tipos de dato se separan con coma y enter, y en vez de usar de llaves [0:10] , se eligen los nombres de los datos, a estos nombres se le llama llaves por ejemplo:

Para recorrer diccionarios hay que usar el método keys (función que viene declarada por defecto), sin embargo el método keys nada mas imprime las llaves (keys en inglés)

Para recorrer los valores se usa el método values (valores en inglés)

Y para recorrer ambos se usa el método items y en vez de usar un solo valor que se quiera recorrer se ponen ambos por ejemplo:

def run():
     mi_diccionario = {
        "llave1" : 1,
         "llave2" : 2,
         "llave3" : 3,
     }
     print(mi_diccionario["llave2"])

for llave in mi_diccionario.keys():
        print(llave)

for llave in mi_diccionario.values():
        print(llave)

for llave, numero in mi_diccionario.items():
        print(llave + " tiene el valor de  " + str(numero)

<>Proyecto: generador de contraseñas

<aside> 🔑 Algunos navegadores o algunos gestores de contraseñas automáticamente te generan una contraseña segura al registrarte en un sitio para así no tener que pensar en inventar una contraseña

</aside>

#importa random
import random

#define la funcion generar_contraseña
#variable tipo lista es igual a los strings de las tletras en mayúsculas hasta la q
#variable minuscula tipo de dato lista es igual a los strings de todas las letras en minusculas
#hasta la q, variable de tipo de dato lista es igual a los strings de algunos simbolos
#y variable de tipo de dato lista numeros es igual a los strings de los numero (desde
# el cero hasta el 9)
 
def  generar_contrasena():
    mayusculas = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "Ñ", "O", "P", "Q"]
    minusculas = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "ñ", "o", "p", "q"]
    simbolos = ["!", "#", "$", "%", "&", "/", "*"]
    numeros = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]

#variable caracteres es igual amayusculas + minusculas mas simbolos mas numeros
    caracteres = mayusculas + minusculas + simbolos + numeros

#contrasena igual a nada (hasta el contrasena.append) (se escribe contrasena en vez de
#contraseña porque se supone que los nombres de variable y las funciones en
#python se tendrian que hacer en inglés,que es lo que se hace en el mundo real, 
#y en algunos sistemas operativos podrian tener conmplicaciones con la ñ)
    contrasena = []

#para variable i en el rango 15 caracter_random = random.choice, un metodo o una funcion
#que viene declarada por defecto, random.choice(caracteres) significa que elija
#(eleccion = choice en inglés) de manera random uno de los valores de la variable
#caracteres que es igual a las mayusculas, las minusculas, los numeros, y los simbolos
#todas estas listas reducidas a la variable caracteres, y caracter_random es igual a 
#alguno de estos caracteres elegido al azar
contraseña.append #(metodo para agregar dato a la variable tipo lista contraseña)
#agrega a 1 caracter_random en cada 1 de las 15 vueltas
    for i in range(15):
        caracter_random = random.choice(caracteres)
        contrasena.append(caracter_random)

#variable contraseña se une a los string (join = unir en inglés, como el metodod "".join)
#regresale a la funcion (return = regresar en inglés) la variable contrasena
    contrasena = "".join(contrasena)
    return contrasena

#definir funcion run, contrasena es igual a generar_contrasena, imprime el string de
#"Tu nueva econtraseña es: " + variable contrasena
def run():
    contrasena = generar_contrasena()
    print("Tu nueva contraseña es: " + contrasena)

#Si name == main, corre la funcion run()
if __name__ == "__main__":
    run()