¿Y miden el nivel de KI de una persona?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
#102
Python / Re:Programación Orientada a Objetos
Mayo 30, 2015, 05:26:12 PMYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Wow!! felicidades Barlan, he intentado entender/aprender POO un montón de veces y tengo que decir que contigo es la primera vez que todo me ha quedado super claro, realmente espero que sigas con post de este estilo y sobre todo explicandolos así de bien.
Muchas gracias @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login !
Si, la verdad, la POO es algo complicada, pero cuando le entiendes todo fluye con el ambiente. xD
Saludos!
#103
Dudas y pedidos generales / Re:Duda Grado Superior
Mayo 30, 2015, 05:20:46 AMYo eligiría DAM, ya que te enseñarían programación, desarrollo de interfaces, desarrollo movil... etc.
Esto, combinado con conocimiento (o cimientos...) de pentesting puede ser genial.
Salida profesional:
CitarDesarrollador de aplicaciones, servicios y soluciones informáticas para la gestión empresarial y de negocio.
Experto en aplicaciones multiplataforma y en el ámbito del Cloud Computing.
Experto en aplicaciones en el ámbito del entretenimiento y la informática móvil.
Técnico especialista en sistemas y tecnologías de la información en el ámbito de la Administración Pública.
El otro grado, se enfoca más a un desarrollo integral de redes (bases de datos, hardware, os, webs...). Puede serte util, pero si dices estar enfocado a la seguridad informática, puede que no sea la opción 100% recomendable...
Salida profesional:
CitarEste profesional ejerce su actividad en el área de informática de entidades que dispongan de sistemas para la gestión de datos e infraestructura de redes (intranet, internet y/o extranet).
Saludos!
#104
Dudas y pedidos generales / Re:KaLi Linux Se Congela
Mayo 29, 2015, 11:02:17 AM
Lo primero que se me ocurre es que tu hardware no alcance para usar optimamente Kali, por eso se congela al cargar algunas cosas.
La otra es que no instalaste los drivers necesarios (o instalaste los incorrectos).
Casi siempre se congela o hay algún otro error a causa de una mala instalación (o nula) de drivers de video.
La otra es que no instalaste los drivers necesarios (o instalaste los incorrectos).
Casi siempre se congela o hay algún otro error a causa de una mala instalación (o nula) de drivers de video.
#105
Dudas y pedidos generales / Re:Como obtener internet si lo llegarán a cancelar a nivel nacional...
Mayo 29, 2015, 01:24:49 AMYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
No sé si soy paranoico, pero en mi país están pasando cosas feas, Y no sé que puede llegar a pasar, hace poco acaban de cancelar la señal de CNN, para toda la población hondureña, Y la verdad no sé pero tengo una sospecha de que podría bloquear algo más que eso, ya que ahora en mí país hay un escandalo donde en teoría el presidente podría estar ligado a escandalos de Corrupcion (2billones de $) si no me equivoco) Y este tipo tiene manía de Tirano la verdad, sigue mucho al principe maquiavelo y el arte de la guerra. Así que le tengo un poco de pavor la verdad que este tipo nos deje incomunicados, porque yo si lo veo capaz, Si bloquean las redes sociales con tor creo que es suficiente para tener acceso, pero si se llegara a bloquear el acceso absoluto ¿Qué soluciones habría? yo creo que muy pocas...
Si eso llegara a pasar, EU no se quedará con los brazos cruzados.
Además, entrarían organos internacionales como la ONU y cosas así, ya que ahora todos tenemos derecho a usar Internet.
Aparte, sería todo un escándalo internacional, que probablemente "destruiría" la economía hondureña, ya que ahora todos piensan que ese país sería como una "pseudo-Corea del Norte", y nadie le entraría con ese pais. (No tengo argumentos, pero es mera perspectiva)
De igual manera, si no se ha "cortado" el internet nacionalmente, se pueden usar proxies o DNS alterna como la de Google, u OpenDNS, etc...
O como dijo Polsaker: Proveedor de Internet satelital.
Ahora, existe otra alternativa: Revolución.
#106
Python / Re:Lector de RSS que notifica de nuevos posts en Underc0de.
Mayo 28, 2015, 02:19:47 AM
Im-pre-sio-nan- Genial - te. 
Lamentablemente uso Window$, así que no he probado el programa.
Aún así, es increible.
Saludos!

