• Curso De Python3 Desde 0 (2da Parte)

 #398656  por KHC
 21 Dic 2012, 05:36
Bueno estrenando el syntax, les dejo su regalito de navidad adelantado y espero les guste.

+ Números:
--------------

En python podemos trabajar con Enteros, Reales y Complejos; pueden ser representados en decimal, octal y hexadecimal.
Como vimos en la parte anterior y entendemos el tipado dinámico esta tarea se vuelve muy simple y python se encarga
de hacer la asignación correspondiente:
>>> entero = 7
>>> entero1 = -7
>>> real = 13.37
En los complejos solo hay que indicar cual es la parte imaginaria con una " j " puede ser mayúscula o minúscula por igual:
>>> complejo = 13 + 37J
>>> complejo1 = 13j + 37
De igual forma son correctas las dos asignaciones anteriores y el orden no es de importancia mientras se indique "j".

Ahora, con respecto a int y long en Python 3 esto cambia y se integran tan solo en int.
Los valores que pueden tomar los números reales en python es muy grande ya que se utiliza 1 bit para el signo(-, +),
11 para el exponente y 52 para la mantisa y tomar en cuenta que el tipo double de C es equivalente a los reales en python.

También podemos utilizar notación científica en python de una forma simple.
Ej: 1.3*10-13 (a la menos 13)
>>> real2 = 1.3e-13
Si se necesita trabajar con numero reales de cierta precisión, dos cifras decimales o 4, basta con importar Decimal
que es de la librería básica de Python, además de contar con una serie de funciones nos permite crea por ejemplo:
un número real con precisión (decimal) a través de una variable float.

Con respecto a los booleanos, Python cuenta con el tipo boolean integrado pero no es mas que una versión personalizada de int.

+ Sistema De Representación:
------------------------------


Python permite representar los números enteros en octal, decimal, binario y hexadecimal.

Para representar un numero en binario basta con utilizar " 0b " y el valor en binario del carácter.
Por ejemplo expresar el entero 10 en binario:
>>> binario = 0b1010
O podemos utilizar una función misma que nos ofrecen para este tipo de datos:
>>> bin(10)
Ahora con respecto a Octal, es casi lo mismo solo que se tiene que anteponer " 0o " seguido del numero.
Ej: Expresa el entero 65 en octal:
>>> octal = 0o101

>>> oct(65)
Y con este deben estar familiarizados y sigue el mismo principio que los anteriores, para expresar un hexadecimal basta con
anteponer " 0x " seguido del numero.
Ej: Expresar el numero 1337 en hexadecimal.
>>> hexad = 0x539

>>> hex(1337)
No obstante estas funciones acepta cualquier valor numérico como argumento, y así convertir de un tipo directo a otro:
Ej: Convertir una cantidad hexadecimal en binario:
>>> bin(0x539)
'0b10100111001'

+ HELP
---------


Bueno retomare lo anterior para enseñar un viejo truco y me entienda por que python te ayuda a ser autodidacta.
Supongamos que sabemos que existe el metodo hex() pero no sabemos como utilizarlo, por que el inepto que escribe
este texto se le paso por alto.
Bueno esto tiene una solución simple y es utilizar help().
Cualquier cosa que le pasemos como argumento a help nos regresara la información de ayuda propia de python.
Ej:
>>> help(hex)
Help on built-in function hex in module builtins:

hex(...)
    hex(number) -> string
    
    Return the hexadecimal representation of an integer.
Y con esto creo que sobra explicar bastantes cosas, solo recuerden que pueden aplicarlo a cualquier cosa que desen.
Si lo aplicamos a algún modulo que importamos, nos regresara documentación del mismo -- si es que la tiene--
y nos indicara las funciones que este alberga y su fomar de implementacion o uso.

+ Operadores:
------------------------


Como cualquier otro lenguaje de programacion y por obvias y sobradas razones, contamos con operadores para tratar
numeros. Con referente a la Aritmetica, Python nos brinda la suma básica, dimisión entre y real, multiplicación y resta.
Referente a operaciones a bajo nivel y a nivel bits contamos con operaciones como: NOT, XOR, NOR y AND. Python tambien
brinda operadores para comprobar la igualdad o desigualdad y para llevar acabo operaciones logicas como AND y OR.

Tambien en Python se implementa la precedencia de operadores y debe tener en cuenta al escribir expresiones y no olvidar
que se pueden utilizar parentesis para marcar la diferencia entre una operacion y otra dentro de la misma expresion.
Les dejo la tablita con lso principales operadores y operaciones:

Código: [ Debe registrarse para ver este enlace ]
Expresión con operador	Operación
____________________________
|a + b | suma 
|a - b | resta 
|a * b | multiplicación
|a % b | resto
|a / b | división real
|a // b | división entera
|a ** b | potencia
|a | b | OR (bit)
|a ^ b | XOR (bit)
|a & b | AND(bit)
|a == b | Igualdad
|a != b | Desigualdad
|a or b | OR (lógico)
|a and b| AND(lógico)
|not a | Negación(lógico)
---------------------------------
+ Funciones Matemáticas
------------------------


