<jupyter_start><jupyter_text>Introducción a Python - Sintáxis y elementos básicos En este apartado del curso, se van a repasar conceptos básicos sobre la sintáxis de Python. Para ello, vamos a empezar con un ejemplo de código Python. ¿Qué imprimirá si lo ejecutamos?<jupyter_code>entero = 34 - 23 # Un comentario
cadena = "Hola" # Otro comentario
decimal = 3.45
if decimal == 3.45 or cadena == "Hola":
    entero = entero + 1
    cadena = cadena + " Mundo" # Concatenación de cadenas de caracteres
print(entero)
print(cadena)<jupyter_output><empty_output><jupyter_text>Para comprender bien el script, vamos a cubrir los elementos más básicos de la sintáxis de Python.  Comentarios Para introducir un comentario en el código de Python se debe preceder el mismo del carácter "".Se pueden comentar líneas completas (carácter "" al principio de la línea) o líneas parciales (caracter "" detrás de un fragmento de código).Una vez introducido el carácter "" el comentario llegará hasta el final de la línea.<jupyter_code># Esto es un comentario que no se evaluará
x = 15  # Esto es otro comentario que tampoco se evaluará<jupyter_output><empty_output><jupyter_text>También se puede introducir un comentario de varias líneas poniendo tres comillas, """, al principio y al final del comentario.<jupyter_code>"""Python is a powerful high-level, object-oriented programming language created by <NAME>. It has simple 
easy-to-use syntax, making it the perfect language for someone trying to learn computer programming for
the first time. This is a comprehensive guide on how to get started in Python, why you should learn it and how
you can learn it."""<jupyter_output><empty_output><jupyter_text>Espacios en blanco Los espacios en blanco y los saltos de línea tienen significado en Python.Un salto de línea marca el final de una sentencia. No se usa ";" al final de las líneas (como en Java o C).Se usa "\" para indicar que una sentencia ocupará varias líneas (aunque no es buena costumbre).No se usan marcas visibles para la delimitación de bloques (como "{}" en Java o C) sino el nivel de indentación.La primera línea con un nivel mayor de indentación especifica el comienzo de un bloque.La primera línea con un nivel menor de indentación especifica el fin de un bloque.<jupyter_code>variable_1 = 10                          # Un salto de linea especifica el final de sentencia
variable_2 = "Soy una asignación" + \
             " muy larga"                # Un \ indica que la sentencia continúa en la siguiente linea (mala práctica)
if variable_1 == 10:
    variable_1 = 15                      # Una mayor indentación indica el inicio de un bloque                     
    variable_2 = "Ya no lo soy"
print (variable_2)                       # Una menor indentación indica el fin de un bloque<jupyter_output><empty_output><jupyter_text>Variables Pueden verse como un nombre dado a una referencia a un objeto/valor.Su nombre puede contener:Carácteres alfanuméricos: a-z, A-Z, 0-9Guión bajo: _No se pueden usar ciertas palabras reservadas:and, as, assert, break, class, continue, def, del, elif, else, except,   exec, finally, for, from, global, if, import, in, is, lambda, not, or,  pass, print, raise, return, try, while, with, yieldAunque no hay normas, las "buenas prácticas" dicen que los nombres de variables deben:Empezar con minúscula: el inicio con mayúsculas se reserva para la declaración de clases (programación orientada a objetos).Autoexplicativos: nombres como cod_contrato, cod_persona, saldo, ingresos_acumulados frente a x, y z.<jupyter_code>cod_contrato = "12345678890000000000"   # Asignación correcta
Persona = "99999999-Q"                  # Asignación válida aunque en contra de buenas prácticas
x = 3.45                                # Asignación válida aunque en contra de buenas prácticas<jupyter_output><empty_output><jupyter_text>Asignaciones Una asignación es el establecimiento de un nombre a una referencia a un objeto/valorLa asignación se realiza mediante el operador "="Las variables se crean en la primera asignación de valor. No es necesario declararlas de forma previa como ocurre en lenguajes como Java, C, etc.Python infiere el tipo de las variables a partir del valor de la primera asignación.Se puede hacer asignación múltiple en una misma sentencia.Si intentamos utilizar una variable no creada anteriormente obtendremos un error<jupyter_code>cod_contrato = "1234567890000000000"             # Creación de una variable cod_contrato de tipo cadena de caracteres
num_hijos = 5                                    # Creación de una variable num_hijos de tipo entero
saldo = 12345.67                                 # Creación de una variable saldo de tipo decimal
cod_contrato_2 = cod_contrato                    # Creación de una variable cod_contrato_2 con el mismo valor y tipo que cod_contrato
cod_titular_1, cod_titular_2 = "Pepe", "María"   # Creación múltiple de variables en una única sentencia<jupyter_output><empty_output><jupyter_text>Lectura de la entrada estándar Para leer cualquier valor del teclado se utiliza la función de Python input.<jupyter_code>entrada = input("--> ")
print("Has escrito: " + entrada)<jupyter_output><empty_output><jupyter_text>Escritura a la salida estándar Para imprimir cualquier valor o cualquier variable por pantalla se utiliza la función de Python print.<jupyter_code>print("Esto es una prueba")
cod_contrato = "1234567890000000000"
print(cod_contrato)<jupyter_output><empty_output><jupyter_text>Tipos de dato Cuatro tipos básicos:Cadenas de caracteres o str: Se especifican entre comillas simples, dobles o triplesValores numéricos enteros o int: No incluyen punto decimalValores numéricos decimales o float: Incluyen punto decimalValores booleanos o bool: True / False (case sensitive)Para conocer el tipo de una variable se puede usar la función de Python type.<jupyter_code>cadena = "Esto es una cadena"
cadena = 'Esto también es una cadena'
cadena = """Incluso esto es
una cadena"""
entero = 10
decimal = 10.1
booleano = True

print (type(cadena))
print (type(entero))
print (type(decimal))
print (type(booleano))<jupyter_output><empty_output><jupyter_text>Casting o modificación manual de tipos Se puede modificar explícitamente el tipo de dato de una variable.Para ello se utilizan las funciones de Python: str, int, float y bool.CUIDADO: Hay castings que no tienen sentido<jupyter_code>print (str(entero))         # Conversión del valor 10 a la cadena "10"
print (int(decimal))       # Conversión de float a int, con truncado de decimales
print (float(booleano))     # Conversión de booleanos a valores numéricos 0 y 1
print (float(cadena))    # Conversión no válida de una cadena a un número decimal<jupyter_output><empty_output><jupyter_text>None - Valor nulo Para crear una variable "vacía", es decir, sin valor se le asigna la palabra reservada None.Útil para eliminar referencias y que el garbage collector libere memoria, pero no suele ser necesario<jupyter_code>vacio = None
print (vacio)
print (type(vacio))<jupyter_output><empty_output><jupyter_text>Operadores básicos Al igual que en otros lenguajes de programación tenemos un conjunto diverso de operadores para aplicar a variables y valores:Aritméticos: +, -, \*, /, \*\*, %, //Lógicos: and, or, notComparativos: ==, !=, , >, =, Asignación: =, +=, -=. \*=, /=, \*\*=, %=, //=  Aritméticos<jupyter_code>a = 2 * 5
b = 2**3
c = a / b
d = a % b
e = a//b
print(a)
print(b)
print(c)
print(d)
print(e)<jupyter_output><empty_output><jupyter_text>Comparativos<jupyter_code>b = 4
print (a == b)
print (a != b)
print (a > b)<jupyter_output><empty_output><jupyter_text>Lógicos<jupyter_code>a = 3
a > 2 and a < 0
a > 2 or a < 0 
not a > 2<jupyter_output><empty_output><jupyter_text>Asignación<jupyter_code>a += 8
a
a %= 5
a<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0721623009758603, 'fraction_numerical': 0.01694915254237288, 'mean_word_length': 4.371724137931034, 'pattern_counts': {'":': 1, '<': 64, '<?xml version=': 0, '>': 68, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 4, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '470523', 'license': 'MIT', 'n_tokens_mistral': 2644, 'n_tokens_neox': 2540, 'n_words': 955, 'path': '1. Python_Basico/1.Sintaxis y elementos basicos.ipynb', 'repo_name': 'AfiQuants/Curso_Python', 'size': '7798'}