Lamentablemente uso Window$, así que no he probado el programa.
Aún así, es increible.
Saludos!
#107
Noticias Informáticas / Re:Pendrive USB-bomba casero quema una PC nada más al conectarlo
Mayo 28, 2015, 12:39:47 AMYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or LoginYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Hay que comprar unas cuantas miles arrojarlas por la ciudad y ver el mundo arder, gracias por la info.
Si, ver el mundo arder y los sistemas colapsar.
Enviado desde mi iPhone utilizando Tapatalk
Un mundo dominado por la Anarquía.
Las clases sociales son cosas del pasado, y la jerarquía del poder es basofia. Desde los más recónditos y extraños lugares de la mente humana emergen sombras cuyo impacto será devastador, que será capáz de borrar la delgada linea de la cordura, llevandonos al limite de la imaginación y más allá.
Si tan solo esa hermosa joven no hubiera conectado aquella memoria USB en esa computadora...
"No j*das, perdí mi trabajo de todo un año!"
"Dios! No guardé la partida!"
"¡Noooooo.... MI PORNOOOOOOO! "
Son los ultimos recuerdos de los pobres seres antes de desvanecerse a causa de un maniático con un hacha. Su argumento: "Juraría que vi una PC con Windows"
Los seres más audaces, fueron capaces de "evolucionar" a un nuevo despertar humano. Algunos viajaron a Groenlandia, en busca de una guarida donde protegerse de los "antiguos". Seres cuyo unico pecado fué no guardar la porno en su celular.
Pero los más inteligentes fueron capaces de ir al limite. tomaron una motherboard antigua, eliminaron los puertos USB, y crearon un nuevo estandar: "El puerto YuÉzVi", gracias a unas computadoras con Scientific Linux guardadas en un laboratorio del ejercito estadounidense, y a un hardware modificado para un uso "secreto" en el CERN.
Gracias a estos valientes e inteligentes seres, la humanidad renació en un nuevo mundo. Un mundo donde los USB eran vistos como "El mal en su más puro estado". Desde entonces se prohibió hablar sobre "El dia del LLE2QUA".
Pero una madrugada del 28 de Mayo del año 2015, a las 3:06 am, Martín, un hombre buena onda, pasa por esa calle poco transitada, en ese lugar desconocido, solo para toparse con una memoria YuÉzVi abandonada en el suelo mohoso...
O algo así...
(No me borren el comentario, está bueno
)Saludos!
#108
Python / Re:Encriptar y desencriptar utilizando el código Bacon
Mayo 28, 2015, 12:10:56 AM
No conocía ese método de cifrado. Bastante loco, debo decir. xD
Muy buen script!
Saludos!
Muy buen script!
Saludos!
#109
Python / Re:Simple navegador "anónimo" utilizando PySide y proxies de hola.org
Mayo 27, 2015, 04:48:47 PM #110
Presentaciones y cumpleaños / Re:Hi soy Yack
Mayo 27, 2015, 02:56:33 PM #111
Off Topic / Re:AdultFriendFinder |HAY ESPAÑOLES| download
Mayo 26, 2015, 07:05:45 PMCita de: IJ0]SEE link=topic=25535.msg87937#msg87937 date=1432644349]
No hay contraseñas.
Los correos pueden ser vendidos a terceros para que spameen ese email con promociones de algún nefasto producto milagro.
No es en sí la contraseña (que de por sí es grave), sino el uso de esa cuenta para otros fines que no sea conocer gente en internet (xD)
De cualquier forma, muchos de esos correos si contienen información personal de alguien (Dirección, teléfono, contactos...), así que se debe de proceder con cautela en esas condiciones.
#112
Presentaciones y cumpleaños / Re:Hola, me presento. :D
Mayo 26, 2015, 02:55:24 PM
Bienvenido a Underc0de rotten_ !
Disfruta tu estadía aquí, y no olvides que todos estamos aquí para aprender algo nuevo. También te pido que si tienes algun aporte lo publiques en el foro.
Saludos!
Disfruta tu estadía aquí, y no olvides que todos estamos aquí para aprender algo nuevo. También te pido que si tienes algun aporte lo publiques en el foro.