Python también permite hacer operaciones mas complejas con los números algunas de ellas: valor absoluto, raíz cuadrada, máximos
y mínimos o redondear un valor real, también nos permite trabajar con operaciones trigonométricas como el seno, coseno, tangente,
cotangente y para esto tenemos un modulo llamado math y si deseamos utilizarlo es tan simple como:
>>> import math
Y si queremos sacar la raiz cuadrada de 81, tan simple que ni debería enseñarlo:
>>> math.sqrt(81.0)
9.0
Adelantando un poco, podríamos asignar a una variable esto anterior y ahorra tiempo con escribir todo el math.sqrt(), de esta forma:
>>> rcuadrada = math.sqrt
>>> rcuadrada(81)
9.0
Creo que me estoy dando a entender bastante bien y los que la pillaron bien y los que no, poco a poco iran entendiendo.
De igual forma recuerden:
>>> help(math)
También no podre profundizar en muchos temas como este, por eso requiero que el lector adquiera cierta habilidad para intuir, ya que
además de darle las herramientas y enseñarle como, estos textos son una guia muy básica para los que no se orientan.
Si alguien, después de leer los texto tiene interés en profundizar en el lenguaje puede consultar lecturas mas robustas y llegar
con un amplio panorama a profundizarse sin problema. : )


+ Conjuntos:
---------------


Python tambien permite manejar conjuntos y para esto tenemos la función set() y acepta una serie de argumentos separados por comas
" , ". Por ejemplo si queremos crear un conjunto que contenga estos dígitos 1, 2, 3 bastaría con usar set():
>>> conjunto1 = set('123')
>>> conjunto1 
{'1', '2', '3'}
También podemos definir un conjunto con ' { } ' y separando con comas los elementos:
>>> conjunto2 = {5,6,7}
>>> conjunto2
{5 ,6 , 7}
Como abran notado set(), regresa un conjunto pero a diferencia de la asignación directa nos regresa un conjunto de strings
y con asignación directa nos regresa regresa el conjunto con ints, tener cuidado con esto ;)
>>> conjunto1 = {1,2,3}
Ahora podemos utilizar algunos métodos que nos brinda esta clase como add() o remove() para agregar o eliminar elementos de nuestro
conjunto. También cabe mencionar que si se trata de agregar con set() algun elemento repetido sera eliminado automaticamente:
>>> conjunto3 = set('1335943')
>>> conjunto 3
{'1', '9', '3', '5', '4'}
Como se nota, el tercer elemento y el ultimo son omitidos ya que son los 3's repetidos.

+ Cadenas De Texto:
--------------------------


Bueno creo que los strings es lo mas utilizado en un programa o de lo mas utilizado, Python nos brinda una extensa lista de funciones
para poder tratar a los strings. A diferencia de algunos lenguajes como C que los strings no son un tipo de dato integrado en el lenaguje
como tal, en Python si ahorra mucho tiempo y lineas.
Python trata a los strings como un conjunto inmutable y ordenado de caracteres; para definir un string podemos utilizar comillas dobles
" " o comillas simples '':
>>> nombre = 'julianstafari'
>>> nombre
'julianstafar'
o podemos hacer
>>> nombre = "julianstafari"
>>> nombre
'julianstafari'
Y como en todo lenguaje podemos agregar comentarios o utilizar esto para strings que ocupen mas de una linea. El primero de estos
lo podemos hacer anteponiendo el carácter "#" antes del comentario.
>>> hola = "hello world" #hola mundo
Creo que sobra explicar, el segundo lo hacemos usando comillas dobles " tres veces seguidas, para que python interprete que todo los caracteres
y saltos de linea van incluidos en el string:
>>> print(hola) """mi primer hola
mundo en 
Python 3.2"""
+ Tipos:
-----------




En Python3 todas las cadenas strings (texto) son Unicode y en Python3 son incluidas 3:
-Unicode
-Byte
-Bytearray
El tipo byte solo permite caracteres en calificación ASCII y de igual forma que Unicode son inmutables, en comparación con bytearray
que es una versión mutable de byte.

Para declarar un string de tipo byte, basta con anteponer una b de la siguiente forma:
>>> hola = b"Hello world!"
>>> type(hola)
<class 'bytes'>
Con respecto a bytearray, para declara un string de este tipo tendremos que hacerlo con una función que brinda Python que toma dos argumentos:
el primero es el string en concreto y el segundo es la codificación que se utilizara:
>>> hola1 = bytearray("México", "utf16")
>>> print(hola1)
bytearray(b'\xff\xfeM\x00\xe9\x00x\x00i\x00c\x00o\x00')
Las cadenas de texto que solemos utilizar comúnmente Python les asigna por default el tipo 'str' y se pude comprobar con
la función que hemos estado usando type():
>>> saludo = "Hello world!"
>>> type(saludo)
<class 'str'>
Y para tratar el tema de la conversión entre distintos tipos de strings tenemos varias funciones, de las mas importantes tenemos a
encode() y decode().
Donde endode() nos sirve para convertir un 'str' a 'byte':
>>> saludo.encode()
b'Hello world!'
Y decode() es lo inverso a la anterior, de 'bye' a 'str':
>>> saludo = b"hola"
>>> saludo.decode()
'hola'
Si queremos comprobar podemos pasarle a la función type() como parámetro nuestra conversión ;) :
>>> type(saludo.decode())
<class 'str'>
+ Principales Funciones y Métodos:
------------------------------------------------


