Menú

Mostrar Mensajes

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.

Mostrar Mensajes Menú

Mensajes - JaAViEr

#1
Python / Re:Operadores lógicos y Condicionales
Mayo 20, 2015, 07:01:54 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
CitarEl operador lógico or es usado para negar...

¿Nadie lo notó?  ;D

Saludos!
En lo personal voy directo al código siempre :p
#2
Python / Re:Operadores lógicos y Condicionales
Mayo 18, 2015, 01:59:26 AM
Todo bien, si no te molesta, te puedo enviar un par de ejemplos por MP y si te parecen, los añades..

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#3
Python / Re:Operadores lógicos y Condicionales
Mayo 16, 2015, 03:52:19 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Buen día!

Está bastante completo, estaría bueno que añadas el uso de "is" en el condicional if.
Gracias por el material!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Acabo de agregarlo.  :)

Saludos!
¡Genial!
Hey, no es de mala leche, solo con fines constructivos, pero pensé que darías ejemplos de "is" en cuanto a comparativa de tipos de variables. Por ejemplo if variable is INT(): blablabla

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#4
Python / Re:Operadores lógicos y Condicionales
Mayo 15, 2015, 07:35:05 PM
Buen día!

Está bastante completo, estaría bueno que añadas el uso de "is" en el condicional if.
Gracias por el material!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#5
Hola!

Siguiendo con las prácticas en PyQT4, traigo una aplicación "juego" que luce así:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Enseguida explico más o menos en que consiste.

La aplicación se encarga de generar Números/Letras/Números y Letras (según cada gusto) de forma totalmente aleatoria, con la longitud que tu desees. Además de seleccionar un tiempo "límite" para memorizar el valor generado, una vez acabado este tiempo límite, el valor es oculto, para que tu escribas la respuesta y evaluar si lo que memorizaste corresponde realmente a la cifra que generó y mostró por los X segundos que lo configuraste.

Una vez lanzada la aplicación y configurada, damos clic en ¡Establecer Configuración! , lo que nos da un nuevo cuadro, que luce así:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Damos clic en "Comenzar" y tendremos esto:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Una vez acabado el tiempo, el QLineEdit se resetea para que ingreses lo que memorizaste:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Una vez ingresado el valor que memorizaste, presiona ENTER, si el valor fue correcto, entonces tu racha aumentará en +1 , de lo contrario se reiniciará a 0.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Sin más que agregar, el código:
Código: python
# -*- coding: utf-8 -*-
'''
Juego Memoriza :: Entrenando tu Memoria
Autor: JaAViEr | 0x5d
Twitter: https://twitter.com/javieresteban__
Website: http://codigo.ga
'''
from PyQt4 import QtCore, QtGui
import sys
from random import randint, sample
import threading
from time import sleep

try:

_fromUtf8 = QtCore.QString.fromUtf8

except AttributeError:

def _fromUtf8(s):

return s
try:

_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig, _encoding)

except AttributeError:

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig)

class formA(QtGui.QWidget):

def __init__(self, parent=None):

self.largo = 4
QtGui.QWidget.__init__(self, parent)
self.resize(359, 131)
self.gridLayout = QtGui.QGridLayout(self)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.tabWidget_inicial = QtGui.QTabWidget(self)
self.tabWidget_inicial.setStyleSheet(_fromUtf8("font-weight:bold;"))
self.tabWidget_inicial.setObjectName(_fromUtf8("tabWidget_inicial"))
self.tab = QtGui.QWidget()
self.tab.setObjectName(_fromUtf8("tab"))
self.gridLayout_2 = QtGui.QGridLayout(self.tab)
self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
self.label_tipo = QtGui.QLabel(self.tab)
self.label_tipo.setObjectName(_fromUtf8("label_tipo"))
self.gridLayout_2.addWidget(self.label_tipo, 0, 2, 1, 1)
self.pushButton_comenzar = QtGui.QPushButton(self.tab)
self.pushButton_comenzar.setObjectName(_fromUtf8("pushButton_comenzar"))
self.gridLayout_2.addWidget(self.pushButton_comenzar, 2, 0, 1, 3)
self.spinBox_largo = QtGui.QSpinBox(self.tab)
self.spinBox_largo.setMinimum(1)
self.spinBox_largo.setProperty("value", 4)
self.spinBox_largo.setObjectName(_fromUtf8("spinBox_largo"))
self.gridLayout_2.addWidget(self.spinBox_largo, 1, 0, 1, 1)
self.comboBox_tipo = QtGui.QComboBox(self.tab)
self.comboBox_tipo.setObjectName(_fromUtf8("comboBox_tipo"))
self.comboBox_tipo.addItem(_fromUtf8(""))
self.comboBox_tipo.addItem(_fromUtf8(""))
self.comboBox_tipo.addItem(_fromUtf8(""))
self.gridLayout_2.addWidget(self.comboBox_tipo, 1, 2, 1, 1)
self.label_largo = QtGui.QLabel(self.tab)
self.label_largo.setObjectName(_fromUtf8("label_largo"))
self.gridLayout_2.addWidget(self.label_largo, 0, 0, 1, 1)
self.label_tiempo = QtGui.QLabel(self.tab)
self.label_tiempo.setObjectName(_fromUtf8("label_tiempo"))
self.gridLayout_2.addWidget(self.label_tiempo, 0, 1, 1, 1)
self.spinBox_tiempo = QtGui.QSpinBox(self.tab)
self.spinBox_tiempo.setPrefix(_fromUtf8(""))
self.spinBox_tiempo.setObjectName(_fromUtf8("spinBox_tiempo"))
self.spinBox_tiempo.setMinimum(1)
self.gridLayout_2.addWidget(self.spinBox_tiempo, 1, 1, 1, 1)
self.tabWidget_inicial.addTab(self.tab, _fromUtf8(""))
self.gridLayout.addWidget(self.tabWidget_inicial, 0, 0, 1, 1)

self.valores_elementos()
self.connect(self.pushButton_comenzar, QtCore.SIGNAL("clicked()"), self.establecer_configuracion)

