Un identificador es una secuencia de símbolos que se utilizan como nombres de variables, funciones, arreglos, clases y otras estructuras de los lenguajes de programación.
35 |
36 |
37 |
38 | Formas de escribir idenfificadores en Python:
39 | + secuencias de caracteres alfanuméricos del alfabeto inglés
40 | + Usando ( _ ) *underscore* - *guión bajo*
41 | + No usar espacios
42 | + No usar caracteres especiales ($, &, *, #)
43 | + No iniciar con valores numéricos y de *preferencia* no incorporarlos
44 | + NO ser una palabra reservada del lenguaje.
45 |
46 |
75 |
76 |
77 | Ejemplos de identificadores inválidos
78 |
79 |
80 |
81 |
82 | 1er_mes
83 | primer nombre
84 | while
85 | p@dre
86 | día
87 | velocidad-maxima
88 | True
89 | Var#1
90 |
91 |
92 |
93 |
94 |
95 | ## Casing
96 | Es el uso de mayusculas y minusculas (así como otros caracteres). Python es *sensitive case*, lo que significa que distingue entre mayúsculas y minúsculas., *e.g.* No es o mismo variable a VARIABLE.
97 |
98 | ### Lowercase
99 | Es el uso exclusivo de mínusculas.
100 |
101 | ### Uppercase
102 | Es el uso exclusivo de mayusculas.
103 |
104 | ### Camelcase
105 | Consiste en la capitalización de la inicial de cada palabra compuesta excepto la inicial. El cambio entre minúsculas y mayúsculas se asemeja a las jorobas de un camello.
106 |
107 | Ejemplos:
108 | + soyUnNumero
109 | + cantidadEstudiantesClase
110 | + letrasAlfabeto
111 | + sumaElementosInternos
112 | + linAlgebraDotProduct
113 |
114 | Esta notación se usa principalmente en C, C++, Java, JavaScript y hay un debate pero en Python también.
115 |
116 | ### Snakecase
117 | Consite en el uso de *underscore* para separar las palabras en una entidad compuesta, la cual estará siempre en minúscula. Las secciones se asemejan a las partes de una serpiente (?.
118 |
119 | Ejemplos:
120 | + soy_un_numero
121 | + cantidad_estudiantes_clase
122 | + letras_alfabeto
123 | + suma_elementos_internos
124 | + lin_algebra_dot_product
125 |
126 | Esta notación se usa principalmente en Ruby, PHP y hay un debate pero en Python también.
127 |
128 | Hay otra que se llama *kebab case*, así que revisen.
129 |
130 | **Entonces,** cúal usar?....para Python **snake-case**.
131 |
132 | ## Variables
133 |
134 |
135 |
Definición
136 |
137 |
138 |
Una variable es un espacio de memoria donde se almacena un dato, un espacio donde se guarda la información necesaria para realizar las acciones que ejecutan los programas.
139 |
140 |
141 |
142 |
143 |
144 | Representación física de una variable.
145 |
146 |
147 | ### Variables en python
148 | Para declarar una variable se necesitan principalmente dos componentes:
149 | el nombre y el tipo de dato.
150 |
151 | ```python
152 | nombre_variable :
153 | ```
154 | ### Tipado estático vs tipado dinámico
155 | Ya que python es un lenguaje interpretado soporta tipado dinámico, esto es, para que un programa funcione *no* es necesario especificar el tipo de la variable, porque en tiempo de ejecución se va cambiando el espacio en memoria necesario para alojar la información.
156 |
157 | Para el programador esto se puede considerar algo *sencillo*, ya que solo declara variables y el interprete hace el resto, sin embargo esto es una *mala práctica*. Por lectura, por eficiencia, por elegancia, es mejor hacer tipado estático, es decir especificar el tipo de variable, para reservar el espacio adecuado en memoria. La mayoría de lenguajes compilados usa tipado estático.
158 |
159 | **Pro tip:** Una buena práctica de programación∗ es asignarle el nombre a una variable de tal manera que indique por un lado el papel que desempeña dicha variable en el algoritmo y por otro los posibles valores que almacena.
160 |
161 |
162 |
163 | Ejemplos de nombres para variables.
164 |
165 |
166 | ## Tipos de datos
167 | ### Enteros
168 | Si x es una variable algebraica que varia en el conjunto Z, para definir x
169 | en el lenguaje Python se utiliza la expresión:
170 |
171 | ```python
172 | x : int
173 | ```
174 | ### Declarar vs Inicializar
175 | **Declarar:** Consiste en nombrar la variable y *declarar* su tipo, sin especificar un valor inicial.
176 |
177 | **Inicializar:** Consiste en dar un valor inicial luego de declarar una variable.
178 |
179 | ```python
180 | # Declarar variable
181 | x : int
182 | # Inicializar variable
183 | x = 10
184 | # Declarar e inicializar variable
185 | x : int = 10
186 | ```
187 | **Pro tip:** Para dar valor a una variable, se utiliza el operador de *asignación*, un = (signo igual).
188 |
189 | **Pro tip:** Para poner comentarios en el código de python se utiliza # (asterisco), todo lo que está comentado no será tenido en cuenta en el programa. Comentar es **FUNDAMENTAL** para entender el code.
190 |
191 | En Python no hay una distinción tan clara de la cantidad de espacio que usa un entero, en lenguajes como C se tienen `int8`, `uint16`, `long`, donde se especifican la cantidad de bits para almacenar la variable. Si se quiere consultar la cantidad de bits y la representación binaria se puede usar.
192 |
193 | ```python
194 | # Declarar e inicializar variable
195 | x : int = 10
196 | # Cantidad de bits
197 | print(x.bit_length)
198 | # Representacion binaria
199 | print(bin(x))
200 | ```
201 | ### Flotantes
202 | Si x es una variable algebraica que varia en el conjunto R, para definir x
203 | en el lenguaje Python se utiliza la expresión:
204 |
205 | ```python
206 | x : float
207 | ```
208 |
209 | El subconjunto de los n´umeros reales que pueden ser representados en el lenguaje Python, es un subconjunto propio de los racionales, que se representan con 64 bits (8 bytes) y que usan un tipo de codificación definida por el IEEE standard for Binary Floating-Point Arithmetic 754 de 1985, los valores distintos de 0 de este conjunto varían en el rango:
210 |
211 | $$−1.7976931348623157\cdot10^{+308} ≤ x ≤ −2.2250738585072014\cdot10^{−308}$$
212 |
213 | y
214 |
215 | $$2.2250738585072014\cdot10^{−308} ≤ x ≤ 1.7976931348623157\cdot10^{+308}$$
216 |
217 | Los n´umeros reales de máquina son finitos y por lo tanto, existen n´umeros
218 | reales que no se pueden representar. Además, la mayoría de los n´umeros se acumulan alrededor del 0 y hacia los extremos superior e inferior se encuentran más dispersos.
219 |
220 | Ejemplos de flotantes:
221 | ```python
222 | e = 2.7182818284
223 | gamma : float = 0.577215664901
224 | phi = +1.61803398874989
225 | X = -1.0
226 | const_Boltzmann = 1.3806488e-23
227 | Luz : float = 2.998e+8
228 | Avogadro = +6.02214129e+23
229 | G : float = 6.67384e-11
230 | Plank = 6.62606896e-34
231 | ```
232 |
233 | ### Constantes
234 | A diferencia de C, Java o Javascript, en Python no hay constantes perse, se suele declarar una variable global en *snake case* mayúsculas para indicar que se trata de un valor persistente.
235 |
236 | ```python
237 | MAIN_VALUE = 10
238 | CONST_FREQ = 500.56
239 | ```
240 |
241 | ### Booleanos
242 | Si x es una variable algebraica que varia en el conjunto B, para definir x
243 | en el lenguaje Python se utiliza la expresión:
244 |
245 | ```python
246 | x : bool
247 | ```
248 |
249 | El conjunto de los booleanos tiene dos componentes: $$B = \{V,F\}$$
250 |
251 | En python:
252 | $$V\rightarrow True \ \ \ \ \ \ \ F\rightarrow False $$
253 |
254 | Ejemplos de booleanos:
255 | ```python
256 | b = True
257 | flag: bool = True
258 | exp = False
259 | isPrime: bool = False
260 | ```
261 |
262 | **Pro trip:** En Python la representación interna de los valores booleanos se hace mediante el uso de valores enteros int de 32 bits de la siguiente manera:
263 | el valor lógico F se representa con el entero 0 (cero) y el valor lógico V se representa con cualquier entero distinto de 0, por costumbre se usa el entero 1 (uno). De lo anterior se obtienen las siguientes equivalencias lógicas:
264 |
265 | $$True \Longleftrightarrow 1 \ \ \ \ \ \ \ \ False \Longleftrightarrow 0$$
266 |
267 | ### Caracteres y cadenas de caracteres
268 | Un carácter es el elemento mínimo de información usado para representar,
269 | controlar, transmitir y visualizar datos. Al conjunto de caracteres usados
270 | con este fin se le llama Esquema de codificación. Los esquemas de
271 | codificación en general usan un n´umero de bits o bytes fijos. Por ahora solo
272 | consideraremos el ASCII. En Python son representados como cadenas de
273 | caracteres de un sólo carácter.
274 |
275 |
276 |
277 | Tabla de caracteres con equivalente en ASCII.
278 |
279 |
280 | Código Estadounidense Estándar para el Intercambio de Información
281 | (American Standard Code for Information Interchange):
282 |
283 | + En su versión original usa 7 bits, definiendo 128 caracteres.
284 | + En la versión extendida usa 8 bits (esto es 1 byte), definiendo 256 caracteres.
285 | + Es la base de los archivos de texto plano (o sin formato).
286 | + Es el esquema base para la escritura de programas en casi todos los lenguajes de programación (incluido Python)
287 |
288 | Las variables tipo caracter se definen usando comillas dobles ("") o sencillas ('').
289 |
290 | Ejemplos:
291 | ```python
292 | char1 = "a"
293 | char2 = 'x'
294 | ```
295 | Para convertir de caracter a ASCII se emplea la función *ord()* y para convertir de ASCII a caracter *chr()*.
296 |
297 | ```python
298 | ord('a')
299 | ```
300 |
301 | ```python
302 | chr(97)
303 | ```
304 |
305 | ### Cadenas de caracteres o Strings
306 | Una **cadena de caracteres** *str* es una secuencia de cero o más caracteres. Una cadena de caracteres se delimita por el carácter ' o por el carácter ". Una cadena de caracteres es una estructura de datos **inmutable**, esto significa que no puede ser cambiada.
307 |
308 | + 'ejemplo de cadena'
309 | + "Cadena con un tabulado \t y una nueva \n línea"
310 | + 'Cadena con un carácter unicode \u01F4 y una comilla doble"'
311 | + "Cadena con una comilla simple \’, una comilla doble \" y una diagonal invertida \\"
312 | + La cadena vacía "" o ''
313 |
314 | **Pro tip:** Diferencia entre "" y '', en general se utiliza doble comilla en caso que el string contenga comillas sencillas.
315 |
316 | ## Operadores
317 | Es la manera de establecer relaciones (operaciones) entre los tipos de variables.
318 |
319 | + **Operadores infijos:** Se aplican entre los operandos.
320 | + **Operadores prefijos:** Se aplica antes del operando.
321 | + **Operadores sufijos:** Se aplica después del operando.
322 |
323 | ### Operadores aritméticos
324 | Se aplican a los datos de tipo numérico (luego veremos que algunos se pueden sobrecargar a otras estructuras de datos).
325 |
326 | + **Suma:** Usa el simbolo (+) y obtiene la suma de dos o más valores.
327 | ```python
328 | # Suma de dos numeros
329 | 4 + 1 # Entero + Entero = Entero
330 | 4.0 + 1 # Real + lo que sea = Real
331 | ```
332 | + **Resta:** Usa el simbolo (-), representa la sustracción cuando está entre dos operandos (infijo) o la negación (cambio de signo) cuando predece al oeprando (prefijo).
333 | ```python
334 | # Sustacción de dos numeros
335 | 4 - 1 # Entero - Entero = Entero
336 | -1 # Cambio de signo
337 | ```
338 | + **Multiplicación:** Usa el simbolo (*) y obtiene el producto entre dos o más valores.
339 | ```python
340 | # Producto de dos numeros
341 | 4 * 2.0 # Entero * Real = ?
342 | ```
343 | + **División:** Usa el símbolo (/) y retorna la división exacta.
344 | ```python
345 | # División de dos numeros
346 | 4 / 2 # Entero / Entero = ?
347 | 4.0 / 2 # Real / Entero =?
348 | 4.0 / 0 # Tan tan tan
349 | ```
350 | + **División Entera:** Usa el símbolo (//) y retorna la parte entera de la división exacta.
351 | ```python
352 | # División exactas de dos numeros
353 | 5 // 2 # Entero / Entero = ?
354 | 5.0 // 2 # Real / Entero =?
355 | ```
356 | + **Módulo:** Usa el símbolo (%) y retorna el residuo de la divisón entre dos números.
357 | $$m \ \text{mod} \ n = r \Longrightarrow \frac{m}{n}=c+r$$
358 | ```python
359 | # modulo entre dos números
360 | 10 % 2 # Entero % Entero = ?
361 | 5.0 % 2 # Real / Entero =?
362 | ```
363 | + **Potencia:** Usa el símbolo (**) y retorna elevar a una cierta potencia un operando. Importante: NO se usa el símbolo (^) -> Acento circunflejo (Hay gente que le dice el sombrerito...que falta de nivel).
364 | ```python
365 | # potencias entre dos números
366 | 5**2 # Cuadrados
367 | 5**3 # Cubos
368 | 81**0.5 # Raíces
369 | ```
370 | ### Operadores de asignación
371 | + **Asignación:** Usa el simbolo (=). La parte de la izquierda que debe ser una variable. Sirve para almacenar un dato en una variable. Asigna el valor de evaluar la parte de la derecha a la variable de la parte de la izquierda.
372 | ```python
373 | pi : float = 3.14169265
374 | ```
375 | + **Asignación con suma:** Usa el simbolo (+=). La parte de la izquierda debe ser una variable. Suma la evaluación de parte de la derecha con el valor almacenado en la variable definida en la parte de la izquierda y guarda el resultado en la variable de parte de la izquierda.
376 | ```python
377 | x : int = 1
378 | x += 1 # Equivalente a x = x + 1
379 | ```
380 | Las asignaciones con operación no se pueden utilizar dentro de uan expresión (e.g. un ciclo), son operaciones en sí mismas.
381 |
382 | + **Asignación con resta:** Usa el simbolo (-=). La parte de la izquierda debe ser una variable. Resta al valor almacenado en la variable definida en la parte de la izquierda el resultado de la evaluación de parte de la derecha y guarda el resultado en la variable de parte de la izquierda.
383 | ```python
384 | x : int = 2
385 | x -= 1 # Equivalente a x = x - 1
386 | ```
387 | + **Asignación con multiplicación:** Usa el simbolo (*=). La parte de la izquierda debe ser una variable. Multiplica el valor almacenado en la variable definida en la parte de la izquierda con la evaluación de parte de la derecha y guarda el producto en la variable de parte de la izquierda.
388 | ```python
389 | x : int = 4
390 | x *= 3 # Equivalente a x = x * 3
391 | ```
392 | + **Asignación con división:** Usa el simbolo (/=). La parte de la izquierda debe ser una variable. Divide el valor almacenado en la variable definida en la parte de la izquierda entre el valor de la evaluación de la parte de la derecha y guarda el resultado en la variable de parte de la izquierda.
393 | ```python
394 | x : int = 4
395 | x /= 2 # Equivalente a x = x / 2
396 | ```
397 | + **Asignación con división entera:** Usa el simbolo (//=). La parte de la izquierda debe ser una variable. Divide de forma entera el valor almacenado en la variable definida en la parte de la izquierda entre el valor de la evaluación de la parte de la derecha y guarda el resultado entero en la variable de parte de la izquierda.
398 | ```python
399 | x : int = 8
400 | x //= 4 # Equivalente a x = x // 4
401 | ```
402 | + **Asignación con residuo:** Usa el simbolo (%=). La parte de la izquierda debe ser una variable. Calcula el residuo de dividir el valor almacenado en la variable definida en la parte de la izquierda entre el valor de la evaluación de la parte de la derecha y guarda el resultado en la variable de parte de la izquierda.
403 | ```python
404 | x : int = 8
405 | x %= 4 # Equivalente a x = x % 4
406 | ```
407 |
408 | **Ejemplo:** Calcular la fuerza de atracción entre la tierra y un cuerpo sobre su superficie.
409 | $$\text{Ley de la gravitación universal:} \ =G\frac{m_1 \cdot m_2}{r^2}$$
410 |
411 | ```python
412 | G : float = 6.67384e-11 # Constante de Cavendish [Nm^2/kg^2]
413 | m1 : float = 5.972e+24 # Masa de la Tierra [kg]
414 | m2 : float = 58 # Masa de alguna victima
415 | r : float = 6400e3 # Radio de la Tierra [m]
416 | ```
417 |
418 | ```python
419 | # Solución 1
420 | F = G * m1 * m2 / r * r
421 | ```
422 | ```python
423 | # Solución 2
424 | F = G * m1 * m2 / r^2
425 | ```
426 | ```python
427 | # Solución 3
428 | F = G * m1 * m2 / r**2
429 | ```
430 | ### Operadores lógicos
431 | Permiten determinar juicios de valor sobre proposiciones lógicas, su resultando es un booleano.
432 |
433 | + **Igualdad:** Evalua si dos variables son iguales. Se usa el simbolo (==).
434 | $$ \alpha == \beta \Longleftrightarrow \alpha = \beta$$
435 | ```python
436 | alpha : int = 10
437 | beta : int = 10
438 | alpha == beta
439 | ```
440 |
441 | + **Diferencia:** Evalua si dos variables son diferentes. Se usa el simbolo (!=).
442 | $$\alpha\ != \beta \Longleftrightarrow \alpha \neq \beta$$
443 | ```python
444 | alpha : int = 10
445 | beta : int = 11
446 | alpha != beta
447 | ```
448 |
449 | + **Mayor estricto:** Evalua si la variable de la izquierda es mayor que la de la derecha. Se usa el simbolo (>).
450 | $$\alpha\ > \beta \Longleftrightarrow \alpha > \beta$$
451 | ```python
452 | alpha : int = 10
453 | beta : int = 11
454 | alpha > beta
455 | ```
456 |
457 | + **Menor estricto:** Evalua si la variable de la izquierda es menor que la de la derecha. Se usa el simbolo (<).
458 | $$\alpha\ < \beta \Longleftrightarrow \alpha < \beta$$
459 | ```python
460 | alpha : int = 10
461 | beta : int = 11
462 | alpha < beta
463 | ```
464 |
465 | + **Mayor igual:** Evalua si la variable de la izquierda es mayor o igual que la de la derecha. Se usa el simbolo (>=).
466 | $$\alpha\ >= \beta \Longleftrightarrow \alpha \geq \beta$$
467 | ```python
468 | alpha : int = 10
469 | beta : int = 10
470 | alpha >= beta
471 | ```
472 |
473 | + **Menor igual:** Evalua si la variable de la izquierda es menor o igual que la de la derecha. Se usa el simbolo (<=).
474 | $$\alpha\ <= \beta \Longleftrightarrow \alpha \leq \beta$$
475 | ```python
476 | alpha : int = 9
477 | beta : int = 10
478 | alpha <= beta
479 | ```
480 | ### Operadores relacionales
481 | Permiten aplicar operaciones boolenas (no se preocupen en Digital lo van a ver en detalle), en general es evaluar juicios de valor compuestos.
482 |
483 | + **Conjunción/AND:** Permite evaluar la operación *and* (y en español). Se utiliza la palabra reservada *and*.
484 |
485 |
486 |
A
487 |
B
488 |
AND(A,B)
489 |
490 |
491 |
0
492 |
0
493 |
0
494 |
495 |
496 |
0
497 |
1
498 |
0
499 |
500 |
501 |
1
502 |
0
503 |
0
504 |
505 |
506 |
1
507 |
1
508 |
1
509 |
510 |
511 |
512 | ```python
513 | 1 and 0
514 | True and False
515 | ```
516 | **Pro tip:** Los que hayan programado en otros lenguajes sabran que el simbolo & (ampersand) representa la operación AND, pero en Python es a un nivel binario, esto es si se aplica con valores numéricos, estos se transformarán a bits y se aplicará la operación.
517 |
518 | + **Disyunción/OR:** Permite evaluar la operación *or* (o en español). Se utiliza la palabra reservada *or*.
519 |
520 |
521 |
522 |
A
523 |
B
524 |
OR(A,B)
525 |
526 |
527 |
0
528 |
0
529 |
0
530 |
531 |
532 |
0
533 |
1
534 |
1
535 |
536 |
537 |
1
538 |
0
539 |
1
540 |
541 |
542 |
1
543 |
1
544 |
1
545 |
546 |
547 |
548 | ```python
549 | 1 or 0
550 | True or False
551 | ```
552 |
553 | **Pro tip:** Los que hayan programado en otros lenguajes sabrán que el simbolo | (vertical line) representa la operación OR, pero en Python es a un nivel binario, esto es si se aplica con valores numéricos, estos se transformarán a bits y se aplicará la operación.
554 |
555 | + **Negación/NOT:** Permite evaluar la operación *not*. Se utiliza la palabra reservada *not*.
556 |
557 |
558 |
A
559 |
NOT(A)
560 |
561 |
562 |
0
563 |
1
564 |
565 |
566 |
1
567 |
0
568 |
569 |
570 |
571 | ```python
572 | not 0
573 | not False
574 | ```
575 |
576 | **Pro tip:** Los que hayan programado en otros lenguajes sabran que el simbolo ~ (virgulilla) representa la operación NOT, pero en Python es a un nivel binario, esto es si se aplica con valores numéricos, estos se transformarán a bits y se aplicará la operación.
577 |
578 | **Ejemplo:** Establecer la relación lógica que permita determinar si un una pareja ordenada `(a,b)` pertenece al conjunto `[-2,3.5) x (-1.25,1.5] U {(x,y):x^2+y^2 <= 1}`.
579 |
580 |
581 |
582 |
583 |
584 | ```python
585 | # Lo que está dentro del rectangulo
586 | a > -2 and a <= 3.5
587 | b >= -1.25 and b < 1.5
588 | # Lo que está fuera del circulo
589 | a * a + b * b >= 1
590 | # Uniendo los dos conjuntos
591 | (a > -2 and a <= 3.5 and b >= -1.25 and b < 1.5) and (a * a + b * b >= 1)
592 | ```
593 |
594 | ### Precedencia de opearaciones
595 | En la siguiente tabla se presenta la prioridad de los principales operadores
596 | de Python, la prioridad más alta es la 1 y la más baja es la 9. Si dos operaciones tienen la misma prioridad se resuelve de izquierda a derecha.
597 |
598 |