Bueno ya un poco mas claro el panorama de los strings, es bueno saber que Python nos ofrece distintas Funciones y Métodos para tratar a estos,
tanto si se llaman de incoo o si ya tenemos definido un string y enseñare algunas de las mas comunes que suelen utilizar en Python.

Si por ejemplo queremos contar cuantos caracteres tiene un string usaremos la función len():
>>> nombre = 'julianstafari'
>>> len(nombre)
13
Ahora un función de las mas importantes y que se invoca sin necesidad de tener un string definido es print() y su uso es simple.
Regresa como resultado el string que se pidió este o no definido:
>>> print('no definido')
no definido
>>> print(nombre)
julianstafari


Si notaron, cuando tenemos un string definido no necesitamos poner las comillas y esto es por que a la función print(), le estamos pasando
además de recibir otro tipo de datos, nos permite pasar directamente un string "crudo" sin estar definido.

Python pone a disposición muchos métodos mas, por ejemplo find() nos permite buscar un o un conjunto de caracteres dentro de un 'str':
>>> comunidad = 'greydotsec'
>>> comunidad.find("g")
0
>>> comunidad.find("yd")
3
Bueno, si prestaron atención se darán cuenta que en el primer ejemplo nos regresa 0 y es por que en Python se cuenta comenzando por el
0 y no por el uno, si pedimos el ultimo carácter del string veremos que se comprueba esto:
>>> comunidad.find("c")
9

>>> len(comunidad)
10
A pesar de que 'greydotsec' contiene 10 caracteres. El segundo ejemplo nos regresa 3 por que es la posición del primer carácter que encontró
en el string osea "y".
Código: [ Debe registrarse para ver este enlace ]
g  r e y d o  t  s  e  c
0 1 2 3 4 5 6 7 8 9 
Si find() no encuentra el carácter o el conjunto de caracteres buscado devuelve -1.
>>> comunidad.find("z")
-1
Si queremos remplazar algún carácter del string entra en juego la función repace() y toma dos argumento: primer el string que sera reemplazado
segundo el string que reemplazara al primer argumento:
>>> comunidad.replace("grey", "Grey")
'Greydotsec'
Ahora muchos comenten el error de creer que el string comunidad ahora esta modificado y no es así, esto se debe a que replace no cambia el contenido
de comunidad, sino que crea una copia y si se desea guardar el contenido que resulta tan solo debe asignarse un nombre:
>>> resultado = comunidad.replace("grey", "GREY")
>>> print(resultado)
GREYdotsec
Los métodos strip(), lstrip(), rstrip() nos ayudan con el problema de los espacios en blanco solo que lstrip quita los de la izquierda, rstrip()
quita los de la derecha, mientras strip() quita ambos:
>>> frase = " Greydot flipa "
>>> frase.strip()
'Greydot flipa'
>>> frase.lstrip()
'Greydot flipa '
>>> frase.rstrip()
' Greydot flipa'
En el caso de upper() y lower() nos ayudan a cambiar todos los caracteres a mayúscula y minúscula, mientras que capitalize() nos pone la
mayúscula del inicio:
>>> web = 'inDetectables.net'
>>> web.upper()
'INDETECTABLES.NET'
>>> web.lower()
'indetectables.net'
>>> web.capitalize()
'Indetectables.net'
La metodo split() nos permite dividir una cadena apartir del argumento que se le de y el argumento es el caracter que se tomara como
referencia para separa el string, y a cambio nos regresa un conjunto con el string divido:
>>> web = 'www.indetectables.net'
>>> web.split('.')
['www', 'indetectables', 'net']
El metodo join(), pide un argumento y es la string que sera reemplazada con el string que se indico al llamar al método:
>>> ';'.join(web)
'w;w;w;.;i;n;d;e;t;e;c;t;a;b;l;e;s;.;n;e;t'
Espero el texto sea de su agrado y creo que por este texto es suficiente.
Tomaremos un descanso antes de seguir con los demás textos, pueden practicar y repasar lo visto! ;)

[ Debe registrarse para ver este enlace ]
@GreyDotSec
@julianstafari
 #398667  por ShineW
 21 Dic 2012, 13:13
Muchisimas gracias por el aporte de tiempo que nos dedicas, ya estaba esperando esta segunda parte desde que lei la primera.

Quedo a la espera de todas la que vendran.

Por cierto... Felices fiestas.
Shine.