def establecer_configuracion(self):

self.tiempo = int(self.spinBox_tiempo.value())
self.largo = int(self.spinBox_largo.value())
form_b.show()
form_b.label_segundos_restantes.setText("%s segundos" % self.tiempo)


def valores_elementos(self):

self.setWindowTitle(_translate("self", "Memoriza :: www.codigo.ga", None))
self.label_tipo.setText(_translate("self", "Tipo de juego", None))
self.pushButton_comenzar.setText(_translate("self", "¡Establecer configuración!", None))
self.comboBox_tipo.setItemText(0, _fromUtf8("Números"))
self.comboBox_tipo.setItemText(1, _translate("self", "Letras", None))
self.comboBox_tipo.setItemText(2, _translate("self", "Números y Letras", None))
self.label_largo.setText(_translate("self", "Largo", None))
self.label_tiempo.setText(_translate("self", "Tiempo para memorizar", None))
self.spinBox_tiempo.setSuffix(_fromUtf8(" segundos"))
self.tabWidget_inicial.setTabText(self.tabWidget_inicial.indexOf(self.tab), _translate("self", "Configuración de Memoriza", None))


class formB(QtGui.QWidget):

def __init__(self, parent=None):

self.valor_generado = ""
self.racha = 0
QtGui.QWidget.__init__(self, parent)
self.setObjectName(_fromUtf8("self"))
self.resize(215, 104)
self.gridLayout = QtGui.QGridLayout(self)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.splitter = QtGui.QSplitter(self)
self.splitter.setOrientation(QtCore.Qt.Vertical)
self.splitter.setObjectName(_fromUtf8("splitter"))
self.label_memoriza = QtGui.QLabel(self.splitter)
self.label_memoriza.setStyleSheet(_fromUtf8("font-weight: bold; font-size: 17px;"))
self.label_memoriza.setObjectName(_fromUtf8("label_memoriza"))
self.lineEdit_valor_memorizar = QtGui.QLineEdit(self.splitter)
self.lineEdit_valor_memorizar.setReadOnly(True)
self.lineEdit_valor_memorizar.setObjectName(_fromUtf8("lineEdit_valor_memorizar"))
self.gridLayout.addWidget(self.splitter, 0, 0, 1, 2)
self.label_tiempo_restante = QtGui.QLabel(self)
self.label_tiempo_restante.setObjectName(_fromUtf8("label_tiempo_restante"))
self.gridLayout.addWidget(self.label_tiempo_restante, 1, 0, 1, 1)
self.label_segundos_restantes = QtGui.QLabel(self)
self.label_segundos_restantes.setStyleSheet(_fromUtf8("font-style: italic; font-weight: bold;"))
self.label_segundos_restantes.setObjectName(_fromUtf8("label_segundos_restantes"))
self.gridLayout.addWidget(self.label_segundos_restantes, 1, 1, 1, 1)
self.pushButton_comenzar = QtGui.QPushButton(self)
self.pushButton_comenzar.setObjectName(_fromUtf8("pushButton_comenzar"))
self.gridLayout.addWidget(self.pushButton_comenzar, 3, 0, 1, 2)
self.label_racha = QtGui.QLabel(self)
self.label_racha.setObjectName(_fromUtf8("label_racha"))
self.gridLayout.addWidget(self.label_racha, 2, 0, 1, 1)
self.label_valor_racha = QtGui.QLabel(self)
self.label_valor_racha.setStyleSheet(_fromUtf8("font-weight:  bold;"))
self.label_valor_racha.setObjectName(_fromUtf8("label_valor_racha"))
self.gridLayout.addWidget(self.label_valor_racha, 2, 1, 1, 1)

self.connect(self.pushButton_comenzar, QtCore.SIGNAL("clicked()"), self.empezar)
self.connect(self.pushButton_comenzar, QtCore.SIGNAL("returnPressed()"), self.empezar)
self.connect(self.lineEdit_valor_memorizar, QtCore.SIGNAL("returnPressed()"), self.cambia_valor)
self.renombrar_elementos_widget()
QtCore.QMetaObject.connectSlotsByName(self)

def cambia_valor(self):

qstring = str(self.lineEdit_valor_memorizar.text())
# mensaje = QtGui.QMessageBox()

if qstring == self.valor_generado and len(self.valor_generado) > 0 and len(qstring) > 0:

# mensaje.setText(_fromUtf8("¡Respuesta correcta!"))
self.pushButton_comenzar.setFocus(True)
self.lineEdit_valor_memorizar.setText("")
self.valor_generado = False
self.racha = self.racha + 1
self.label_valor_racha.setText(str(self.racha))
self.empezar()

else:

self.lineEdit_valor_memorizar.setText("")
self.valor_generado = False
# mensaje.setText(_fromUtf8("¡Respuesta Incorrecta!"))
self.racha = 0
self.correr = False
self.label_valor_racha.setText("0")
self.empezar()

# mensaje.exec_()

def generar_numero(self):

valor = ""
for i in range(form_a.largo,):

valor = valor + str(randint(0, 9))

return valor

def generar_letras(self):

valor = ""
lista = list("abcdefghijklmnopqrstuvwxyz")
len_lista = len(lista) - 1
for i in range(form_a.largo):

valor = valor + lista[randint(0,len_lista)]

return valor

def generar_alfanumerico(self):

valor = ""
lista_abc = list("abcdefghijklmnopqrstuvwxyz")
lista_digitos = list("0123456789")
largo = form_a.largo / 2
len_lista_abc = len(lista_abc) - 1
len_lista_digitos = len(lista_digitos) - 1
for i in range(largo):

valor = valor + lista_abc[randint(0,len_lista_abc)]

for i in range(largo):

valor = valor + lista_digitos[randint(0,len_lista_digitos)]

return ''.join(sample(valor, len(valor)))

def empezar(self):