Saludos!
#113
Off Topic / Re:AdultFriendFinder |HAY ESPAÑOLES| download
Mayo 26, 2015, 08:04:04 AM
No creo que sea algo "ético" el publicar información privada de un numero bastante grande de personas.
Igual, yo no salgo ahí, así que me importa un bledo.
Igual, yo no salgo ahí, así que me importa un bledo.
#114
Off Topic / Re:Feliz Cumpleaños Rollth
Mayo 24, 2015, 02:30:56 AM
¿Quién es ROLLTH?
Nah, es broma. c:
Felicidades campeón. Esta comunidad te desea lo mejor en tu día.
Código: python
Saludos!
Nah, es broma. c:
Felicidades campeón. Esta comunidad te desea lo mejor en tu día.
print("Felicidades rollth")Saludos!
#115
Python / [Mini-Guia] Sockets en Python (3.4)
Mayo 22, 2015, 05:28:40 AM
La wikipedia nos dice:
CitarSocket designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiar cualquier flujo de datos, generalmente de manera fiable y ordenada.
Yo lo veo más como un vehiculo, por el que se transportan datos desde el punto A (cliente) al punto B (servidor), e incluso también del punto B (servidor) al punto A (cliente). Nuestro vehículo está hecho de 2 piezas fundamentales: Dirección IP, y Puerto. Por ultimo, necesitan de aceite (flujo de datos), gasolina (conexión), y tener licencia de conducir (conexión fiable [ahorita lo explico]).
Un socket está compuesto por 2 cosas:
- Una dirección IP (si utilizamos la familia de protocolos TCP/IP [(Transmission Control Protocol), Protocolo de Control de Transmisión])
- Un puerto (éste identifica un programa entre todos los que se conectan a Internet o comparten recursos)
Yo me dedicaré a explicar el protocolo TCP/IP, ya que es el más utilizado (y el único que he manejado xD).
Pues bien, el protocolo TCP/IP nos garantiza 3 cosas:
- Una conexión segura
- Envío completo de octetos (la información, pues)
- Garantiza que los octetos llegarán al destino en el orden que fueron enviados
Lo cual no ocurre en la alternativa de protocolo: UDP (User Datagram Protocol).
UDP solo nos garantiza que el mensaje llegue a su destino, sin importar si fué el primero en ser enviado o no, dandole más importancia al mensaje. Parece algo despistado, pero no lo es. UDP es usado en el streaming de audio (ya que la información es lo más importante).
Representación gráfica de un intento de conexión con TCP/IP:
No me detendré a explicar a fondo los segmentos SYN, y ACK, pero los "tantearé"
- El cliente envía una solicitud al servidor (esto es SYN, enviar un número de secuencia con el que se espera trabajar. Se inicia con un 1, significando que se está esperando respuesta del otro extremo) pidiendole permiso para establecer una conexión
- El servidor leerá la solicitud, y dependiendo de su funcionamiento y de la solicitud, aceptará o la rechazará. Envía la desición al cliente.
- El cliente interpretará la respuesta del servidor, y si obtuvo el permiso, envía una confirmación (esto es ACK, confirmar la llegada del mensaje), y comienza el flujo de datos hacia el servidor (ahora SYN vale 0, ya que se completó el proceso)
Esto tiene un nombre: three-way handshake.
¿Por que? Porque son 3 pasos para poder establecer conexión cliente-servidor.
¿Por que? Porque son 3 pasos para poder establecer conexión cliente-servidor.
Creando un socket en Python
[SERVER]
[SERVER]
En Python, contamos con una librería que contiene las clases y funciones para manejar un socket. La librería se llama socket:
Comenzamos importandola:
import socket
Bien, ahora, necesitamos crear un socket.
Para esto, necesitamos una variable que sirva como un socket:
mi_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Bien, dentro de la librería, hay una clase llamada socket. En ella, nosotros seleccionaremos los parametros para crear un socket bajo el protocolo TCP/IP.
"socket.AF_INET, socket.SOCK_STREAM" son los parametros que nos crearán un objeto socket TCP/IP.
Los tipos de sockets en Python son los siguientes:
- SOCK_STREAM: Este protocolo nos da una comunicación fiable de dos direcciones en un flujo de datos(TCP)
- SOCK_DGRAM: Este protocolo nos da una conexión no fiable. (UDP)
- SOCK_RAW: este protocolo es para acceder a los campos e interfaces internos de la red.
- SOCK_RDM: Este protocolo garantiza la llegada de paquetes pero no garantiza el orden de llegada
- SOCK_SEQPACKET: datagramas fiables y secundarios, de longitud fija, basado en la conexión.
- SOCK_PACKET: Coloca el socket en modo promiscuo en la que recibe todos los paquetes de la red.
Ahora, necesitamos una IP, y un puerto.
Para esto, contamos con el método bind. Este método nos permite designarle una IP y un puerto a nuestro socket, ya que por obvias razones, no podemos crear un socket bajo TCP sin una IP y un puerto. Es como andar por ahí sin tener un nombre y una cuenta en underc0de.
mi_socket.bind(("127.0.0.1", 9999))
bind toma una tupla con los datos a designar.
A nuestro objeto socket le hemos designado la IP 127.0.0.1 (Esta IP es especial, ya que es usada como una alternativa al localhost, es decir, usaremos una IP local, en lugar de una pública [la que usa nuestra computadora para Internet (Facebook, Google, underc0de, etc...]).
También, le hemos designado un puerto: 9999.
Es importante saber que es recomendable usar un puerto bastante alejado de los puertos 21, 22, 80 ... etc, ya que estos son puertos especiales que nuestro Sistema Operativo usa para comunicarse por Internet y por red local. Así que trata de seleccionar un puerto más alla de... 5000?
Bien, ahora, especificaremos cuantas "orejas" tendrá nuestro socket:
mi_socket.listen(5)Digo orejas porque, cada oreja estará escuchando a través del puerto que seleccionamos, esperando a que una conexión de un cliente llegue.
Al nosotros colocar un 5 entre los paréntesis, le estamos diciendo a nuestro socket que estamos esperando 5 posibles clientes.
Si llegamos a tener 5 clientes conectados, automáticamente no permitirá otro más.
Entonces, de repente llega una conexión, y nuestro servidor tiene que tomarla.
¿Qué metodo utilizaremos?
sc, addr = mi_socket.accept()
- sc: El objeto socket cliente. Este es nuetro cliente, representado con una variable llamada sc (puedes ponerle otro nombre, pero recomiendo dejarselo así)
- addr: Su IP
El método accept() espera una conexión. Cuando llega, este acepta la conexión, y procedemos a la parte que todos queremos.
Necesitamos recibir los datos que nuestro cliente nos está enviando.
Para esto, socket cuenta con un método llamado recv():
recibido = sc.recv(1024)
La variable recibido contendrá lo que el cliente envie hacia nosotros.
Bien, lo que está entre paréntesis es el limite de bytes que se esperan como respuesta. Si se excede el límite, no se recibe ni se acepta el resto del mensaje, dejandolo "mocho" (o cortado).
Ahora, ya tenemos lo que el cliente nos está diciendo, pero, ¿cómo le respondo?
Entonces, el método send() llega para salvarnos:
nuestra_respuesta = "Hola cliente, yo soy el servidor. Unete a underc0de!"
sc.send(nuestra_respuesta.encode('utf-8'))
El método send() envía una respuesta (texto u otros datos) al cliente.
Usamos la variable sc (cliente) para enviarle un mensaje.
Luego, antes de enviarle el mensaje, necesitamos codificarlo bajo algún estandar.
Generalmente usamos "utf-8" (Español, con esto, podemos enviar caracteres especiales como la ñ).
Entonces, tomamos nuestro mensaje, y seguido de un punto ( . ) escribimos encode, seguido de parentesis y el tipo de codificación a usar.
Entonces, cuando terminemos nuestro trabajo, necesitaremos cerrar nuestro objeto socket cliente, y también cerrar nuestro socket servidor;
sc.close()
mi_socket.close()
El método close() detiene y elimina los socket creados.
Código completo:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1", 9999))
s.listen(5)
print ("Servidor de Chat\n")
while True:
print ("Esperando conexión...")
sc, addr = s.accept()
print ("Cliente conectado desde: ", addr)
while True:
recibido = sc.recv(1024)
if recibido == "quit":
break
print ("Recibido: ", recibido)
nuestra_respuesta = "Hola cliente, yo soy el servidor. Unete a underc0de!"
sc.send(nuestra_respuesta.encode('utf-8'))
print ("Adios")
sc.close()
s.close()
OJO: Usamos "while True" para mantener el socket abierto, incluso si ya enviamos una respuesta. Esto evitará que se cierre, y no podamos seguir enviando/recibiendo información.
Y LISTO. Creamos un socket bajo el protocolo TCP/IP (el más usado en la Internet de este planeta y en Andromeda).
Creando un socket en Python
[CLIENTE]
[CLIENTE]
Crear un socket cliente es un poco más fácil, ya que nos ahorramos unas cuantas lineas de código.
Para esto, importamos la libreria socket, y creamos el socket cliente:
socket_cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Bien, ahora, no necesitamos ni bind, ni listen, ni nada.
Tan solo ocupamos un método: connect()
socket_cliente.connect(("127.0.0.1", 9999))
El método connect() toma la tupla con los datos: IP a conectarse, y el puerto donde está escuchando el servidor.
Ahora, ya establecimos una conexión con el servidor, entonces ya podemos enviar mensajes.
Volvemos a usar el método send()
while True:
mensaje = "Hola, soy el cliente, y ya me uní a underc0de!"
socket_cliente.send(mensaje.encode("utf-8"))
Usamos nuestro objeto cliente para enviarlo.
Volvemos a codificar el mensaje en utf-8, para poder incluir caracteres que en el idimoa inglés no hay.
Entonces, nosotros querremos recibir las respuestas del servidor. Para esto, volvemos a recv()
recibido = socket_cliente.recv(1024)
print("Recibido: ", recibido)
El socket cliente estará esperando un máximo de 1024 bytes como respuesta.
Imprimimos lo que el servidor nos envió.
Y por ultimo, para terminar el programa cerramos el socket cliente:
socket_cliente.close()
Código completo:
import socket
socket_cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_cliente.connect(("localhost", 5000))
while True:
mensaje = str(input(">> "))
socket_cliente.send(mensaje.encode('utf-8'))
recibido = socket_cliente.recv(1024)
print("Recibido: ", recibido)
print ("Adios")
socket_cliente.close()
Creando un pequeño Port Scanner
Un Port Scanner (o escaner de puertos) se conectará a una ip, y a un rango determinado de puertos, con la finalidad de descubrir puertos abiertos por donde un tercero puede atacar un sistema.
# Coded by Barlan. 2015
import socket
import sys
if len(sys.argv) != 4:
print("[!] Use: scan.py [IP_to_scan] [Initial_Port] [Final_Port]")
sys.exit(1)
def connect(IP, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(0.6)
try:
s.connect((IP, port))
return(1)
except:
return(2)
IP = str(sys.argv[1])
ip = int(sys.argv[2])
fp = int(sys.argv[3])
print("[*] Connecting to %s, scanning from %s to %s ..." % (IP, ip, fp))
for port in range(ip, fp+1):
e = connect(IP, port)
if e == 2:
print("[-] %s closed." % port)
else:
print("[+] %s open." % port)
print("Finished!")
Bien, importamos la librería sys para usar argumentos.
Entonces nos vamos a la función connect.
Esta función espera una IP y un puerto.
Entonces en ella creamos un socket cliente.
(El método setdefaulttimeout() sirve para declarar cuantos segundos podemos esperar a que el servidor nos conteste. Esto es útil cuando no queremos esperar mucho por una conexión. SI te pones a pensar, esto es lo que usan en los videojuegos para evitar tener a un jugador ocupando un espacio)
Llegamos al bloque try/except.
Enviamos una solicitud de conexión a la IP.
SI la conexión fué exitosa (osea, que el puerto está abierto), retorna un valor 1.
En caso contrario (que el puerto esté cerrado) retorna un valor 2.
Entonces, salimos de la función y nos vamos a la linea 23:
for port in range(ip, fp+1):
e = connect(IP, port)
if e == 2:
print("[-] %s closed." % port)
else:
print("[+] %s open." % port)
Por cada numero dentro del rango del puerto inicial hasta el final, ejecutar la función connect (pasandole una IP, y un puerto).
Si la función retorna un valor 1, entonces nos imprime el puerto que está abierto.
Pero si nos retorna un valor 2, entonces nos imprime el puerto que está cerrado.
Si creen que pueda añadirse más contenido favor de reportarmelo.

Te ha hablado Barlan y te deseo... buenas noches.
#116
Python / Manejo de Excepciones en Python
Mayo 21, 2015, 02:55:35 PMManejo de Excepciones en Python
Citar
Las excepciones son errores detectados por Python durante la ejecución del programa. Cuando el intérprete se encuentra con una situación excepcional, como el intentar dividir un número entre 0 o el intentar acceder a un archivo que no existe, este genera o lanza una excepción, informando al usuario de que existe algún problema.
En Python, contamos con 3 palabras reservadas (y una palabra opcional) para el manejo de excepciones:
- try
- except
- finally
- else (solo en algunos casos)
Además, contamos con tipos de errores definidos por Python.
Te describiré los principales (o los más comunes):
- ImportError: Ocurre cuando Python no encuentra el modulo que intentamos importar.
- IndexError: Cuando nosotros buscamos algo en una tupla o diccionario más alla de lo que realmente posee (ejemplo: Leer el valor #5 de una tupla que contiene solo 3 cosas).
- KeyError: Cuando no se encuentra una clave en un Diccionario.
- KeyboardInterrupt: Ocurre cuando nosotros presionamos Ctrl + C. Generalmente presionamos esas teclas cuando caemos en un bucle infinito y queremos pararlo sin cerrar la consola.
- NameError: Ocurre cuando usamos una variable que no existe.
- SyntaxError: Se muestra cuando escribimos mál alguna linea de código. Ejemplo: Usar print sin los paréntesis (Python 3.4)
- TypeError: Ocurre cuando usamos un método en un tipo de variable que no lo posee. Ejemplo: Buscar una clave en una tupla (Usamos un método de un diccionario en una tupla).
- ValueError: Valor del argumento no apropiado (cuando le designamos un valor a un tipo de variable que no es para eso).
Si buscas más tipos de errores, consulta la documentación oficial de Python 3.4: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Bloque Try-Except
En try, nosotros colocaremos el código que puede llegar a un error.
En except, "atraparemos" el error lanzado por el interprete para evitar que el programa se detenga.
try:
print(10 / 0)
except:
print("No se puede dividir entre cero!")
Lo anterior trataría de dividir 10 entre 0 (lo cual es imposible).
Si nosotros no escribimos el bloque except... ocurre lo siguiente:
CitarTraceback (most recent call last):
File "C:\Users\Barlan\Desktop\ejemplos.py", line 1, in <module>
print(10 / 0)
ZeroDivisionError: division by zero
Nos lanza un error tipo ZeroDivisionError (Error de división entre cero), lo cual nos indica que no se puede dividir un numero entre 0.
Pero si nosotros escribimos el bloque except...

Como podemos ver, el programa atrapa el error, y evita que se interrumpa a la fuerza el programa a causa de ello.
Podemos también esperar un tipo de error (de los mencionados al principio):
try:
x = open("Hola.txt", "r")
print(x)
except (IOError):
print("No se encontró el archivo.")
print("Ja! Seguí ejecutandome ;)")
Si el archivo "Hola.txt" no existe en el directorio donde se encuentra el archivo .py, nos lanzará un error tipo IOError.
Para evitar que se cierre el programa, atrapamos ese error con except, e imprimimos que no se encontró el archivo.
Y como el programa no se cerró, se imprimirá "Ja! Segui ejecutandome
")También podemos atrapar varios tipos de errores:
try:
x = open("Hola.txt", "r")
y = x.readlines()
print(y[5])
except (IOError, IndexError): # Posiblemente ocurra alguno de estos 2 errores)
print("Ocurrio un problema.")
print("Ja! Seguí ejecutandome ;)")
Uso de Else en Excepciones
Usamos else cuando en el bloque try, no se produjo ningún error.
Además, usar else evita que añadamos más lineas de código al try, evitando así más posibles errores.
import sys
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print('no pude abrir', arg)
else:
print(arg, 'tiene', len(f.readlines()), 'lineas')
f.close()
El programa anterior importa un modulo: sys.
Este modulo tiene un método de leer argumentos al momento de ejecutar nuestro programa (argv)
Después del nombre del programa, nosotros escribimos el nombre del archivo de texto a leer.
El programa tratará de calcular cuantas lineas tiene el archivo.
Si el programa no encuentra el archivo, nos lanza un error:
Citarno pude abrir [nombre del archivo de texto]
Pero en caso de que si pudimos leer el contenido y calcular las lineas, else se encargará de notificarlo:

CitarHola.txt tiene 5 lineas
El bloque finally
El bloque de instrucciones finally se ejecutará siempre, sin importar si ocurrió algún error o no.
try:
print(x / 10)
except (NameError):
print("Error. No existe la variable 'x'")
else:
print("Soy el else.")
finally:
print("Yo me ejecuto porque se me pega la gana! Thug Life 8)")
Generalmente se usa para labores de limpieza (como limpiar la pantalla, o pasar a otra función... etc).
raise
raise nos permite crear nuestras propias excepciones (usando como base las pre-establecidas por Python).
Ejemplo:
>>> raise NameError('Hola')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: Hola
Aquí forzamos a que ocurriera una Excepción tipo NameError, seguido de un mensaje personalizado.
Otro ejemplo:
try:
raise NameError("Hola")
except NameError:
print("Voló una excepción!")
raise
Vemos que raise está solo. Esto significa que hubo una excepción, pero que no quisimos manejarla. Por lo que print() hará el resto.
Excepciones desde clases
CitarLos programas pueden nombrar sus propias excepciones creando una nueva clase excepción. Las excepciones, típicamente, deberán derivar de la clase Exception, directa o indirectamente. Por ejemplo:
class MiError(Exception):
def __init__(self, valor):
self.valor = valor
def __str__(self):
return repr(self.valor)
try:
raise MiError(2*2)
except Exception as e:
print("Ocurrió una excepción. Valor:", e)
raise MiError("Oops! Un error!")
Primero, llegamos al try/except:
Tratamos de calcular 2*2.
Entonces generamos una excepción.
CitarOcurrió una excepción. Valor: 4
Luego, forzamos a la clase a que nos genera una excepción con el mensaje "Oops! Un error!"
CitarUna cláusula finally siempre es ejecutada antes de salir de la declaración try, ya sea que una excepción haya ocurrido o no. Cuando ocurre una excepción en la cláusula try y no fue manejada por una cláusula except (o ocurrió en una cláusula except o else), es relanzada luego de que se ejecuta la cláusula finally.
def dividir(x, y):
try:
result = x / y
except ZeroDivisionError:
print("¡División por cero!")
else:
print("El resultado es: ", result)
finally:
print("Instrucción finally.")
dividir(2,1)
dividir(2,0)
dividir("hi", "sudo")
CitarEl resultado es: 2.0
Instrucción finally.
¡División por cero!
Instrucción finally.
Traceback (most recent call last):
File "ejemplos.py", line 13, in <module>
dividir("hi", "sudo")
File "ejemplos.py", line 3, in dividir
result = x / y
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Como podemos ver, no manejamos el error TypeError en el exception, por lo que el programa se interrumpe, y procede a imprimir el mensaje de error.
La "acción de limpieza"
Llegará un momento en el que el objeto creado ya no es requerido en más lineas de código. Por ejemplo, al leer un archivo y guardar su contenido en una variable, ya no necesitaremos tener el archivo abierto (esto puede provocar errores):
for linea in open("miarchivo.txt"):
print(linea, end="")
CitarEl problema con este código es que deja el archivo abierto por un periodo de tiempo indeterminado luego de que esta parte termine de ejecutarse. Esto no es un problema en scripts simples, pero puede ser un problema en aplicaciones más grandes. La declaración with permite que objetos como archivos sean usados de una forma que asegure que siempre se los libera rápido y en forma correcta:
with open("miarchivo.txt") as f:
for linea in f:
print(linea, end="")
La instrucción with nos permite hacer algo solo durante algunas lineas de código. Cuando esa linea termine su trabajo, automáticamente el archivo de texto se cerrará, evitando posibles errores futuros.
Errores, sugerencias y críticas abajo en los comentarios.
Te ha hablado Barlan y te deseo... buenas noches.
#117
Python / Re:Programación Orientada a Objetos
Mayo 20, 2015, 10:56:06 PMYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muy buen trabajo @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.
Solo te voy hacer una acotación:
Clase
El nombre de la clase siempre para poder identificarla comienza con la primer letra en mayúscula. Ejemplo: "Clase", pero cuando esta posee un nombre compuesto la primera de cada palabra también van en mayúscula. Ejemplo "MiClase".
Objeto
A diferencia de la clase el objeto se escribe todo en minúscula. Ejemplo "objeto", pero cuando posee un nombre compuesto, la segunda palabra capitalizara su primera letra. Ejemplo "miObjeto".
Saludos
Acabo de añadirlo al post.
Saludos!
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muy bueno , últimamente me estoy documentando sobre POO y esto viene de perlas.
Por cierto , me encantó la despedida del tópico a lo Dross jajajajaja
Pues espero y esto por lo menos te ayude a complementar o a disipar dudas. xD
Jajaja, llevo varios aportes queriendo decir "Te ha hablado Barlan y te deseo... buenas noches"

Saludos!
#118
Python / Re:Programación Orientada a Objetos
Mayo 20, 2015, 03:26:29 PMYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
@You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, me parece un excelente aporte! Felicitaciones!
Te dejo + Puntos
Saludos!
ANTRAX
Gracias ANTRAX. xD
#119
Python / [Guia] Programación Orientada a Objetos
Mayo 20, 2015, 03:16:01 PMProgramación Orientada a Objetos (POO)

Fuente: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
El Paradigma de la Programación Orientada a Objetos es:
Ver cada cosa como un objeto, con sus funciones y atributos, y que todo objeto proviene de una "plantilla" mayor (un molde, una "clase").
Propone modelar todo en base a clases y objetos. Este paradigma consiste en el uso de los conceptos de herencia, cohesión, abstracción, polimorfismo, acomplamiento y encapsulamiento.
Lo primero: La clase
La clase es el molde de donde derivan otros objetos.
[Añadido]
Para el nombre de una clase, siempre se debe de comenzar con mayuscula. Esto tiene un nombre: Upper Camel Case (porque parece la espalda de un camello)
Ejemplo: Clase, Animal, Robot, etc...
Pero si el nombre de la clase es "complejo" (osea, si está compuesto por algunas palabras), entonces cada inicio de palabra comenzará en mayusculas:
Ejemplo: MiClase, AnimalBosque, EscanerPuertos, ClaseDeEjemplo, etc...
Citar
Por ejemplo si nos ponemos a pensar en gatos. ¿Cómo podemos reconocer que un gato es en si un gato y no un perro? Bueno, todo gato tiene ojos, nariz, boca, 4 patas, mucho pelo, una cola, orejas, dice miau, ronronea y tienen sus garras. Esto seria la plantilla del gato y con lo mencionado anteriormente también podemos imaginarnos uno. ¿Pero fuimos específicos en sus características? Cada uno de nosotros podemos pensar en un gato pero no sera el mismo. Cada uno hemos pensado en una instancia de un gato acorde a las características que hemos mencionado. Yo pude haber pensado en un gato gordo de pelaje rojo. Mientras que otro habrá pensado en un gato virtual de ojos grande de color naranja.
Usemos el ejemplo del gato.
Creamos una clase llamada gato:
class Gato:
def __init__(self):
print("Ha nacido un gato.")
def miau(self):
print("Miau!")
g = Gato() # Imprimirá "Ha nacido un gato."
g.miau() # Imprimirá "Miau!"
__init__
Lo primero:
Vemos ahí una función llamada __init__().
En otros lenguajes de programación puede llamarse "constructor".
__init__() es una función especial que siempre se ejecutará al ser instanciado un objeto. Además, sirve como constructora de variables (osea, aquí crearemos las variables que serán usadas en todas las funciones de la clase Gato).
Para esto, usamos una palabra especial: self
class Gato:
def __init__(self, energia, hambre):
self.energia = energia
self.hambre = hambre
print("Un gato ha nacido!")
def miau(self):
print("Miau!")
Como podemos ver, __init__ recibe "3" variables: self, energía y hambre.
En funciones, gracias al atributo "self" es posible utilizar las variables declaradas en __init__ dentro de toda la clase.
Luego, tenemos 2 variables: energía y hambre. Estas variables serán enviadas a la clase a través del objeto instanciado.
Además, tenemos la función miau(). Y como sabemos, esta no se ejecutará hasta que nosotros la llamemos.
Ahora, para instanciar un objeto, hacemos lo siguiente:
g = Gato(5,3) # Imprimirá "Ha nacido un gato."
g.miau() # Imprimirá "Miau!"
g es un objeto de la clase Gato.
Podemos ver que al instanciar el objeto, le pasamos 2 numeros a la clase Gato: 5 y 3.
Estos numeros serán las variables energia y hambre que serán usadas en toda la clase.
Ahora, g podrá usar las funciones que se encuentren en la clase. Para eso, usamos un punto, seguido del nombre de la función a llamar.
Entonces, añadimos más funciones a nuestra clase:
class Gato:
def __init__(self, energia, hambre):
self.energia = energia
self.hambre = hambre
print("Un gato ha nacido!")
def miau(self):
print("Miauuu!")
def tomar_leche(self, leche_en_litros):
self.hambre += leche_en_litros
print ("El gato toma su leche")
def acariciar(self):
print ("Prrrrr...")
def jugar(self):
if self.energia <= 0 or self.hambre <=1:
print ("El gato no quiero jugar")
else:
self.energia -=1
self.hambre -= 2
print ("Al gato le encanta jugar")
def dormir(self, horas):
self.energia += horas
print ("El gato tomo una siesta")
Instanciamos un objeto, y procedemos a ejecutar cada función:
gato = Gato(7,5)
gato.miau()
gato.tomar_leche(2)
gato.acariciar()
gato.jugar()
gato.dormir(4)
Citar
Un gato ha nacido!
Miauuu!
El gato toma su leche
Prrrrr...
Al gato le encanta jugar
El gato tomo una siesta
Nótese que en la función jugar(), le restamos energía y hambre al gato, haciendo que en un determinado momento, el gato ya esté "cansado", y ya no quiera jugar.
gato = Gato(7,5)
for i in range(3):
gato.jugar()
Haciendo lo anterior,ejecutamos 3 veces la función jugar()
Y entonces...
Citar
Un gato ha nacido!
Al gato le encanta jugar
Al gato le encanta jugar
El gato no quiero jugar
Como vemos, al final, el gato "no quiere jugar", porque ya no tiene energías, o porque tiene hambre.
Para esto, solo hace falta ejecutar:
- dormir() --> Para recuperar energía.
- tomar_leche() --> Para tener menos hambre.
Herencia
(no, no hablo de dinero)
La Herencia es cuando una clase HEREDA de otra clase todo lo de ella (atributos, métodos...).
Se puede decir que, es una clase extendida, ya que ella poseerá sus funciones, y además, poseerá todo lo que contenga la clase a heredar.
class Felino:
def __init__(self):
print("Ha nacido un felino!")
def rugido(self):
print("El felino dió un rugido.")
class Gato(Felino):
def __init__(self, energia, hambre):
self.energia = energia
self.hambre = hambre
print("Un gato ha nacido!")
def miau(self):
print("Miauuu!")
def tomar_leche(self, leche_en_litros):
self.hambre += leche_en_litros
print ("El gato toma su leche")
def acariciar(self):
print ("Prrrrr...")
def jugar(self):
if self.energia <= 0 or self.hambre <=1:
print ("El gato no quiero jugar")
else:
self.energia -=1
self.hambre -= 2
print ("Al gato le encanta jugar")
def dormir(self, horas):
self.energia += horas
print ("El gato tomo una siesta")
Al hacer esto la clase Gato ya hereda de la clase Felino y con ello hereda las variables y funciones del Felino. Es decir si ejecutamo gato.rugido() ahora el gato dará un rugido.
gato = Gato(3,3)
# Se creo un gato
gato.rugido()
# El felino dio un rugido
Herencia Múltiple
La Herencia múltiple es cuando una clase hereda de varias clases (no solo de una).
En los ejemplos, podemos hacer que la clase Gato herede de Felino y de Mascota:
class Mascota:
def __init__(self):
print("Se creo la mascota")
def sientate(self):
print("La mascota se sentó")
class Felino:
def __init__(self):
print("Ha nacido un felino!")
def rugido(self):
print("El felino dió un rugido.")
class Gato(Felino, Mascota):
def __init__(self, energia, hambre):
self.energia = energia
self.hambre = hambre
print("Un gato ha nacido!")
def miau(self):
print("Miauuu!")
def tomar_leche(self, leche_en_litros):
self.hambre += leche_en_litros
print ("El gato toma su leche")
def acariciar(self):
print ("Prrrrr...")
def jugar(self):
if self.energia <= 0 or self.hambre <=1:
print ("El gato no quiero jugar")
else:
self.energia -=1
self.hambre -= 2
print ("Al gato le encanta jugar")
def dormir(self, horas):
self.energia += horas
print ("El gato tomo una siesta")
Ahora cuando creemos una instancia del gato podremos usar tanto lo que herede de Felino como lo que herede de Mascota.
gato = Gato(3,3)
# Se creo un gato
gato.rugido()
# El felino dio un rugido
gato.sientate()
# La mascota se sentó
Polimorfismo
CitarEl polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica
o también:
CitarCapacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación.
class Gato:
def ruge(self):
print("El gato maulla")
class Perro:
def ruge(self):
print("El perro ladra")
def rugir(animal):
animal.ruge()
gato = Gato()
perro = Perro()
rugir(gato)
# 'El gato maulla'
rugir(perro)
# 'El perro ladra'
Como vemos, ambas clases tiene una función identica, pero en la función rugir() (la que está afuera), nosotros "seleccionamos" el animal (clase) que rugirá.
Encapsulamiento
CitarLo que hace el encapsulamiento es impedir la visualización o acceso de las variables de manera directa. En otros lenguajes esto se logra al momento de declarar la variable como public y private, sin embargo en python es algo distinto. Para declarar una variable o función como privada, el nombre de la función o variable a ser declarado debe comenzar con doble guion abajo. Esto bastará para que lo declarado sea reconocido como privado.
class Ejemplo:
def __init__(self):
print("Hola")
def publica(self):
print("Soy publica!")
def __privada(self):
print("Soy privada!")
e = Ejemplo()
print(e.publica())
print(e.__privada())
Citar
Traceback (most recent call last):
Hola
Soy publica!
None
File "C:\Users\Barlan\Desktop\ejemplos.py", line 13, in <module>
print(e.__privada())
AttributeError: 'Ejemplo' object has no attribute '__privada'
Como vemos, no "encuentra" la función __privada, ya que es privada, no se puede acceder a ella. Solo sirve internamente.
También podemos declarar variables privadas:
class ClaseOtroEjemplo:
def __init__(self):
self.publico = 'variable publica'
self.__privado = 'variable privada'
def obtener_privado(self):
print self.__privado
En __init__ declaramos 2 variables: una pública y una privada.
No se puede acceder a una función privada de manera externa.
Pero en caso necesario, necesitamos una función que devuelva lo que la variable privada contiene.
Entendemos entonces, que la variable privada es solo de lectura, y no se puede modificar.
En cambio, la pública si puede ser consultada, y modificada.
¿Errores, Críticas, Consejos?
Abajo en los comentarios. xD
Te ha hablado Barlan y te deseo... buenas noches.
#120
Presentaciones y cumpleaños / Re:Hola a todos
Mayo 20, 2015, 04:00:37 AMYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Gracias Barlan!
Y la verdad no tengo planes de salir de aquíespero seguir aprendiendo y crecer junto a esta comunidad
Pues enhorabuena DexX!
Esperemos y encuentres todo lo que necesites aquí, y espero ver algún aporte tuyo.

Saludos!


