Restructure content and add notes from HolaMundo
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
1 parent
64ed03f811
commit
f4e9797c4b
430 files changed
+889
-24
No files matched your search
@@ -0,0 +1,39 @@
|
||||
"""
|
||||
Calculadora
|
||||
"""
|
||||
|
||||
# Se piden los valores
|
||||
n1 = input("Ingresa el primer número: ")
|
||||
n2 = input("Ingresa el segundo número: ")
|
||||
|
||||
# Se transforman los valores en integer
|
||||
n1 = int(n1)
|
||||
n2 = int(n2)
|
||||
|
||||
# Variables de las posibles operaciones
|
||||
suma = n1 + n2
|
||||
resta = n1 - n2
|
||||
multi = n1 * n2
|
||||
div = n1 / n2
|
||||
|
||||
# Se pregunta la operación a realizar
|
||||
op = input("""
|
||||
¿Qué operación quieres hacer?
|
||||
s --> Sumar
|
||||
r --> Restar
|
||||
m --> Multiplicar
|
||||
d --> Dividir
|
||||
> """)
|
||||
|
||||
opciones = ("s", "r", "m", "d")
|
||||
|
||||
if op == "s":
|
||||
print(f"El resultado de la suma de {n1} y {n2} es {suma}")
|
||||
elif op == "r":
|
||||
print(f"El resultado de la resta de {n1} y {n2} es {resta}")
|
||||
elif op == "m":
|
||||
print(f"El resultado de la multiplicación entre {n1} por {n2} es {multi}")
|
||||
elif op == "d":
|
||||
print(f"El resultado de la división entre {n1} por {n2} es {div}")
|
||||
else:
|
||||
print("Operación no encontrada. Vuelve a intentarlo")
|
||||
@@ -0,0 +1,12 @@
|
||||
"""
|
||||
Condicionales con if
|
||||
"""
|
||||
|
||||
edad = input("Introduce tu edad: ")
|
||||
edad = int(edad)
|
||||
if edad > 17:
|
||||
print("Puedes ver la pelicula. Adelante!")
|
||||
if edad >= 55:
|
||||
print("Ademas, no olvides pedir el descuento para seniors")
|
||||
else:
|
||||
print("Lo siento, eres menor de edad")
|
||||
@@ -0,0 +1,15 @@
|
||||
"""
|
||||
Condicionales con if
|
||||
"""
|
||||
|
||||
edad = input("Introduce tu edad: ")
|
||||
edad = int(edad)
|
||||
|
||||
if edad > 65:
|
||||
print("Tienes un super descuento para super seniors")
|
||||
elif edad > 55:
|
||||
print("Tienes un descuento para seniors")
|
||||
elif edad > 17:
|
||||
print("Puedes entrar")
|
||||
else:
|
||||
print("Lo siento, eres menor de edad. Debes irte")
|
||||
@@ -0,0 +1,9 @@
|
||||
"""
|
||||
Operador ternario
|
||||
"""
|
||||
|
||||
edad = 15
|
||||
|
||||
mensaje = "Es mayor" if edad > 17 else "Es menor"
|
||||
|
||||
print(mensaje)
|
||||
@@ -0,0 +1,18 @@
|
||||
"""
|
||||
Operaciones de corto circuito
|
||||
"""
|
||||
|
||||
gas = False
|
||||
encendido = True
|
||||
edad = 18
|
||||
|
||||
# La lectura de las evaluaciones se efectúa de izquierda a derecha
|
||||
# Con lo cual, cuando tenemos varios "and",
|
||||
# en el momento que python encuentre un False
|
||||
# python dejará de leer.
|
||||
if not gas and encendido and edad >17:
|
||||
print("Puedes avanzar")
|
||||
|
||||
# En cambio con or, python deja de leer cuando encuentra un True
|
||||
if not gas or encendido or edad >17:
|
||||
print("Puedes avanzar")
|
||||
@@ -0,0 +1,14 @@
|
||||
"""
|
||||
Cadena de comparadores
|
||||
"""
|
||||
|
||||
edad = 25
|
||||
|
||||
if edad >= 15 and edad <= 65:
|
||||
print("Puede entrar a la piscina")
|
||||
|
||||
# El anterior condicional se puede resumir
|
||||
# encadenando comparadores de comparación
|
||||
|
||||
if 15 <= edad <= 65:
|
||||
print("Puede entrar a la piscina")
|
||||
@@ -0,0 +1,5 @@
|
||||
for i in range(3):
|
||||
for j in range(2):
|
||||
print(f"{i}, {j}")
|
||||
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
Calculadora
|
||||
|
||||
Seudocódigo:
|
||||
Aplicación interactiva, tenemos que escribir constantemente en la terminal.
|
||||
Verificar si se ha ingresado un número
|
||||
Si no hay número pedir el número y después pedir operación +-*/
|
||||
Si ya hay un número pedir operación +-*/
|
||||
Pedir otro número
|
||||
Mostrar resultado y guardar como el primer número
|
||||
|
||||
"""
|
||||
import time
|
||||
# Bienvenida
|
||||
print("\n############################")
|
||||
print("Bienvenidos a la calculadora")
|
||||
print("############################")
|
||||
print("\nPara salir tan solo tienes que escribir (salir)")
|
||||
|
||||
# Pedir el primer número y opciones de operación
|
||||
n1 = input("\nIngresa el primer número: ")
|
||||
print(f"Vamos a operar con el {n1}")
|
||||
print("\nLas operaciones que puedes realizar son:")
|
||||
print("- Sumar --> (s)")
|
||||
print("- Restar --> (r)")
|
||||
print("- Multiplicar --> (m)")
|
||||
print("- Dividir --> (d)\n")
|
||||
|
||||
|
||||
# Inicio de bucle. Si no se pone "salir" seguirá dentro
|
||||
comando = ""
|
||||
while comando.lower() != "salir":
|
||||
comando = input("$ ")
|
||||
if comando != "salir":
|
||||
op = comando
|
||||
|
||||
if op not in ("s", "r", "m", "d"):
|
||||
print("\nDime un operador correcto")
|
||||
continue
|
||||
|
||||
print(f"\nVamos a realizar la operación con el número {n1}")
|
||||
n2 = input("Dime el segundo número: ")
|
||||
|
||||
# Conversor de str a int de los números
|
||||
n2 = int(n2)
|
||||
n1 = int(n1)
|
||||
|
||||
# Posibles operaciones
|
||||
suma = n1 + n2
|
||||
resta = n1 - n2
|
||||
multi = n1 * n2
|
||||
div = n1 / n2
|
||||
|
||||
# Condicional de las respuestas a las operaciones
|
||||
if op == "s":
|
||||
print(f"__________________________________________________")
|
||||
print(f"\nEl resultado de la suma de {n1} y {n2} es {suma}")
|
||||
print(f"__________________________________________________")
|
||||
time.sleep(1.5)
|
||||
print("\n Dime otro operador")
|
||||
n1 = suma
|
||||
elif op == "r":
|
||||
print(f"__________________________________________________")
|
||||
print(f"\nEl resultado de la resta de {n1} y {n2} es {resta}")
|
||||
print(f"__________________________________________________")
|
||||
time.sleep(1.5)
|
||||
print("\n Dime otro operador")
|
||||
n1 = resta
|
||||
elif op == "m":
|
||||
print(f"__________________________________________________")
|
||||
print(f"\nEl resultado de la multiplicación entre {n1} por {n2} es {multi}")
|
||||
print(f"__________________________________________________")
|
||||
time.sleep(1.5)
|
||||
print("\n Dime otro operador")
|
||||
n1 = multi
|
||||
elif op == "d":
|
||||
print(f"__________________________________________________")
|
||||
print(f"\nEl resultado de la división entre {n1} por {n2} es {div}")
|
||||
print(f"__________________________________________________")
|
||||
time.sleep(1.5)
|
||||
print("\n Dime otro operador")
|
||||
n1 = div
|
||||
|
||||
# Despedida de la opción "salir"
|
||||
elif comando == "salir":
|
||||
print("\nHasta pronto! ^_^")
|
||||
break
|
||||
# Error, si se pone un comando diferente a todo lo anterior
|
||||
else:
|
||||
print(f"\nQue me estás container?")
|
||||
print("Estas son las opciones:")
|
||||
print("- Sumar --> (s)")
|
||||
print("- Restar --> (r)")
|
||||
print("- Multiplicar --> (m)")
|
||||
print("- Dividir --> (d)")
|
||||
print("- Salir --> (salir)\n")
|
||||
continue
|
||||
@@ -0,0 +1,48 @@
|
||||
"""
|
||||
Calculadora
|
||||
Solución al ejercicio
|
||||
|
||||
Seudocódigo:
|
||||
Aplicación interactiva, tenemos que escribir constantemente en la terminal.
|
||||
Verificar si se ha ingresado un número
|
||||
Si no hay número pedir el número y después pedir operación +-*/
|
||||
Si ya hay un número pedir operación +-*/
|
||||
Pedir otro número
|
||||
Mostrar resultado y guardar como el primer número
|
||||
|
||||
"""
|
||||
# Bienvenida
|
||||
print("\n############################")
|
||||
print("Bienvenidos a la calculadora Hola Mundo")
|
||||
print("############################")
|
||||
print("\nPara salir tan solo tienes que escribir (salir)")
|
||||
print("\nLas operaciones que puedes realizar son s, r, m y d")
|
||||
|
||||
resultado = ""
|
||||
while True:
|
||||
if not resultado:
|
||||
resultado = input("Ingrese número: ")
|
||||
if resultado.lower() == "salir":
|
||||
break
|
||||
resultado = int(resultado)
|
||||
op = input("Ingresa operación: ")
|
||||
if op.lower() == "salir":
|
||||
break
|
||||
n2 = input("Ingresa el siguiente número: ")
|
||||
if n2.lower() == "salir":
|
||||
break
|
||||
n2 = int(n2)
|
||||
|
||||
if op.lower() == "s":
|
||||
resultado += n2
|
||||
elif op.lower() == "r":
|
||||
resultado -= n2
|
||||
elif op.lower() == "m":
|
||||
resultado *= n2
|
||||
elif op.lower() == "d":
|
||||
resultado /= n2
|
||||
else:
|
||||
print("Operación no válida")
|
||||
break
|
||||
|
||||
print(f"El resultado es {resultado}")
|
||||
@@ -0,0 +1,29 @@
|
||||
|
||||
# Parámetros por defecto
|
||||
def hola(nombre="Mun", apellido=""):
|
||||
print("Hola mundo")
|
||||
print(f"Bienvenido {nombre} {apellido}!")
|
||||
|
||||
|
||||
# Argumento indicando el parámetro concreto
|
||||
hola(apellido="García")
|
||||
|
||||
print("")
|
||||
|
||||
hola("Mariano", "Bermudez")
|
||||
|
||||
hola()
|
||||
|
||||
# Parámetro comodín (iterable)
|
||||
# para añadir un número indeterminado de argumentos.
|
||||
# xargs
|
||||
|
||||
|
||||
def suma(*numeros):
|
||||
resultado = 0
|
||||
for numero in numeros:
|
||||
resultado += numero
|
||||
return resultado
|
||||
|
||||
|
||||
print(suma(3, 6, 2, 4, 65, 23, 4, 100))
|
||||
@@ -0,0 +1,3 @@
|
||||
"""
|
||||
Argumentos indefinidos (*args)
|
||||
"""
|
||||
@@ -0,0 +1,49 @@
|
||||
"""
|
||||
Comprobar palindromo
|
||||
"""
|
||||
|
||||
|
||||
def es_palindromo(texto):
|
||||
"""
|
||||
Función para comprobar si es un palindromo
|
||||
Al texto se le elimina los espacios y acentos
|
||||
"""
|
||||
# Sustituyo vocales con acento y pongo texto en minúsculas
|
||||
texto = texto.replace('á', 'a').replace('é', 'e').replace(
|
||||
'í', 'i').replace('ó', 'o').replace('ú', 'u').lower()
|
||||
|
||||
# Declaro variables
|
||||
al_derecho = ''
|
||||
al_reves = ''
|
||||
|
||||
# Ordeno el texto al derecho y al revés sin espacios
|
||||
for i in texto:
|
||||
if i != ' ':
|
||||
al_reves = i + al_reves
|
||||
al_derecho += i
|
||||
|
||||
# Comparo el texto al derecho y al revés
|
||||
return al_derecho == al_reves
|
||||
|
||||
# Explicacion
|
||||
print("Este programa comprueba si el texto que introduzcas es un palindromo")
|
||||
print("Para salir debes introducir \"salir\"\n")
|
||||
|
||||
|
||||
# Bucle con la pregunta de la palabra, con la condicional true/false
|
||||
# de respuesta y con otra pregunta por si quiere preguntar más.
|
||||
|
||||
txt = ''
|
||||
while txt.lower() != 'salir':
|
||||
txt = input('Dame un texto para comprobar si es palindromo: ')
|
||||
|
||||
print()
|
||||
if txt == 'salir':
|
||||
break
|
||||
elif es_palindromo(txt):
|
||||
print(f'El texto \"{txt}\" es palindromo')
|
||||
else:
|
||||
print(f'El texto \"{txt}\" no es palindromo')
|
||||
print()
|
||||
|
||||
print('¡Ciao!')
|
||||
@@ -0,0 +1,172 @@
|
||||
"""
|
||||
Tipos de listas
|
||||
"""
|
||||
|
||||
numeros = [1, 2, 3]
|
||||
letras = ['a', 'b', 'c']
|
||||
palabras = ['chanchito', 'feliz']
|
||||
palabras = ['chanchito', 'feliz', 'Felipe', 'alumno']
|
||||
booleans = [True, False, True, True]
|
||||
matriz = [[0, 1], [1, 0]]
|
||||
|
||||
# tener una lista multiplicada
|
||||
ceros = [0] * 10
|
||||
ceros_unos = [0, 1] * 10
|
||||
|
||||
# Unir dos listas
|
||||
alfanumerico = numeros + letras
|
||||
|
||||
# Crear un rango de numeros en una lista
|
||||
rango = list(range(1, 11))
|
||||
|
||||
# Crear una lista de un string
|
||||
chars = list("hola mundo")
|
||||
|
||||
|
||||
"""
|
||||
Manipulando listas
|
||||
"""
|
||||
|
||||
mascotas = ["Wolfgang", "Pelusa", "Pulga", "Copito"]
|
||||
|
||||
# Accediendo a un elemento
|
||||
print(mascotas[0])
|
||||
|
||||
# Cambiar un elemento
|
||||
mascotas[0] = "Bicho"
|
||||
print(mascotas)
|
||||
|
||||
# Pedir un fragmento de la lista
|
||||
print(mascotas[2:])
|
||||
print(mascotas[-1])
|
||||
|
||||
|
||||
"""
|
||||
Desempaquetar listas
|
||||
"""
|
||||
|
||||
primero, segundo, tercero = numeros
|
||||
|
||||
mas_numeros = list(range(1, 11))
|
||||
primero, *otros = mas_numeros
|
||||
primero, segundo, *otros, penultimo, ultimo = mas_numeros
|
||||
|
||||
print(primero, segundo, otros, penultimo, ultimo)
|
||||
|
||||
|
||||
"""
|
||||
Acceder al indice de una lista
|
||||
"""
|
||||
|
||||
for mascota in enumerate(mascotas):
|
||||
print(mascota)
|
||||
# Con la función enumarate nos devuelve tuplas
|
||||
# Con lo cual, con 0 nos devuelve el indice
|
||||
print(mascota[0])
|
||||
# Y con 1 nos devuelve la mascota
|
||||
print(mascota[1])
|
||||
|
||||
# Entonces, guardamos en el for el indice ya lo tendremos en una variable
|
||||
for indice, mascota in enumerate(mascotas):
|
||||
print(indice, mascota)
|
||||
|
||||
|
||||
"""
|
||||
Buscar elementos
|
||||
"""
|
||||
|
||||
mascotas.index("Pelusa")
|
||||
# Pero indice da error si no encuentra el elemento
|
||||
# mascotas.index("Wolfgang")
|
||||
|
||||
# Podemos ingresa un nuevo elemento en la lista indican su indice
|
||||
mascotas.insert(3, "Pelusa")
|
||||
# Para agregar al final de la lista
|
||||
mascotas.append("Mun")
|
||||
|
||||
print(mascotas)
|
||||
|
||||
# Podemos contar las veces que hay un elemento en una lista con count
|
||||
print(mascotas.count('Pelusa'))
|
||||
|
||||
# Para eliminar. Pero solo elimina la primera vez
|
||||
mascotas.remove('Pelusa')
|
||||
print(mascotas)
|
||||
|
||||
# Para eliminar el último elemento
|
||||
mascotas.pop()
|
||||
print(mascotas)
|
||||
|
||||
# Y por su indice
|
||||
mascotas.pop(1)
|
||||
print(mascotas)
|
||||
|
||||
# También se puede eliminar con del
|
||||
del mascotas[0]
|
||||
print(mascotas)
|
||||
|
||||
# Para eliminar por completo
|
||||
mascotas.clear()
|
||||
print(mascotas)
|
||||
|
||||
|
||||
"""
|
||||
Ordenando listas
|
||||
"""
|
||||
|
||||
desorden = [2, 1, 44, 23, 66, 34, 78, 5]
|
||||
|
||||
# Orden derecho
|
||||
desorden.sort()
|
||||
print(desorden)
|
||||
|
||||
# Orden inverso
|
||||
desorden.sort(reverse=True)
|
||||
print(desorden)
|
||||
|
||||
# Con sort() se ordena la lista pero
|
||||
# Con sorted() nos devolverá una nueva lista
|
||||
# Entonces, hay que asignarlo a otra lista
|
||||
|
||||
nueva_lista = sorted(desorden)
|
||||
|
||||
print(nueva_lista)
|
||||
# La primera lista no se verá afectada
|
||||
print(desorden)
|
||||
|
||||
# A sorted() también se puede hacer el inverso
|
||||
nueva_lista = sorted(desorden, reverse=True)
|
||||
|
||||
# Ordenamos listas dentro de una lista
|
||||
usuarios = [[4, 'Chanchito'], [5, 'Pulga'], [1, 'Felipe']]
|
||||
|
||||
usuarios.sort()
|
||||
print(usuarios)
|
||||
|
||||
# Con en integer segundo ordenad por el primer elemento
|
||||
usuarios2 = [['Chanchito', 4], ['Pulga', 5], ['Felipe', 1]]
|
||||
usuarios2.sort()
|
||||
print(usuarios2)
|
||||
|
||||
# Pero podemos indicar que ordene por el segundo elemento "[1]"
|
||||
# con una función
|
||||
|
||||
usuarios3 = [['Chanchito', 4], ['Pulga', 5], ['Felipe', 1]]
|
||||
|
||||
|
||||
def ordena(elemento):
|
||||
return elemento[1]
|
||||
|
||||
|
||||
# Con key indicamos que sort() pase los argumentos a la función usuarios3
|
||||
# y devolverá la lista pero solo del elemento indicado dentro de la función
|
||||
# Aquí podríamos pasar un segundo argumento como reverse=True
|
||||
usuarios3.sort(key=ordena)
|
||||
print(usuarios3)
|
||||
|
||||
# Esto se puede hacer más elegante
|
||||
# con funciones lambda (Funciones canónicas)
|
||||
# Sintaxis: (key=lambda parámetro:valorRetorno)
|
||||
# La lambda sustituye a la anterior función ^_^
|
||||
|
||||
usuarios3.sort(key=lambda elemento: elemento[1])
|
||||
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
Compresión listas
|
||||
|
||||
Sintaxis:
|
||||
[expresión for item in items]
|
||||
"""
|
||||
|
||||
# extraer solo un elemento. map
|
||||
usuarios = [['Chanchito', 4], ['Pulga', 5], ['Felipe', 1]]
|
||||
|
||||
nombres_usuarios = [n[0] for n in usuarios]
|
||||
|
||||
print(nombres_usuarios)
|
||||
|
||||
# Filtrando. filter
|
||||
nombres_usuarios2 = [n for n in usuarios if n[1] > 2]
|
||||
|
||||
print(nombres_usuarios2)
|
||||
|
||||
# Ambas operaciones anteriores
|
||||
nombres_usuarios3 = [n[0] for n in usuarios if n[1] > 2]
|
||||
|
||||
print(nombres_usuarios3)
|
||||
|
||||
|
||||
"""
|
||||
Funciones
|
||||
map y filter
|
||||
|
||||
Ya no se usa, pero hay que tenerlo en cuenta por si se encuentra
|
||||
Es programación funcional
|
||||
"""
|
||||
|
||||
# map
|
||||
nombres_usuarios4 = list(map(lambda usuario: usuario[0], usuarios))
|
||||
|
||||
print(nombres_usuarios4)
|
||||
|
||||
# filter
|
||||
|
||||
nombres_usuarios5 = list(filter(lambda usuario: usuario[1] > 2, usuarios))
|
||||
|
||||
print(nombres_usuarios5)
|
||||
@@ -0,0 +1,62 @@
|
||||
"""
|
||||
Tuplas
|
||||
|
||||
Es exactamente lo mismo que una lista
|
||||
pero no permite modificación alguna
|
||||
"""
|
||||
|
||||
numeros = (1, 2, 3)
|
||||
|
||||
# Se puede concatenar tuplas pero creando una nueva
|
||||
|
||||
mas_numeros = numeros + (4, 5, 6, 7)
|
||||
|
||||
print(mas_numeros)
|
||||
|
||||
# Se puede transformar una lista en una tupla
|
||||
punto = tuple([1, 2])
|
||||
|
||||
"""
|
||||
Sets
|
||||
|
||||
Es una colección o un conjunto.
|
||||
No se puede repetir ni está ordenada
|
||||
No tienen indice
|
||||
"""
|
||||
primer_set = {1, 1, 1, 2, 3, 3, 4, 4, 4, 5}
|
||||
|
||||
print(primer_set)
|
||||
|
||||
primer_set.add(6)
|
||||
primer_set.remove(1)
|
||||
|
||||
print(primer_set)
|
||||
|
||||
# transformar lista en set
|
||||
segundo = [4, 5, 6, 7, 8, 9]
|
||||
segundo = set(segundo)
|
||||
|
||||
print(segundo, type(segundo))
|
||||
|
||||
# Operadores
|
||||
|
||||
# # Operador unión |
|
||||
# # devolver todo junto eliminando repetidos
|
||||
print(primer_set | segundo)
|
||||
|
||||
# # Operador intersección
|
||||
# # devolverá los elementos
|
||||
# # que se encuentren en los dos sets &
|
||||
print(primer_set & segundo)
|
||||
|
||||
# # Operador diferencia
|
||||
# # Mostrar los elementos de la izquierda
|
||||
# # quitando los elementos de la derecha
|
||||
# # Como una resta
|
||||
print(primer_set - segundo)
|
||||
|
||||
# # Operador Diferencia simétrica
|
||||
# # Es lo contrario de la intersección.
|
||||
# # Devolverá los elementos
|
||||
# # que no se encuentren en los dos sets
|
||||
print(primer_set ^ segundo)
|
||||
@@ -0,0 +1,50 @@
|
||||
"""
|
||||
Diccionarios
|
||||
clave = valor
|
||||
|
||||
La clave solo puede ser string.
|
||||
El valor puede ser cualquier cosa
|
||||
|
||||
La clave no se puede modificar.
|
||||
El valor sí.
|
||||
"""
|
||||
|
||||
punto = {'x': 25, 'y': 50}
|
||||
|
||||
print(punto)
|
||||
|
||||
# No se puede acceder mediante indice.
|
||||
# El indice es el strinf de la clave
|
||||
print(punto['x'])
|
||||
|
||||
|
||||
# Y cuidao, si la llave no existe da error
|
||||
# Para que no de error es mejor usar un if
|
||||
if "lala" in punto:
|
||||
print(punto["lala"])
|
||||
|
||||
|
||||
# Añadir otra clave y su valor
|
||||
punto["z"] = 45
|
||||
|
||||
print(punto)
|
||||
|
||||
# Otro método para obtener valores es get
|
||||
|
||||
print(punto.get("y"))
|
||||
|
||||
# Con este método no da error si no existe.
|
||||
# devolverá None
|
||||
print(punto.get("lala"))
|
||||
|
||||
# Y podemos indicar un valor por defecto
|
||||
# para el caso que no exista
|
||||
print(punto.get("lala", 97))
|
||||
|
||||
|
||||
# Para eliminar
|
||||
del punto["x"]
|
||||
# Función del
|
||||
del (punto["y"])
|
||||
|
||||
print(punto)
|
||||
@@ -0,0 +1,24 @@
|
||||
# Apuntes de python de holamundo
|
||||
|
||||
Estos apuntes y ejercicios en python han sido realizados viendo un vídeo de Holamundo:
|
||||
- [Aprende python ahora! Curso completo e intensivo desde cero](https://www.youtube.com/watch?v=tQZy0U8s9LY&ab_channel=HolaMundo)
|
||||
|
||||
¡Te recomiendo que lo veas y hagas tus propios apuntes! Este repositorio es para mi uso personal, pero si te sirve de ayuda, ¡me alegro!
|
||||
|
||||
## Scripts del curso
|
||||
- [01_calculadora.py](01_calculadora.py)
|
||||
- [02_if01.py](02_if.py)
|
||||
- [02_if02.py](02_if02.py)
|
||||
- [03_if_ternario.py](03_if_ternario.py)
|
||||
- [04_operaciones_corto_circuito.py](04_operaciones_corto_circuito.py)
|
||||
- [05_cadena_comparadores.py](05_cadena_comparadores.py)
|
||||
- [06_loop_anidado.py](06_loop_anidado.py)
|
||||
- [07_calculadoraHolaMundo.py](07_calculadoraHolaMundo.py)
|
||||
- [07_calculadora.py](07_calculadora.py)
|
||||
- [08_funciones.py](08_funciones.py)
|
||||
- [09_args_indefinidos.py](09_args_indefinidos.py)
|
||||
- [10_palindromo.py](10_palindromo.py)
|
||||
- [11_listas.py](11_listas.py)
|
||||
- [12_listas_compresion_map_filter.py](12_listas_compresion_map_filter.py)
|
||||
- [13_tuplas_sets.py](13_tuplas_sets.py)
|
||||
- [14_diccionarios.py](14_diccionarios.py)
|
||||
@@ -1,8 +1,13 @@
|
||||
# Curso de python 🚀
|
||||
# Cursos de python 🚀
|
||||
|
||||
Este repositorio contiene los apuntes tomados en diversos cursos de python, en especial en el curso «[Python total](https://www.udemy.com/course/python-total)» impartido por «Escuela Directa» que consta de 30 horas aproximadamente de vídeo-tutoriales. Las prácticas y ejercicios aquí contenidos tuvieron una duración de más de 200 horas, de mucho café e insomnio.
|
||||
Este repositorio contiene los apuntes tomados en diversos cursos de python reflejados en la siguiente tabla:
|
||||
|
||||
Los apuntes no fueron pensados para compartirlos, por ello pueden tener lagunas de información o contenido adicional respecto al curso, ya que se redactaron para recordar procedimientos y conceptos que el autor creyó relevantes. Teniendo un documento, a mi parecer, tan completo y entendiendo que el conocimiento debe ser libre se decidió compartirlo. Cualquier error puedes abrir un issue o contactar conmigo.
|
||||
| Curso | Índice repo | Duración personal | Duración de vídeos | Fuente original |
|
||||
| -----------: | :-------------------------------------------------------- | :---------------: | :----------------: | :------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| Python total | [contenidos](#índice-de-los-contenidos-de-python-total-📎) | 200 horas | 30 horas | [Escuela Directa](https://www.udemy.com/course/python-total) |
|
||||
| HolaMundo | [contenidos](#índice-de-los-contenidos-de-holamundo-📎) | 5 horas | 15 horas | [Aprende python ahora! Curso completo e intensivo desde cero](https://www.youtube.com/watch?v=tQZy0U8s9LY&ab_channel=HolaMundo) |
|
||||
|
||||
Las prácticas y ejercicios aquí contenidos son los que hice mediante los cursos mencionados y por investigación propia, con mucho café e insomnio. Realmente, los apuntes no fueron pensados para compartirlos, por ello pueden tener lagunas de información o contenido adicional respecto al curso, ya que se redactaron para recordar procedimientos y conceptos que EMHO me parecieron relevantes. Teniendo un documento, a mi parecer, tan completo y entendiendo que el conocimiento debe ser libre se decidió compartirlos. Por eso, **cualquier error puedes abrir un issue o contactar conmigo**.
|
||||
|
||||
Si te parece útil este documento puedes agradecerlo a través de las vías de contacto de la web https://vergaracarmona.es o [invítandome a un café](#invítame-a-un-café-☕️) ☕️
|
||||
|
||||
@@ -14,7 +19,7 @@ Recuerda,
|
||||
---
|
||||
<br>
|
||||
|
||||
# Qué es python según chatGPT
|
||||
# Qué es python según chatGPT 🤖
|
||||
|
||||
Python es un lenguaje de programación interpretado y de alto nivel. Fue creado por Guido van Rossum y lanzado por primera vez en 1991. Python se destaca por su sintaxis clara y legible, lo que lo hace muy accesible tanto para principiantes como para programadores experimentados.
|
||||
|
||||
@@ -28,7 +33,7 @@ Además, Python es conocido por ser un lenguaje fácil de aprender y utilizar. S
|
||||
|
||||
En resumen, Python es un lenguaje de programación de alto nivel, interpretado y fácil de aprender que se utiliza ampliamente en una variedad de aplicaciones, desde desarrollo web hasta análisis de datos e inteligencia artificial. Su enfoque en la legibilidad del código y su comunidad activa lo convierten en una elección popular entre los programadores.
|
||||
|
||||
## Tabla de comparación con otros lenguajes
|
||||
## Tabla de comparación con otros lenguajes de programación 📊
|
||||
|
||||
| Característica | Python | Java | C++ | JavaScript |
|
||||
| --------------------- | ------------------------------------------------ | ---------------------------------------- | --------------------------------------- | ----------------------------------------- |
|
||||
@@ -47,14 +52,14 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
---
|
||||
<br>
|
||||
|
||||
# **Índice de los contenidos de cada día** 📎
|
||||
# **Índice de los contenidos de python-total** 📎
|
||||
|
||||
- [Día 1 - Programa un creador de nombres](dia_01/README.md)
|
||||
- [Día 1 - Programa un creador de nombres](python-total/dia_01/README.md)
|
||||
- 1.1. - print
|
||||
- 1.2. - strings
|
||||
- 1.3. - input
|
||||
- 1.4. - Proyecto del Día 1
|
||||
- [Día 2 - Programa un calculador de comisiones](dia_02/README.md)
|
||||
- [Día 2 - Programa un calculador de comisiones](python-total/dia_02/README.md)
|
||||
- 2.1. - Tipos de datos
|
||||
- 2.2. - Variables
|
||||
- 2.3. - Nombres de variables
|
||||
@@ -64,7 +69,7 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 2.7. - Operadores matemáticos
|
||||
- 2.8. - Redondeo
|
||||
- 2.9. - Proyecto del Día 2
|
||||
- [Día 3 - Programa un analizador de texto](dia_03/README.md)
|
||||
- [Día 3 - Programa un analizador de texto](python-total/dia_03/README.md)
|
||||
- 3.1. - Index( )
|
||||
- 3.2. - Substrings
|
||||
- 3.3. - Métodos para Strings
|
||||
@@ -75,7 +80,7 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 3.8. - sets
|
||||
- 3.9. - booleanos
|
||||
- 3.10. - Proyecto del Día 3
|
||||
- [Día 4 - Programa el juego "adivina el número"](dia_04/README.md)
|
||||
- [Día 4 - Programa el juego "adivina el número"](python-total/dia_04/README.md)
|
||||
- 4.1. - Operadores de comparación
|
||||
- 4.2. - Operadores lógicos
|
||||
- 4.3. - Control de flujo
|
||||
@@ -88,7 +93,7 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 4.10. - Comprensión de listas
|
||||
- 4.11. - match
|
||||
- 4.12. - Proyecto del Día 4
|
||||
- [Día 5 - Programa el juego "El ahorcado"](dia_05/README.md)
|
||||
- [Día 5 - Programa el juego "El ahorcado"](python-total/dia_05/README.md)
|
||||
- 5.1. - Documentación
|
||||
- 5.2. - Funciones
|
||||
- 5.3. - return
|
||||
@@ -98,7 +103,7 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 5.7. - **kwargs
|
||||
- 5.8. - Ejercicios
|
||||
- 5.9. - Proyecto del Día 5
|
||||
- [Día 6 - Programa un recetario](dia_06/README.md)
|
||||
- [Día 6 - Programa un recetario](python-total/dia_06/README.md)
|
||||
- 6.1. - Abrir y leer archivos
|
||||
- 6.2. - Crear y escribir archivos
|
||||
- 6.3. - Directorios
|
||||
@@ -107,7 +112,7 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 6.6. - Limpiar la consola
|
||||
- 6.7. - Archivos + funciones
|
||||
- 6.8. - Proyecto del Día 6
|
||||
- [Día 7 - Programa una cuenta bancaria](dia_07/README.md)
|
||||
- [Día 7 - Programa una cuenta bancaria](python-total/dia_07/README.md)
|
||||
- 7.1. - Clases
|
||||
- 7.2. - Atributos
|
||||
- 7.3. - Métodos
|
||||
@@ -118,7 +123,7 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 7.8. - Pilares de la Programación Orientada a Objetos
|
||||
- 7.9. - Métodos especiales
|
||||
- 7.10. - Proyecto del Día 7
|
||||
- [Día 8 - Programa una consola de turnos](dia_08/README.md)
|
||||
- [Día 8 - Programa una consola de turnos](python-total/dia_08/README.md)
|
||||
- 8.1. - Instalar paquetes
|
||||
- 8.2. - Módulos y paquetes
|
||||
- 8.3. - Manejo de errores
|
||||
@@ -127,7 +132,7 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 8.6. - Decoradores
|
||||
- 8.7. - Generadores
|
||||
- 8.8. - Proyecto del Día 8
|
||||
- [Día 9 - Programa un buscador de números de serie](dia_09/README.md)
|
||||
- [Día 9 - Programa un buscador de números de serie](python-total/dia_09/README.md)
|
||||
- 9.1. - Módulo collections
|
||||
- 9.2. - Módulos shutil & os
|
||||
- 9.3. - Módulo datetime
|
||||
@@ -136,23 +141,23 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 9.6. - Expresiones regulares
|
||||
- 9.7. - Comprimir y descomprimir archivos
|
||||
- 9.8. - Proyecto del Día 9
|
||||
- [Día 10 - Programa el juego "Invasión espacial"](dia_10/README.md)
|
||||
- [Día 10 - Programa el juego "Invasión espacial"](python-total/dia_10/README.md)
|
||||
- 10.1. - Distancia entre dos puntos
|
||||
- 10.2. - Convertir el Juego en un Archivo Ejecutable (.exe)
|
||||
- [Día 11 - Programa un web scraping](dia_11/README.md)
|
||||
- [Día 11 - Programa un web scraping](python-total/dia_11/README.md)
|
||||
- 11.1. - Extraer elementos de una clase
|
||||
- [Día 12 - Programa un gestor de restaurantes](dia_12/README.md)
|
||||
- [Día 13 - Programa un asistente de voz](dia_13/README.md)
|
||||
- [Día 12 - Programa un gestor de restaurantes](python-total/dia_12/README.md)
|
||||
- [Día 13 - Programa un asistente de voz](python-total/dia_13/README.md)
|
||||
- 13.1. - Librerias y módulos
|
||||
- 13.2. - Algunos problemas con las bibliotecas
|
||||
- 13.3. - Enlaces
|
||||
- [Día 14 - Programa un controlador de asistencia](dia_14/README.md)
|
||||
- [Día 14 - Programa un controlador de asistencia](python-total/dia_14/README.md)
|
||||
- 14.1. - Bibliotecas
|
||||
- [Día 15 - Programa un modelo de machine learning](dia_15/README.md)
|
||||
- [Día 15 - Programa un modelo de machine learning](python-total/dia_15/README.md)
|
||||
- 5.1. - Bibliotecas
|
||||
- 5.2. - Definiciones
|
||||
- 5.3. - Cuadernos de trabajo en Colab de google drive
|
||||
- [Día 16 - Programa una aplicación web de tareas pendientes](dia_16/README.md)
|
||||
- [Día 16 - Programa una aplicación web de tareas pendientes](python-total/dia_16/README.md)
|
||||
- 16.1. - Entornos Virtuales
|
||||
- 16.2. - Módulos
|
||||
- 16.3. - Preparación de estructura de trabajo
|
||||
@@ -177,13 +182,37 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
- 16.22. - estilo de la lista
|
||||
- 16.23. - Estilo de la barra de cerca
|
||||
- 16.24. - Terminar el sitio
|
||||
- [Día 17 - Extra bibliotecas para hacking ético](dia_17/README.md)
|
||||
- [Día 17 - Extra bibliotecas para hacking ético](python-total/dia_17/README.md)
|
||||
- 17.1. - Bibliotecas
|
||||
|
||||
---
|
||||
<br>
|
||||
|
||||
## Licencia
|
||||
# **Índice de los contenidos de HolaMundo** 📎
|
||||
|
||||
- [Descripción de los contenidos](HolaMundo/README.md)
|
||||
- 01_calculadora.py
|
||||
- 02_if02.py
|
||||
- 02_if.py
|
||||
- 03_if_ternario.py
|
||||
- 04_operaciones_corto_circuito.py
|
||||
- 05_cadena_comparadores.py
|
||||
- 06_loop_anidado.py
|
||||
- 07_calculadoraHolaMundo.py
|
||||
- 07_calculadora.py
|
||||
- 08_funciones.py
|
||||
- 09_args_indefinidos.py
|
||||
- 10_palindromo.py
|
||||
- 11_listas.py
|
||||
- 12_listas_compresion_map_filter.py
|
||||
- 13_tuplas_sets.py
|
||||
- 14_diccionarios.py
|
||||
|
||||
|
||||
---
|
||||
<br>
|
||||
|
||||
## Licencia 📄
|
||||
|
||||
- [Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional](LICENSE)
|
||||
|
||||
@@ -193,6 +222,13 @@ Esta tabla solo proporciona una comparación general entre los lenguajes y que c
|
||||
|
||||
# Agradecimientos 🎁
|
||||
|
||||
Por supuesto, quiero agradecer a [Federico Garay](https://ar.linkedin.com/in/fedegaray) y a [Nicolás Schürmann](https://www.linkedin.com/in/nicolasschurmann/) (¡Cuidao con el [teclado](https://youtu.be/y0T8UqBkawQ) que se gasta!) por los cursos en concreto que he realizado con ellos y por todo el contenido libre que en sus webs y canales de RRSS.
|
||||
|
||||
También a todos los compas que me han apoyado en este camino.
|
||||
|
||||
[](hhttps://youtu.be/Ds7tje_Y0CM)
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
# Invítame a un café ☕️
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,140 @@
|
||||
# Apuntes de python de python-total
|
||||
|
||||
Estos apuntes y ejercicios en python han sido realizados en el trascurso del curso de python-total de Federico Garay:
|
||||
- [Python-total](https://www.udemy.com/course/python-total)
|
||||
|
||||
¡Te recomiendo que hagas el curso y redactes tus propios apuntes! Este repositorio es para mi uso personal, pero si te sirve de ayuda, ¡pues me alegro!
|
||||
|
||||
# Índice del curso y sus contenidos
|
||||
|
||||
- [Día 1 - Programa un creador de nombres](dia_01/README.md)
|
||||
- 1.1. - print
|
||||
- 1.2. - strings
|
||||
- 1.3. - input
|
||||
- 1.4. - Proyecto del Día 1
|
||||
- [Día 2 - Programa un calculador de comisiones](dia_02/README.md)
|
||||
- 2.1. - Tipos de datos
|
||||
- 2.2. - Variables
|
||||
- 2.3. - Nombres de variables
|
||||
- 2.4. - integers & floats
|
||||
- 2.5. - Conversiones
|
||||
- 2.6. - Formatear cadenas
|
||||
- 2.7. - Operadores matemáticos
|
||||
- 2.8. - Redondeo
|
||||
- 2.9. - Proyecto del Día 2
|
||||
- [Día 3 - Programa un analizador de texto](dia_03/README.md)
|
||||
- 3.1. - Index( )
|
||||
- 3.2. - Substrings
|
||||
- 3.3. - Métodos para Strings
|
||||
- 3.4. - Strings: propiedades
|
||||
- 3.5. - Listas
|
||||
- 3.6. - Diccionarios
|
||||
- 3.7. - Tuples
|
||||
- 3.8. - sets
|
||||
- 3.9. - booleanos
|
||||
- 3.10. - Proyecto del Día 3
|
||||
- [Día 4 - Programa el juego "adivina el número"](dia_04/README.md)
|
||||
- 4.1. - Operadores de comparación
|
||||
- 4.2. - Operadores lógicos
|
||||
- 4.3. - Control de flujo
|
||||
- 4.4. - loops while
|
||||
- 4.5. - range( )
|
||||
- 4.6. - enumerate( )
|
||||
- 4.7. - zip( )
|
||||
- 4.8. - min( ) & max( )
|
||||
- 4.9. - random
|
||||
- 4.10. - Comprensión de listas
|
||||
- 4.11. - match
|
||||
- 4.12. - Proyecto del Día 4
|
||||
- [Día 5 - Programa el juego "El ahorcado"](dia_05/README.md)
|
||||
- 5.1. - Documentación
|
||||
- 5.2. - Funciones
|
||||
- 5.3. - return
|
||||
- 5.4. - Funciones dinámicas
|
||||
- 5.5. - Interacción entre funciones
|
||||
- 5.6. - *args
|
||||
- 5.7. - **kwargs
|
||||
- 5.8. - Ejercicios
|
||||
- 5.9. - Proyecto del Día 5
|
||||
- [Día 6 - Programa un recetario](dia_06/README.md)
|
||||
- 6.1. - Abrir y leer archivos
|
||||
- 6.2. - Crear y escribir archivos
|
||||
- 6.3. - Directorios
|
||||
- 6.4. - pathlib
|
||||
- 6.5. - Path
|
||||
- 6.6. - Limpiar la consola
|
||||
- 6.7. - Archivos + funciones
|
||||
- 6.8. - Proyecto del Día 6
|
||||
- [Día 7 - Programa una cuenta bancaria](dia_07/README.md)
|
||||
- 7.1. - Clases
|
||||
- 7.2. - Atributos
|
||||
- 7.3. - Métodos
|
||||
- 7.4. - Tipos de métodos
|
||||
- 7.5. - Herencia
|
||||
- 7.6. - Herencia extendida
|
||||
- 7.7. - Polimorfismo
|
||||
- 7.8. - Pilares de la Programación Orientada a Objetos
|
||||
- 7.9. - Métodos especiales
|
||||
- 7.10. - Proyecto del Día 7
|
||||
- [Día 8 - Programa una consola de turnos](dia_08/README.md)
|
||||
- 8.1. - Instalar paquetes
|
||||
- 8.2. - Módulos y paquetes
|
||||
- 8.3. - Manejo de errores
|
||||
- 8.4. - pylint
|
||||
- 8.5. - unittest
|
||||
- 8.6. - Decoradores
|
||||
- 8.7. - Generadores
|
||||
- 8.8. - Proyecto del Día 8
|
||||
- [Día 9 - Programa un buscador de números de serie](dia_09/README.md)
|
||||
- 9.1. - Módulo collections
|
||||
- 9.2. - Módulos shutil & os
|
||||
- 9.3. - Módulo datetime
|
||||
- 9.4. - Módulo para medir el tiempo
|
||||
- 9.5. - Módulo math
|
||||
- 9.6. - Expresiones regulares
|
||||
- 9.7. - Comprimir y descomprimir archivos
|
||||
- 9.8. - Proyecto del Día 9
|
||||
- [Día 10 - Programa el juego "Invasión espacial"](dia_10/README.md)
|
||||
- 10.1. - Distancia entre dos puntos
|
||||
- 10.2. - Convertir el Juego en un Archivo Ejecutable (.exe)
|
||||
- [Día 11 - Programa un web scraping](dia_11/README.md)
|
||||
- 11.1. - Extraer elementos de una clase
|
||||
- [Día 12 - Programa un gestor de restaurantes](dia_12/README.md)
|
||||
- [Día 13 - Programa un asistente de voz](dia_13/README.md)
|
||||
- 13.1. - Librerias y módulos
|
||||
- 13.2. - Algunos problemas con las bibliotecas
|
||||
- 13.3. - Enlaces
|
||||
- [Día 14 - Programa un controlador de asistencia](dia_14/README.md)
|
||||
- 14.1. - Bibliotecas
|
||||
- [Día 15 - Programa un modelo de machine learning](dia_15/README.md)
|
||||
- 5.1. - Bibliotecas
|
||||
- 5.2. - Definiciones
|
||||
- 5.3. - Cuadernos de trabajo en Colab de google drive
|
||||
- [Día 16 - Programa una aplicación web de tareas pendientes](dia_16/README.md)
|
||||
- 16.1. - Entornos Virtuales
|
||||
- 16.2. - Módulos
|
||||
- 16.3. - Preparación de estructura de trabajo
|
||||
- 16.4. - Configurar url
|
||||
- 16.5. - Crear tabla de tareas
|
||||
- 16.6. - Configurar la vista
|
||||
- 16.7. - Configurar la vista de Detalle
|
||||
- 16.8. - Crear Links a Detalle
|
||||
- 16.9. - Agregar nueva tarea
|
||||
- 16.10. - Formulario para nueva tarea
|
||||
- 16.11. - Editar tarea
|
||||
- 16.12. - Eliminar tarea
|
||||
- 16.13. - Crear la lógica de Logueo / Deslogueo
|
||||
- 16.14. - Formulario de Logueo / Deslogueo
|
||||
- 16.15. - Restringir acceso
|
||||
- 16.16. - Información específica de usuario
|
||||
- 16.17. - Registrar nuevo usuario
|
||||
- 16.18. - Barra de búsquedas
|
||||
- 16.19. - Un estilo para todas las vistas
|
||||
- 16.20. - Estilo general
|
||||
- 16.21. - Estilo de barra superiores
|
||||
- 16.22. - estilo de la lista
|
||||
- 16.23. - Estilo de la barra de cerca
|
||||
- 16.24. - Terminar el sitio
|
||||
- [Día 17 - Extra bibliotecas para hacking ético](dia_17/README.md)
|
||||
- 17.1. - Bibliotecas
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 430 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user