opcion = form_a.comboBox_tipo.currentIndex()
self.lineEdit_valor_memorizar.setReadOnly(True)
if opcion == 0:
self.valor_generado = self.generar_numero()
self.lineEdit_valor_memorizar.setText(self.valor_generado)
elif opcion == 1:
self.valor_generado = self.generar_letras()
self.lineEdit_valor_memorizar.setText(self.valor_generado)
elif opcion == 2:
self.valor_generado = self.generar_alfanumerico()
self.lineEdit_valor_memorizar.setText(self.valor_generado)

t = Timer()
t.start()

def renombrar_elementos_widget(self):

self.setWindowTitle(_translate("self", "Tablero", None))
self.label_memoriza.setText(_translate("self", "<html><head/><body><p align=\"center\"><span style=\" font-size:13pt;\">Memoriza</span></p></body></html>", None))
self.lineEdit_valor_memorizar.setText(_translate("self", "", None))
self.label_tiempo_restante.setText(_translate("self", "Tiempo restante", None))
self.label_segundos_restantes.setText(_translate("self", "10 segundos", None))
self.label_racha.setText(_translate("self", "Racha", None))
self.label_valor_racha.setText(_translate("self", "0", None))
self.pushButton_comenzar.setText(_translate("self", "Comenzar", None))

class Timer(threading.Thread):

def __init__(self, parent=None):

threading.Thread.__init__(self, parent)

def run(self):

tiempo_restante = form_a.tiempo

for i in range(form_a.tiempo):
form_b.label_segundos_restantes.setText("%s segundos" % tiempo_restante)
tiempo_restante = tiempo_restante - 1
sleep(1)

form_b.label_segundos_restantes.setText("0 segundos")
form_b.lineEdit_valor_memorizar.setText("")
form_b.lineEdit_valor_memorizar.setReadOnly(False)
form_b.lineEdit_valor_memorizar.setFocus(True)

app = QtGui.QApplication(sys.argv)
form_b = formB()
form_a = formA()
form_a.show()
app.exec_()


Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos, Javier.
#6
Python / Re:[LoaderTk] Compartiendo código.
Marzo 07, 2015, 03:53:09 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
se me paso por alto ese detalle  ;D digamos que se llama array o tupla.
Está bien, el for de Python, itera lo que le pases jajajaja.

Saludos.
#7
Python / Re:[LoaderTk] Compartiendo código.
Marzo 04, 2015, 08:57:13 AM
Hola, buen día.

Una duda que me surgió al leer el código (sinceramente a la rápida), es que usaste lista (tupla) en vez de array... No digo que no funcione, pero
¿ Por qué ?

Saludos.
#8
FUENTE ORIGINAL : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Hola, muy buen día.

El código Javascript que publicaré más abajo se encarga de capturar todas las palabras dentro de algún elemento, clase o id. Nos creará un pequeño formulario "flotante", en el cuál nos pedirá "Longitud", "Veces", "Elemento" (Filtros).

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

¿ Que es eso de "Filtros"?
Los dos primeros son una especie de filtros, así mostramos resultados más específicos.

       
  • Longitud: Busca palabras con la longitud que tu deseas (&gt;=)
  • Veces: Cantidad de veces que aparece en la web
  • Elemento: Acá ingresamos en que elemento de la web deseamos buscar Las palabras más utilizadas. El script al usar jQuery, nos permite insertar en este campo ".clases", "#ids" o simplemente elementos como &lt;body&gt;
Una vez rellenes los campos, el programa te dará una salida con una tabla como esta:

Ejemplo basado en el portal de noticias No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Sin más, el código:
Código: javascript
var script = document.createElement('script');
script.src = 'http://code.jquery.com/jquery-latest.js';
document.getElementsByTagName('head')[0].appendChild(script);

var times_form;
var element_form;
var length_form;
var l_temp;
var dict = {};
var new_dict = {};
var splited = "";
var counter;
var get_data = function (text, length) {

splited = text.split(" ");

  for ( var a in splited ) {

if( dict[splited[a]] ) {

      splited[a] = splited[a].toLowerCase();
dict[splited[a]] = dict[splited[a]] + 1;
   
} else {
   
      if ( splited[a].length >= length ) {

      splited[a] = splited[a].toLowerCase();
        dict[splited[a]] = 1;
   
    }
   
    }
 
}
 
};

var extract = function (element, length, times) {

  new_dict = {};
  dict = {};
 
  $(element).each( function () {
 
  get_data($(this).text(), length);
 
});

  for ( var c in dict ) {
 
    if ( dict[c] >= times ) {
   
      new_dict[c] = dict[c];
   
    }
 
  } 

  var output = "<table border='1'>"+
      "<thead>"+
      "<th>Palabra</th>"+
      "<th>Longitud</th>"+
      "<th>Apariciones</th>"+
      "</thead>"+
      "<tbody>";
  counter = 0;
  for( var l in new_dict ) {

    counter++;
    l_temp = l.replace("<", "&lt;");
    l_temp = l_temp.replace(">", "&gt;");
    output = output + "<tr>"+
      "<td>" + l_temp + "</td><td>" + l.length + "</td><td>" + new_dict[l] + "</td>"+
      "</tr>";
   
  }
  output = output + "</tbody></table>";
 
  show_results(output);
  return new_dict;

};

var find = function (word) {

  if ( new_dict[word] ) {
 
  show_results(String(new_dict[word]));
 
  } else {
 
  show_results("Word Not found");
 
  }

};

var search = function () {

  length_form = $("input[name=length_craw]").val();
  times_form = $("input[name=times_craw]").val();
element_form = $("input[name=element_craw]").val();
  if( length_form.length > 0 && times_form.length > 0 && element_form.length > 0 ) {
 
    extract(element_form, length_form, times_form);
 
  }

};

var show_form = function () {

  $("<div class='show_words' style='border-radius:5px;box-shadow:0px 0px 10px #000;overflow:scroll;font-family:Trebuchet MS;width:auto;height:6cm;background-color:#fff;border:1px solid;position:fixed;top:12%;left:2%;padding:5px;z-index:30;'>"+
    "<center><h2>Palabras más utilizadas</h2></center><input style='padding: 2px;border: 1px solid;border-radius: 4px;margin: 4px;' name='length_craw' placeholder='Longitud'>&nbsp;<input style='padding: 2px;border: 1px solid;border-radius: 4px;margin: 4px;' name='times_craw' placeholder='Veces'><br/>"+
    "<input style='padding: 2px;border: 1px solid;border-radius: 4px;margin: 4px;' name='element_craw' placeholder='Elemento'>&nbsp;<button onclick='search()' style='padding: 2px;border: 1px solid;border-radius: 4px;margin: 4px;'>¡Buscar!</button>&nbsp;<button onclick='$(\".show_words\").fadeOut();' style='padding: 2px;border: 1px solid;border-radius: 4px;margin: 4px;'>Cerrar</button>"+
    "<div class='words_content'></div></div>").appendTo("body");

};

var show_results = function (content) {

  $(".words_content").html("Total:" + counter + "<br/>" + content);

};

show_form();


FUENTE ORIGINAL : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



Sin más que agregar... gracias por leer :-)

Saludos, Javier.
#9
Python / Re:[Python-CGI] PC Control Remoto - JaAViEr
Noviembre 04, 2014, 12:54:06 AM
Interrsante, trabajaré en eso de la transferencia de archivos.
Edición remota.
Descarga remota.
Enviar archivo local.

Saludos
#10
Python / Re:[Python-CGI] PC Control Remoto - JaAViEr
Octubre 31, 2014, 08:51:51 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Javicho maldito  no m funciona :( .. xD toca modificar

Regards,
Snifer
Mala noticia :( . Manda pantallazos por interno. Por si acaso la aplicación está programada bajo Python 2.7 , obviamente sobre 3.0 no funcionará, problemas de sintaxis claramente :P
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
JaAViEr: EXCELENTE!!!

Muy buen trabajo bro, te felicito!

Prometo que lo probaré!!


Saludos
¡ Muy bien !
Espero un comentario o feedback de vuelta. Podría motivar una segunda versión sobre esto :)

Saludos, Javier.
#11
Python / Re:[Python-CGI] PC Control Remoto - JaAViEr
Octubre 30, 2014, 12:05:20 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Está excelente JaAViEr!  Cuando llegue a casa pruebo todo.
+1

Saludos!
WhiZ
Muchas gracias WhiZ
#12
Python / Re:[Python-CGI] PC Control Remoto - JaAViEr
Octubre 30, 2014, 06:24:00 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Excelente aporte, ahora mismo lo pruebo :D

Gracias!!
Muchísimas gracias. Cualquier consulta no dudes en publicar :-D

Saludos!
#13
Python / [Python-CGI] PC Control Remoto - JaAViEr
Octubre 30, 2014, 04:55:20 AM
¿ Qué es PC Control Remoto ?

PC Control Remoto es un programa/web desarrollado bajo el lenguaje de programación Python en conjunto con su librería CGI, la cuál nos permitirá montar un servidor CGI y poder llevar acabo nuestro cometido.

Este programa nos permitirá acceder a nuestro computador forma remota, con tu Navegador favorito, conectado vía LAN o a Internet (configuración aparte), desde cualquier navegador. Las funciones que nos brinda son las siguiente:

       
  • Consola - Terminal remota: Puedes ejecutar cualquier comando y obtener su salida desde tu navegador.
       
  • Comándos rápidos: Entre estos comándos rápidos tenemos las posibilidad de:

         
    • Apagar PC. (60 segundos).
         
    • Reiniciar PC. (60 segundos).
         
    • Cancelar Apagado/Reinicio.
         
    • Matar un proceso.
         
    • Iniciar un proceso.
El programa en general se compone de:
Además de otros componentes como Topcoat (CSS), jQuery (JS).


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Solo extraer en una carpeta y ejecutar No tienes permitido ver los links. Registrarse o Entrar a mi cuenta PUERTO

Adjunto el código de cada archivo Python mencionado anteriormente

server.py

Código: python
'''
Autor: JaAViEr
Twitter: @javieresteban__
Website: http://codigo.ga
'''
from CGIHTTPServer import CGIHTTPRequestHandler
from BaseHTTPServer import HTTPServer
import socket
import sys

try:

port = int(sys.argv[1])

if port:

ip_interna = socket.gethostbyname(socket.gethostname())
print "Panel de control: http://%s:%s/cgi-bin/index.py" % (ip_interna, port)
server_address=('', port)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()

except:

print "-"*40
print "Uso:"
print sys.argv[0], "PUERTO"
print "-"*40
print "Ejemplo de uso:"
print sys.argv[0], "5050"
print "-"*40

Luego de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, deben pasar como parámatro el puerto al cual estará asociado el servidor.




index.py

Código: python
#-*- encoding:utf-8 -*-
'''
Autor: JaAViEr
Twitter: @javieresteban__
Website: http://codigo.ga
'''
import cgi
import os
import Cookie
import md5

lista_usuarios = ["admin", "JaAViEr"] #Usuarios
lista_passwords = ["root", "toor"] # Contraseñas
method = os.environ.get("REQUEST_METHOD")
logueado = False
contenido_cookies = os.environ.get('HTTP_COOKIE')

tag_head = ''' <meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="/topcoat/css/topcoat-mobile-dark.min.css" class="uib-framework-theme">
<link rel="stylesheet" type="text/css" href="/css/index_main.less.css" class="main-less">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
<style type="text/css">
/* Prevent copy paste for all elements except text fields */
*  { -webkit-user-select:none; -webkit-tap-highlight-color:rgba(255, 255, 255, 0); }
input, textarea  { -webkit-user-select:text; }
</style>
<script type="application/javascript" src="/js/jquery.min.js"></script>
<script type="application/javascript" src="/js/index_user_scripts.js"></script>'''

def code_login(accion=False):

if accion == 'error':

mensaje_error = '''
  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="topcoat/nav" data-ver="0">
<div class="topcoat-navigation-bar__item center full">
<h1 class="topcoat-navigation-bar__title">Verifica tus credenciales por favor[/size][/center]
</div>
  </div>
'''

else:

mensaje_error = ''

return '''
<!DOCTYPE html>
<html>

  <head>
''' + tag_head + '''
<title>Indetifícate en el sistema</title>
  </head>

  <body>
    <div class="uwrap">
      <div class="upage" id="mainpage">
        <div class="upage-outer">
          <div class="upage-content" id="mainsub">

            <div class="grid grid-pad urow uib_row_2 row-height-2" data-uib="layout/row" data-ver="0">
              <div class="col uib_col_2 col-0_12-12" data-uib="layout/col" data-ver="0">
                <div class="widget-container content-area vertical-col">

                  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="topcoat/nav" data-ver="0">
                    <div class="topcoat-navigation-bar__item center full">
                      <h1 class="topcoat-navigation-bar__title">Indentifícate[/size][/center]
                    </div>
                  </div>
                  <span class="uib_shim"></span>
                </div>
              </div>
              <span class="uib_shim"></span>
            </div>

            <div class="grid grid-pad urow uib_row_3 row-height-3" data-uib="layout/row" data-ver="0">

<form action="" method="POST">
<div class="col uib_col_3 col-0_12-12" data-uib="layout/col" data-ver="0">
<div class="widget-container content-area vertical-col">
<div class="table-thing widget uib_w_2 d-margins" data-uib="topcoat/input" data-ver="0">
<label class="narrow-control label-top-left">Usuario</label>
<input class="wide-control topcoat-text-input" type="text" placeholder="Usuario" name="usuario">
</div>
<div class="table-thing widget d-margins" data-uib="topcoat/input" data-ver="0">
<label class="narrow-control label-top-left">Contraseña</label>
<input class="wide-control topcoat-text-input" type="password" placeholder="Contraseña" name="password">
</div>
<button class="widget d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0">Ingresar</button><span class="uib_shim"></span>
</div>
''' +mensaje_error+ '''
</form>
              </div>
              <span class="uib_shim"></span>
            </div>
          </div>
          <!-- /upage-content -->

        </div>
        <!-- /upage-outer -->

      </div>
      <!-- /upage -->

    </div>
    <!-- /uwrap -->
  </body>

</html>'''

code = '''<!DOCTYPE html>
<!--HTML5 doctype-->
<html>

<head>
''' + tag_head + '''
<title>Control Remoto :: 2014</title>
</head>

<body>
<!-- content goes here-->
<div class="uwrap">
<div class="upage" id="mainpage">
<div class="upage-outer">
<div class="upage-content" id="mainsub">

<div class="grid grid-pad urow uib_row_1 row-height-1" data-uib="layout/row" data-ver="0">
<div class="col uib_col_2 col-0_12-12" data-uib="layout/col" data-ver="0">
<div class="widget-container content-area vertical-col">

<div class="topcoat-navigation-bar widget uib_w_2 d-margins" data-uib="/topcoat/nav" data-ver="0">
<div class="topcoat-navigation-bar__item center full">
<h1 class="topcoat-navigation-bar__title">Panel de Control Remoto[/size][/center]
</div>
</div>
<button class="widget uib_w_4 d-margins topcoat-button--large--cta" data-uib="/topcoat/button" data-ver="0">Consola - Terminal</button>
<button class="widget uib_w_3 d-margins topcoat-button--large--cta" data-uib="/topcoat/button" data-ver="0">Enviar comando rápido</button>
<button class="widget uib_w_5 d-margins topcoat-button--large" onclick='location.href="logout.py"' data-uib="/topcoat/button" data-ver="0">Salir</button>
<span class="uib_shim"></span>
</div>
</div>
<span class="uib_shim"></span>
</div>

</div>
<!-- /upage-content -->

</div>
<!-- /upage-outer -->

</div>
<div class="upage hidden" id="uib_page_3">
<div class="upage-outer">
<div id="uib_page_3sub" class="upage-content ">
</div>
</div>
<!-- /upage-outer -->
te </div>
<div class="upage hidden" id="uib_page_2">
<div class="upage-outer">
<div id="uib_page_2sub" class="upage-content ">
</div>
</div>
<!-- /upage-outer -->
</div>
<div class="upage hidden" id="uib_page_1">
<div class="upage-outer">
<div id="uib_page_1sub" class="upage-content ">
</div>
</div>
<!-- /upage-outer -->
</div>

<!-- /upage -->

</div>
<!-- /uwrap -->
</body>

</html>'''

def verificar_login(u, p):

if u in lista_usuarios and p in lista_passwords:

session = u + p
session = md5.md5(session).hexdigest()
return True

else:

return False

if contenido_cookies: #Si hay cookies...

valores_cookie = Cookie.SimpleCookie(contenido_cookies)
session_actual = valores_cookie['sess'].value # session_actual = cookie "sess"

if session_actual == "false": # No logueado

logueado = False

else: # Verifica login

for a, b in zip(lista_usuarios, lista_passwords):

session_temporal = a + b
session_temporal = md5.md5(session_temporal).hexdigest()

if session_actual == session_temporal:

logueado = True # Login coincide
break

else:

pass

else: #No logueado, sess = false

print "Set-Cookie:sess=false"

print "Content-Type: text/html"

if method == "POST":

form = cgi.FieldStorage()
usuario = form.getvalue('usuario')
password = form.getvalue('password')

if verificar_login(usuario, password):

session = usuario + password
session = md5.md5(session).hexdigest()
print "Set-Cookie:sess=%s" % session
print
print code

else:

print
print code_login('error')

elif method == "GET":

if not logueado:

print code_login()

else:

print code


terminal.py

Código: python
#-*- encoding:utf-8 -*-
'''
Autor: JaAViEr
Twitter: @javieresteban__
Website: http://codigo.ga
'''
import cgi
import os
import Cookie
import md5

print "Content-Type: text/html"
print

code_terminal = '''
<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" type="text/css" href="/topcoat/css/topcoat-mobile-dark.min.css" class="uib-framework-theme">
    <link rel="stylesheet" type="text/css" href="/css/terminal_main.less.css" class="main-less">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
<title>Terminal</title>
    <script src="/js/jquery.min.js"></script>
  </head>

  <body>
    <div class="uwrap">
      <div class="upage" id="mainpage">
        <div class="upage-outer">
          <div class="upage-content" id="mainsub">

            <div class="grid grid-pad urow uib_row_1 row-height-1" data-uib="layout/row" data-ver="0">
              <div class="col uib_col_1 col-0_12-12" data-uib="layout/col" data-ver="0">
                <div class="widget-container content-area vertical-col">

                  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="/topcoat/nav" data-ver="0">
                    <div class="topcoat-navigation-bar__item center full">
                      <h1 class="topcoat-navigation-bar__title">Consola - Terminal[/size][/center]
                    </div>
                  </div>
                  <div class="table-thing widget uib_w_2 d-margins" data-uib="/topcoat/textarea" data-ver="0">
                    <label class="narrow-control label-inline"></label>
                    <textarea class="wide-control topcoat-textarea" type="text" placeholder="Comandos" name="comando"></textarea>
                  </div>
<button class="widget uib_w_2 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick='execute();'>¡Ejecutar!</button>
<button class="widget uib_w_2 d-margins topcoat-button" data-uib="topcoat/button" data-ver="0" onclick='location.href="index.py"'>Volver</button>
<hr>
Salida:
<span id="loader"></span>
                  <span class="uib_shim"></span>
                </div>
              </div>
              <span class="uib_shim"></span>
            </div>
          </div>
          <!-- /upage-content -->

        </div>
        <!-- /upage-outer -->

      </div>
      <!-- /upage -->

    </div>
    <!-- /uwrap -->
<script language="JavaScript">

function execute(){

comando = $("textarea[name=comando]").val();
$("#loader").load("terminal.py", {"comando":comando});

}
</script>
  </body>

</html>'''

logueado = False
lista_usuarios = ["admin", "JaAViEr"] #Usuarios
lista_passwords = ["root", "toor"] # Contraseñas
method = os.environ['REQUEST_METHOD']
lectura_cookies = os.environ.get('HTTP_COOKIE')

if lectura_cookies:

valores_cookie = Cookie.SimpleCookie(lectura_cookies)
session_actual = valores_cookie['sess'].value # session_actual = cookie "sess"

if session_actual != "false":

for a, b in zip(lista_usuarios, lista_passwords):

session_temporal = a + b
session_temporal = md5.md5(session_temporal).hexdigest()

if session_actual == session_temporal:

logueado = True # Login coincide
break

else:

pass
else:

pass

if logueado:
if method == "GET":

print code_terminal

elif method == "POST":

form = cgi.FieldStorage()
comando = form.getvalue("comando")
lineas = comando.split("\n")
print '''
<span  style="font-family:Trebuchet Ms; color: #fff;" class="wide-control">
<br />
'''
for l in lineas:

try:

run = os.popen(l, "r")
run_content = run.read()
run_content = run_content.replace("\n", "<br>")
run_content = run_content.replace(" ", "&nbsp;")
print run_content
run.close()

except:

print "Error al ejecutar comando %s" % (l)

print "</span>"
else:
print "<script>location.href='index.py';</script>"

comando_rapido.py
Código: python
#-*- encoding:utf-8 -*-
'''
Autor: JaAViEr
Twitter: @javieresteban__
Website: http://codigo.ga
'''
import cgi
import os
import subprocess
import Cookie
import md5

print "Content-Type: text/html"
print
code_terminal = '''
<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" type="text/css" href="/topcoat/css/topcoat-mobile-dark.min.css" class="uib-framework-theme">
    <link rel="stylesheet" type="text/css" href="/css/terminal_main.less.css" class="main-less">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
<title>Comandos rápidos</title>
    <script src="/js/jquery.min.js"></script>
  </head>

  <body>
    <div class="uwrap">
      <div class="upage" id="mainpage">
        <div class="upage-outer">
          <div class="upage-content" id="mainsub">

            <div class="grid grid-pad urow uib_row_3 row-height-3" data-uib="layout/row" data-ver="0">
              <div class="col uib_col_3 col-0_12-12" data-uib="layout/col" data-ver="0">
                <div class="widget-container content-area vertical-col">

                  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="topcoat/nav" data-ver="0">
                    <div class="topcoat-navigation-bar__item center full">
                      <h1 class="topcoat-navigation-bar__title">Comandos rápidos[/size][/center]
                    </div>
                  </div>
                  <span class="uib_shim"></span>
                </div>
              </div>
              <span class="uib_shim"></span>
            </div>

            <div class="grid grid-pad urow uib_row_4 row-height-4" data-uib="layout/row" data-ver="0">
              <div class="col uib_col_4 col-0_12-12" data-uib="layout/col" data-ver="0">
                <div class="widget-container content-area vertical-col">

<button class="widget uib_w_2 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="comando('apagar'); return false;">Apagar</button>
<button class="widget uib_w_3 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="comando('reiniciar'); return false;">Reiniciar</button>
<button class="widget uib_w_4 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="comando('cancelar salida'); return false;">Cancelar Apagado/Rein.</button>
<button class="widget uib_w_5 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="matar_proceso('mostrar'); return false;">Matar proceso</button>
<span id="matar_proceso" style="display:none">
<hr>
<input class="wide-control topcoat-text-input" type="text" placeholder="proceso.ext" name="proceso">
<button class="widget uib_w_6 d-margins topcoat-button wide-control" data-uib="topcoat/button" data-ver="0" onclick="matar_proceso('kill'); return false;">¡Matar ahora!</button>
<hr>
</span>
<button class="widget uib_w_6 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="iniciar_proceso('mostrar'); return false;">Iniciar proceso</button>
<span id="iniciar_proceso" style="display:none">
<hr>
<input class="wide-control topcoat-text-input" type="text" placeholder="proceso.ext" name="iniciar_proceso">
<button class="widget uib_w_6 d-margins topcoat-button wide-control" data-uib="topcoat/button" data-ver="0" onclick="iniciar_proceso('iniciar'); return false;">¡Iniciar ahora!</button>
<hr>
</span>
<button class="widget uib_w_2 d-margins topcoat-button" data-uib="topcoat/button" data-ver="0" onclick='location.href="index.py"'>Volver</button>
  <span class="uib_shim"></span>
 
                </div>
              </div>
              <span class="uib_shim"></span>
            </div>
          </div>
          <!-- /upage-content -->

        </div>
        <!-- /upage-outer -->

      </div>
      <!-- /upage -->

    </div>
    <!-- /uwrap -->
  </body>
  <span id="loader" style="display:none;"></span>
  <script language="JavaScript">
 
  function comando(cmd){
 
$("#loader").load("comando_rapido.py", {"comando":cmd});
 
  }
  function matar_proceso(param){
 
if(param == 'mostrar'){
$("#matar_proceso").fadeIn();
$("#iniciar_proceso").fadeOut();
}else if(param == 'kill'){
proceso = $("input[name=proceso]").val();
$("#loader").load("comando_rapido.py", {"kill": proceso});
$("#matar_proceso").fadeOut();
$("input[name=proceso]").val("");
}
  }
 
  function iniciar_proceso(accion){
 
  if (accion == "mostrar"){
 
$("#matar_proceso").fadeOut();
$("#iniciar_proceso").fadeIn();

  }else if(accion == "iniciar"){
 

nuevo_proceso = $("input[name=iniciar_proceso]").val();
$("#loader").load("comando_rapido.py", {"correr": nuevo_proceso});
$("#iniciar_proceso").fadeOut();
$("input[name=iniciar_procesoproceso]").val("");
 
  }
 
  }
  </script>


</html>'''

logueado = False
lista_usuarios = ["admin", "JaAViEr"] #Usuarios
lista_passwords = ["root", "toor"] # Contraseñas
method = os.environ['REQUEST_METHOD']
lectura_cookies = os.environ.get('HTTP_COOKIE')
if lectura_cookies:
valores_cookie = Cookie.SimpleCookie(lectura_cookies)
session_actual = valores_cookie['sess'].value # session_actual = cookie "sess"

if session_actual != "false":
for a, b in zip(lista_usuarios, lista_passwords):

session_temporal = a + b
session_temporal = md5.md5(session_temporal).hexdigest()

if session_actual == session_temporal:
logueado = True # Login coincide
break

else:

pass
else:

pass

if logueado:
if os.name == "nt":

so = "windows"

else:

so = "unix"

if method == "GET":

print code_terminal

elif method == "POST":

form = cgi.FieldStorage()
comando = form.getvalue("comando")
kill = form.getvalue("kill")
correr = form.getvalue("correr")
iniciar_proceso = ""
matador = ""

try:

if correr:

if so == "windows":

iniciar_proceso = "start %s" % (correr)

elif so == "unix":

iniciar_proceso = "%s" % (correr)

subprocess.call(iniciar_proceso)

if kill:

if so == "windows":

matador = "taskkill /F /IM %s" % (kill)

elif so == "unix":

matador = "pkill -9 %s" % (kill)

kill = subprocess.call(matador)
kill.close()

if comando == "apagar":

if so == "windows":

accion = "shutdown /S /T 60"

elif so == "unix":

accion = "sudo poweroff"


elif comando == "reiniciar":

if so == "windows":

accion = "shutdown /R /T 60"

elif so == "unix":

accion = "sudo reboot"

#accion = ""

elif comando == "cancelar salida":

if so == "windows":

accion = "shutdown /A"

elif so == "unix":

accion = ""

#accion = ""


action = subprocess.call(accion)
action.close()
except:

pass

else:
print "<script>location.href='index.py';</script>"

logout.py

Código: python
import cgi
'''
Autor: JaAViEr
Twitter: @javieresteban__
Website: http://codigo.ga
'''
print "Content-Type: text/html"
print "Set-Cookie: sess=false"
print "Location:index.py"
print
print "<script>location.href='index.py';</script>"


Un par de Screenshots de como luce el programa...
Identificación
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Panel de control
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Consola-Terminal Remota
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Comando rápidos
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Comandos rápidos - Iniciar Proceso
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Comandos rápidos - Matar Proceso
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Fuente Original: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#14
¡Hermosa iniciativa! Quién fomente el uso de Python es mi aliado jajaja.

Podrían animarse algunos chilenos y hacer algo similar :-D
#15
Python / Re:[Python] Utilizando orientación a objetos [1]
Septiembre 29, 2014, 11:45:25 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Muy bueno brother, viene de lujo para los que apenas comienzan y se les dificulta un poco la orientación a objetos. Me gustaría ver más post tuyos por acá.

Saludos!
Muchas gracias Once ! Cuando escriba alguna cosa nueva no dudaré en publicarlo en Underc0de.
Que tengas un buen día.

Saludos, Javier.
#16
Python / Re:[Python] Utilizando orientación a objetos [1]
Septiembre 27, 2014, 06:02:51 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
buen aporte , volviste de la muerte , de nuevo xD.
Jajajaja pues si, a ratos paso por foros, ahora últimamente escribo más sobre Python en mi sitio web :).
Espero todo vaya de lujo contigo Doddy ! :-D

Saludos
#17
Python / Re:[Python] Utilizando orientación a objetos [1]
Septiembre 27, 2014, 04:37:39 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Excelente Javi!! Me viene de primera!! Muchisimas gracias!!

Saludos!
ANTRAX
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
JaAViEr, estos tutoriales explicativos, se agradecen infinito.

Gracias por el aporte.

:-*

G.
¡ Muchas gracias a ambos !
#18
Python / [Python] Utilizando orientación a objetos [2]
Septiembre 27, 2014, 03:27:20 AM
Heredando Clases
Veamos... La Herencia en Python es de lo más sencillo que puede haber (Si lo comparas con otros lenguajes). Veamos un ejemplo en código:
Código: python

class Clase_A:
 
    def __init__(self):
     
      pass
   
    def funcion_a(self):
       
        print "FUNCION DE CLASE_A"

class Clase_B(Clase_A):
 
  pass

Bien, tenemos "Clase_A", dentro tiene la función "funcion_a", que solo imprime "FUNCION DE CLASE_A".
Para que la Clase "Clase_B" pueda heredar la función "funcion_a"(Originaria de la  Clase_A) debemos añadir entre paréntesis la clase que vamos a heredar:
Código: python

class Clase_B(Clase_A):

Con eso ya le indicamos a Python que Clase_B heredará todo lo que hay en Clase_A, por lo que ahora podemos crear una instancia de Clase_B y llamar a la función funcion_a tranquilamente.

Creemos la instancia para la Clase Clase_B:
Código: python
c=Clase_B()

Ahora podemos acceder a funcion_a (De Clase_A) con nuestra instancia de Clase_B.
Código final:
Código: python

class Clase_A:
 
    def __init__(self):
     
      pass
   
    def funcion_a(self):
       
        print "FUNCION DE CLASE_A"

class Clase_B(Clase_A):
 
  pass

c=Clase_B()
c.funcion_a()

Output:
Código: php

FUNCION DE CLASE_A

Utilizando variables en Clases
Quise escribir un poco sobre esto porque recuerdo que yo tuve problemas con esto y no lo entendí hasta que le metí manos al código. Así que espero se entienda.

Cuando creamos una Función dentro de una Clase y declaramos alguna variable, esta variable va a ser accesible solo desde la Función en la cuál fue creada, veamos un ejemplo:
Código: python
class Ejemplo:
 
  def funcion_saludo(self, nombre):
   
    print "Hola,", nombre
   
  def funcion_despedida(self):
   
    print "Hasta luego,", nombre

instancia=Ejemplo()
instancia.funcion_saludo("Javier")
instancia.funcion_despedida()

Como te habrás fijado, en la Función funcion_saludo hemos pasado el parámetro "nombre", para luego imprimirlo, pero si queremos acceder a la variable "nombre" desde la Función funcion_despedida nos arrojará un error pues nos dirá que la variable "nombre" no ha sido definida.
Entonces... ¿ Como accedo a esa variable? ¡Es realmente sencillo !

Para que puedas acceder a una variable desde toda una Clase y no solo desde la función donde se definió, debes crear una variable con el prefijo "self.", veamos el caso anterior, pero esta vez con el prefijo "self.nombre":
Código: python
class Ejemplo:
 
  def funcion_saludo(self, nombre):
   
    self.nombre=nombre
    print "Hola,", self.nombre # O print "Hola,", nombre
   
  def funcion_despedida(self):
   
    print "Hasta luego,", self.nombre

instancia=Ejemplo()
instancia.funcion_saludo("Javier")
instancia.funcion_despedida()
'''La Funcion funcion_despedida no necesita
parametro, pues utilizaremos el mismo
valor de la Funcion funcion_saludo.'''

Como puedes ver, hemos declarado que self.nombre=nombre, así podremos acceder a la variable "nombre" de una manera global (gracias a la magia del "self.") a lo largo de nuestra Clase, sin tener que estar pasando parámetros a cada función y re-utilizando datos ya ingresados en otras funciones.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#19
Python / [Python] Utilizando orientación a objetos [1]
Septiembre 27, 2014, 03:17:52 AM
No vamos a ver en profundo los conceptos sobre orientación a objetos e iremos directamente al código. Se comentará más o menos lo primordial.

De primera veremos:

       
  • Estructura de una Clase.
       
  • Añadir funciones personalizadas a una Clase.
       
  • Llamar funciones insertas en una Clase.
Estructura de una clase
Código: python

class Mi_Clase:
 
  def __init__(self):

      print "Mi_Clase inicializada!"   

inicializar=Mi_Clase()

Declaramos la clase Mi_Clase. Dentro de toda clase está la posibilidad de añadir la función __init__, que tiene por "tarea" ejecutar todo el código que esté dentro de la función al momento en que se crea una instancia sobre la Clase que lo contiene.

En este caso, al invocar a "Mi_Clase":
Código: python
inicializar=Mi_Clase()

Ya por defecto hemos llamado también a la función __init__

Nota: Cada función que añadas dentro de tus Clases debe siempre llevar el parámetro self y luego separado de comas, los parámetros de tu función.

Añadiendo funciones una clase
Añadir una función a nuestra clase es tan sencillo como seguir la estructura del mismo __init__, obviamente que con un nombre diferente.
Por ejemplo:
Código: python
class Mi_Clase:
 
  def __init__(self):

      print "Mi_Clase inicializada!"   
 
  def saludar(self, nombre):
   
      return "Bienvenido %s !" % nombre

inicializar=Mi_Clase()

Hemos añadido la función saludar(). Para acceder a aquella función debes recurrir a la instancia que creaste sobre la Clase, en este caso llamada inicializar, por lo tanto para utilizar dicha función nos queda algo como esto:
Código: python

inicializar.saludar("Javier")

Recordemos que...
Código: python

inicializar=Mi_Clase()

Por lo que
Código: text

inicializar.saludar("Javier") Es el equivalente a decir Mi_Clase().saludar("Javier")

Accediendo a funciones de una Clase
Código: python
class Mi_Clase:
 
  def __init__(self):

      print "Mi_Clase inicializada!"   
 
  def saludar(self, nombre):
   
      return "Bienvenido %s !" % nombre

inicializar=Mi_Clase()
print inicializar.saludar("Javier")

Output:
Código: text

Mi_Clase inicializada!
Bienvenido Javier !


En la segunda parte veremos:

       
  • Como utilizar la Herencia en nuestra Clase
       
  • Como utilizar variables dentro de una Clase

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#20
Disculpa la expresión pero... Mierda, que feo S.O :|