elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24
171  Programación / Scripting / Re: [Código-Python]Obtener dígito verificador del RUT en Chile - JaAViEr en: 10 Febrero 2012, 07:26 am
Tenía un rato libre, así que he reformulado el algoritmo usando la información que hay en Wikipedia. Espero no te moleste :P
Código
  1. rut = reversed(map(int,raw_input('RUT ::>')))
  2. m = [2,3,4,5,6,7]
  3.  
  4. d = sum([n*m[i%6] for i,n in enumerate(rut)])
  5. d %= 11
  6.  
  7. if (d==1):
  8.    d = 'K'
  9. else:
  10.    d = 11-d
  11.  
  12. print d

Y la versión reducida: (Me encanta reducir código Python :P)
Código
  1. d=sum([int(n)*(i%6+2)for i,n in enumerate(raw_input()[::-1])])%11
  2. print'K'if(d==1)else 11-d
Para nada ! es genial saber que usas Python y tienes buen nivel ! :D
El primer código que has usado es también posible reducirlo :
Código
  1. # -*- coding: utf-8 -*-
  2. rut = reversed(map(int,raw_input('RUT ::>')))
  3. d = sum([n*range(2,8)[i%6] for i,n in enumerate(rut)])
  4. d %= 11
  5. if (d==1):
  6.    d = 'K'
  7. else:
  8.    d = 11-d
  9. print d
  10.  
Pero sin duda el segundo está genial ! :D

EDIT:
Ahora en QT4 para matar el tiempo :P
Código
  1. # -*- coding: utf-8 -*-
  2. from PyQt4 import QtCore, QtGui
  3. import sys
  4.  
  5. class ventana_alerta(QtGui.QWidget):
  6.  def __init__(self, parent=None):
  7.    QtGui.QWidget.__init__(self, parent)
  8.    self.resize(283, 31)
  9.    self.setWindowTitle("ALERTA!")
  10.  
  11.  def message(self, txt):
  12.    self.txt = txt
  13.    self.respuesta = QtGui.QLabel(self.txt, self)
  14.    self.respuesta.setGeometry(10, 10, 260, 17)
  15.  
  16. class formulario_rut(QtGui.QWidget):
  17.  
  18.  def __init__(self, parent=None):
  19.    QtGui.QWidget.__init__(self, parent)
  20.    self.setWindowTitle("Digito verificador")
  21.    self.resize(279, 36)
  22.    self.label_rut = QtGui.QLabel("RUT", self)
  23.    self.label_rut.setGeometry(0, 11, 59, 17)
  24.    self.rut = QtGui.QLineEdit(self)
  25.    self.rut.setGeometry(30, 7, 101, 23)
  26.    self.label_verificador = QtGui.QLabel("-", self)
  27.    self.label_verificador.setGeometry(135, 11, 16, 17)
  28.    self.digito = QtGui.QLineEdit(self)
  29.    self.digito.setGeometry(147, 7, 21, 23)
  30.    self.digito.setReadOnly(True)
  31.    self.verificar = QtGui.QPushButton("Verificar", self)
  32.    self.verificar.setGeometry(180, 7, 92, 23)
  33.    self.connect(self.verificar, QtCore.SIGNAL("clicked()"), self.operacion)
  34.  
  35.  def operacion(self):
  36.    self.rut_valor = str(self.rut.text())
  37.    if len(self.rut_valor) < 8 and len(self.rut_valor) > 9:
  38.      creacion_alerta.message("Ingresa un rut valido por favor")
  39.      creacion_alerta.show()
  40.    else:
  41.      rut = []
  42.      ingresar = [rut.append(numeros) for numeros in self.rut_valor]
  43.      rut.reverse()
  44.      recorrido = 2
  45.      multiplicar = 0
  46.      for x in rut:
  47.        multiplicar+=int(x)*recorrido
  48.        if recorrido==7: recorrido = 1
  49.        recorrido+=1
  50.      modulo = multiplicar%11
  51.      resultado = 11-modulo
  52.      if resultado == 11: digito=0
  53.      elif resultado == 10: digito="K"
  54.      else: digito=resultado
  55.      self.digito.setText(str(digito))
  56.  
  57. run = QtGui.QApplication(sys.argv)
  58. creacion_alerta = ventana_alerta()
  59. creacion_formulario = formulario_rut()
  60. creacion_formulario.show()
  61. run.exec_()
  62.  
172  Programación / Scripting / [Código-Python]Obtener dígito verificador del RUT en Chile - JaAViEr en: 9 Febrero 2012, 21:03 pm
Hola, buen día !

Tras unas merecidas vacaciones vengo de vuelta con cosas para programar, con la cabeza ya más despejada :P.

Visitando el blog del colega <a href="http://twitter.com/isseu">@isseu</a>, me encuentro con un artículo llamado "Como sacar dígito verificador de rol único tributario (RUT)". Me pareció interesante y me puse a leer atentamente su explicación y me animé a pasarlo a Python, en su blog está en javascript, pero yo como buen amante de Python lo hice en él :)

Código
  1. # -*- coding: utf-8 -*-
  2. rut = []
  3. ingresar = [rut.append(numeros) for numeros in raw_input('RUT ::>')]
  4. rut.reverse()
  5. recorrido = 2
  6. multiplicar = 0
  7. for x in rut:
  8. multiplicar+=int(x)*recorrido
  9. if recorrido==7: recorrido = 1
  10. recorrido+=1
  11. modulo = multiplicar%11
  12. resultado = 11-modulo
  13. if resultado == 11: digito=0
  14. elif resultado == 10: digito="K"
  15. else: digito=resultado
  16. print "Dígito verificador:",digito

Espero sea de su agrado ! :D

Fuente : http://rootcodes.com/pythonobtener-digito-verificador-del-rut-en-chile/

Saludos, Javier.
173  Programación / Scripting / Re: [Python] Enviar peticiones POST a sitios Webs. - JaAViEr (0x5d) en: 9 Febrero 2012, 21:02 pm
Hola, buen día !

  Para ese caso te recomiendo que uses algo así como un rastreador de HTTP Headers...
Subes el archivo y miras las cabeceras que has enviado, así sabrás más fácilmente que campos enviaste
para luego enviarlos por Python

Saludos.
174  Programación / Scripting / [Python] Enviar peticiones POST a sitios Webs. - JaAViEr (0x5d) en: 24 Enero 2012, 19:53 pm
Hola, muy buenos días a todos !
 En esta mini guía o vengo a explicar una cosa sencilla de Python, pero que muy pocos utilizan. Me refiero a enviar datos mediante la petición POST.
Primero que nada, quiero mostrar las diferentes formas de llevar a cabo estas peticiones, una de ellas, es mediante la librería "httplib", la otra es mediante la librería urllib o urllib2.

Una ventaja aparente que veo yo al utilizar la librería httplib, es que podemos manejar los códigos de error que nos devuelven las peticiones que hagamos. Por si no manejan dichos códigos de error, acá les dejo un listado de los principales :
  • 200 : OK, documento entregado correctamente.
  • 202 : Aceptada, pero la petición no es completada con éxito.
  • 204 : Sin contenido.
  • 301 : Movido permanentemente.
  • 302 : Movido Temporalmente.
  • 304 : No modificado.
  • 401 : No autorizado.
  • 403 : Prohibido, el conocido Forbidden
  • 404 : No encontrado.
  • 500 : Error interno.
  • 501 : No implementado.
Bueno, volviendo al tema... Para enviar una petición POST, debemos saber la URL a la que deseamos enviar los datos, eso es bastante fácil, ya que generalmente solo debemos mirar el código de fuente y buscar <form ... y ubicar el action="ACÁ LA URL". Una vez encontrado ello, debemos saber que datos tenemos que enviarle a la URL, para ello deberás buscar los <input type="text" o type="hidden".

  Ahora, si no te quieres complicar la vida buscando en el código de fuente, puedes usar otra herramienta proporcionada por mi, que detecta formulario y campos a enviar mediante el POST:
Código
  1. # -*- coding: utf-8 -*-
  2. # Autor: JaAViEr (0x5d)
  3. # Twitter: 0x5d
  4. import re,urllib,sys
  5. try:
  6.  var = urllib.urlopen(raw_input("URL ::> ")).read()
  7. except:
  8.  print "No es posible conectar..."
  9.  sys.exit(1)
  10. url_enviar=""
  11. for url in re.findall("<form (.*)>",var):
  12.  if "action" in url.lower():
  13.    for web in url.split():
  14.      if re.findall("action=(.*)",web):
  15.        url_enviar=web.replace("action=","")
  16. url_enviar = url_enviar.replace("\"","")
  17. datos_r = []
  18. for campos in re.findall("<input (.*)>",var):
  19.  if "name" in campos.lower():
  20.    for cam in campos.split():
  21.      if re.findall("name=(.*)",cam):
  22.        datos_r.append(cam.replace('"',""))
  23. print "URL a enviar POST:",url_enviar.replace(">","")
  24. print "Campos Detectados:"
  25. for s in datos_r:
  26.  print s.replace("name=","")
  Solo basta con ingresar la URL para saber a que URL apunta el formulario & los datos que tenemos que enviar, podría ser buena herramienta para esta ocasión.

  Ahora que ya tenemos todos nuestros datos necesarios y fundamentales, manos a la obra !
  Veamos que tal nos va con el famoso httplib y urllib para poder codificar los datos y que el navegador los comprenda, primero los importamos:
Código
  1. import httplib, urllib
Para poder crear una conexión utilizamos:
Código
  1. parametros = urllib.urlencode({'campo1': 'valor uno','campo2':'valor2'})
En este caso, estamos enviando campo1 con el valor: valor uno y campo2 con el valor: valor2
Y Bueno, necesitamos enviar la cabecera necesaria para poder realizar con éxito nuestra petición, Content-type : application/x-www-form-urlencoded, que en Python es:
Código
  1. cabeceras = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
Bien, una vez ya tenemos todo esto en nuestro código, debemos especificar a que host nos queremos conectar y con que puerto :
Código
  1. abrir_conexion = httplib.HTTPConnection("rootcodes.com:80")
Con eso ya abrimos nuestra conexión a rootcodes.com vía puerto 80 (HTTP). Por lo tanto, ahora necesitamos especificar la URL o el archivo en el servidor que nos receptará los datos:
Código
  1. abrir_conexion.request("POST", "/archivo_cualquiera.php", parametros, cabeceras)
Genial ! , ya tenemos nuestra conexión establecida con rootcodes.com y le acabamos de enviar los datos "campo1" y "campo2" con sus respectivos valores ! , pero falta algo, saber si nuestra apreciada petición fue realizada con éxito:
Código
  1. respuesta = abrir_conexion.getresponse()
  2. print respuesta.status
  Ahí es donde entran en juego los códigos de error que les dejé más arriba.
PD: respuesta.status devolverá el código de error en número, mientras que:
Código
  1. print respuesta.reason
  Nos devolverá en texto, en caso de ser una respuesta válida, el status será 200 y el reason "OK"
  Ya una vez finalizado todo, podemos obtener el código de fuente & posteriormente cerrar la conexión:
Código
  1. ver_source = respuesta.read()
  2. abrir_conexion.close()
  Bien, código final:
Código
  1. import httplib, urllib
  2. parametros = urllib.urlencode({'campo1': 'valor uno','campo2':'valor2'})
  3. cabeceras = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
  4. abrir_conexion = httplib.HTTPConnection("rootcodes.com:80")
  5. abrir_conexion.request("POST", "/archivo_cualquiera.php", parametros, cabeceras)
  6. respuesta = abrir_conexion.getresponse()
  7. print respuesta.status
  8. ver_source = respuesta.read()
  9. #Esto es opcional -> print ver_source
  10. abrir_conexion.close()

  Bien, eso es con la "famosa" httplib, qué tal si vemos ahora como hacerlo con urllib ?

  Bueno, empiezo de 0 con urllib, lo bueno es que esto es muchísimo más sencillo, ya verán ;)
 Primero, importamos la librería :
Código
  1. import urllib
  Para establecer los campos a enviar, es igual al anterior:
Código
  1. campos = urllib.urlencode({"campo":"valor"})
  Y para establecer la web a la cuál enviar los datos:
Código
  1. sitio = urllib.urlopen("http://rootcodes.com/el_archivo.php", campos)
  2. print sitio.read()

  Basta con eso, para enviar el campo: "nombre" con valor: JaAViEr.
 Sencillo no ? , pues claro, el único problema es que tendríamos que utilizar expresiones regulares para detectar si nuestra petición fue realizada con éxito o no, por lo que es mejor utilizar httplib, cosa que yo no hago :P

  De yapa les dejaré una mini clase que hice en Python, para enviar datos por POST fácilmente:
Código
  1. # -*- coding: utf-8 -*-
  2. # Autor: JaAViEr (0x5d)
  3. # Twitter: 0x5d
  4. import re,urllib,sys
  5. try:
  6.  var = urllib.urlopen(raw_input('URL ::> ')).read()
  7. except:
  8.  print "No es posible conectar..."
  9.  sys.exit(1)
  10. url_enviar=""
  11. for url in re.findall("<form (.*)>",var):
  12.  if "action" in url.lower():
  13.    for web in url.split():
  14.      if re.findall("action=(.*)",web):
  15.        url_enviar=web.replace("action=",'')
  16. url_enviar = url_enviar.replace("\"",'')
  17. datos_r = []
  18. for campos in re.findall("<input (.*)>",var):
  19.  if "name" in campos.lower():
  20.    for cam in campos.split():
  21.      if re.findall("name=(.*)",cam):
  22.        datos_r.append(cam.replace('"',''))
  23. print "URL a enviar POST:",url_enviar.replace(">",'')
  24. print "Campos Detectados:"
  25. for s in datos_r:
  26.  print s.replace("name=",'')
Un ejemplo de uso:
Código
  1. Inserta la URL ::> http://sitio web
  2. Inserta las variables, separadas por ':' ::> campo1:campo2
  3. Inserta los valores, separados por ':' ::> valor1:valor2
  4. ACÁ IRÁ LA SALIDA

  Espero no haber sido muy enredado en mi explicación.

Fuente Original : http://rootcodes.com/pythonenviar-peticiones-post-desde-python/  O TAMBIÉN -> http://foros.cristalab.com/enviar-peticiones-post-a-sitios-web-con-python-t103492/

Saludos, Javier.
175  Programación / Scripting / [Código-Ruby]Sucesión Fibonacci - JaAViEr en: 8 Enero 2012, 08:57 am
Hola, buen día a todos!

Sigo en mi travesía por Ruby y mi travesía por el tablet...
Ahora traigo la sucesión fibonacci en Ruby probada y programada desde el
Galaxy Tab
Código
  1. b=[1,1,2]
  2. t=0
  3. b.each do |n|
  4. t=b[b.length-1]+b[b.length-2]
  5. print t
  6. b << t
  7. gets
  8. end
  9.  

Saludos!
176  Programación / Scripting / [Código-Ruby]String to ASCII - JaAViEr en: 7 Enero 2012, 19:33 pm
Hola, buen día.

Antes de aprender Python, no sabía si meterle mano a Python o a Ruby. Como tomé Python, ahora será el turno de Ruby. El problema es que mi Debian murió y estoy programando desde el tablet.

Bueno, ya todos conocen el String to ASCII, esta vez en Ruby:
Código
  1. puts 'Inserta un string ::>'
  2. STDOUT.flush
  3. var=gets.chomp
  4. h=''
  5. i = 0
  6. puts 'Salida ASCII:'
  7. while i<var.length
  8.  h+=var[i].to_s+' '
  9.  i+=1
  10. end
  11. puts h
  12.  

Saludos.
177  Programación / Scripting / Re: [Python] Sacarle todo el provecho a Python en: 7 Enero 2012, 02:00 am
Hola, buen día.

Tu pregunta es compleja en el sentido de que no siempre le
podemos sacar todo el provecho a un lenguaje, ya que son demasiado
extensos. La única manera de sacarle todo el provecho es hacer
cosas útiles
178  Programación / Scripting / Re: [Python] Hacer que aparezca la ventanita de examinar en: 5 Enero 2012, 20:26 pm
Yo se hacerlo con QT4. . .
179  Programación / Scripting / [Python-Android]Algunas cosas para empezar - JaAViEr(0x5d) en: 29 Diciembre 2011, 08:14 am
Hola. ¡Buenos días a todos !

  En esta oportunidad le dedicaré algo de tiempo y espacio en el blog a la programación de 'aplicaciones' para Android en lenguaje Python, si bien no les explicaré como funciona ni mucho menos, les dejaré algunas funciones para que ustedes quizás puedan expandir y desarrollar algo.
  
  Bueno, antes que todo, debemos instalar la aplicación SL4A, que la encontraremos acá en su página oficial , yo uso el sl4a_r4.apk en el tablet y luego desde el mismo sitio web bajamos el Python For Android.


  En todo código que programemos en nuestro Android, debemos importar la librería Android y crear el objeto para utilizar la API:
Código
  1. import android
  2. droid = android.Android()
  3.  
OJO que eso es solo si pretendes programar aplicaciones con funciones internas de tu Android, ya sea Cámara, WiFi, Contactos, etc.

 Bueno, veamos algo sencillo, crear el típico alerta con un titulo y mensaje personalizado, para lo que usaremos droid.dialogCreateAlert('Titulo','Mensaje' )
, pero para este ser mostrado debemos utilizar droid.dialogShow():
Código
  1. import android
  2. droid = android.Android()
  3. droid.dialogCreateAlert('Titulo','Mensaje')
  4. droid.dialogShow()
  5.  


  Otra cosa bien sencilla sería pedir datos por GetInput mediante otro cuadro de dialogo, el código es sencillo igualmente:
Código
  1. import android
  2. droid = android.Android()
  3. variable = droid.dialogGetInput('TITULO','INSERTE DATOS:').result
  4.  

Ojo, debemos poner .result o nos devolverá el resultado junto a otros datos, como tenemos ya nuestros datos en 'variable' , luego podemos mostrar lo insertado vía Cuadro de Alerta o vía print.
En caso de querer mostrar el resultado vía Alerta:
Código
  1. import android
  2. droid = android.Android()
  3. variable = droid.dialogGetInput('DATOS','Tu nombre:').result
  4. droid.dialogCreateAlert('Muestra Datos','Tu nombre es %s'%variable)
  5. droid.dialogShow()
  6.  
La cual nos pedirá un nombre y posteriormente lo mostrará en un Alerta.

  Otra cosa entre comillas interesante, es la posibilidad de añadir un DatePicker, bueno si no sabes que es, es un cuadro que nos permite buscar fechas de manera más 'cómodas', ahora, veamos como aplicarlo en Python - Android. Para llamar al DatePicker, debemos crearlo antes, mediante droid.dialogCreateDatePicker([Año inicio], [Mes], [Día]) Y para mostrarlo, lo mismo de antes, droid.dialogShow(). Bien, veamos el código:
Código
  1. import android
  2. droid = android.Android()
  3. fecha = droid.dialogCreateDatePicker(1970, 1, 1)
  4. droid.dialogShow()
  5.  
Paso a explicar esto un poco, almacenamos el DatePicker en la variable 'fecha', pero que sucede si hacemos un print fecha, como queriendo mostrar el resultado ? Pues no devolverá nada, pues para esta situación debemos de utilizar droid.dialogGetResponse().result, lo que insertaremos en una variable llamada 'respuesta', de esta manera:
Código
  1. respuesta = droid.dialogGetResponse().result
  2. print respuesta
  3.  
bien, veamos que nos dice el print respuesta:
[text]
{u'year':1970, u'day':1, u'wich': u'positive', u'month':1}
[/text]
Entonces, si solo queremos tomar el año o fecha o día o lo que sea, debemos hacer nada más que añadir:
Código
  1. print respuesta['year']
  2.  
['year'] ['day'] ['which'] ['mont']

  Bueno, creo que no es necesario mostrar lo siguiente, pero nunca está de más .__. hablo sobre hacer que el celular vibre:
Código
  1. import android
  2. droid = android.Android()
  3. droid.vibrate(2000)
  4.  
 Se maneja por ms, por lo que 2000ms = 2s.
Bueno, eso era una pasadita rápida nada más :P
  Aprovechando eso, también pondré la manera de obtener el volumen máximo del timbre, como es algo sencillo solo dejo el código:
Código
  1. import android
  2. droid = android.Android()
  3. max = droid.getMaxRingerVolume().result
  4. print "Tope del volumen:", max
  5.  
Otra sencillez más, es mostrar lo que hay en el ClipBoard:
Código
  1. import android
  2. droid = android.Android()
  3. contenido = droid.getClipboard().result
  4. print "Contenido del clipboard:", contenido
  5.  

  Bueno, ya veamos algo quizás más 'útil', como lo son los botones, lo bueno de esto, es que en Android podemos personalizar el texto de los botones de : Si , No , Cancelar

Antes de dar paso a la creación de los botones, antes debemos crear un  dialogCreateAlert('TITULO','MENSAJE' ).
Bueno, al grano, un ejemplo en código:
Código
  1. import android
  2. droid = android.Android()
  3. crear_alerta = droid.dialogCreateAlert('Titulo','Mensaje')
  4. boton_no = droid.dialogSetNegativeButtonText('NO!')
  5. boton_si = droid.dialogSetPositiveButtonText('SI!')
  6. boton_cancelar = droid.dialogSetNeutralButtonText('CANCELAR!')
  7. droid.dialogShow()
  8. respuesta = droid.dialogGetResponse().result
  9. print respuesta
  10.  

Si das clic en el boton NO!, la respuesta será :
[text]
{u'wich':u'negative'}
[/text]
Si das en SI! devolverá 'positive', y en caso de ser CANCELAR! devolverá 'neutral'.
Dejaré un ejemplo de uso bien básico.

Código:
Código
  1. import android
  2. droid = android.Android()
  3. crear_alerta = droid.dialogCreateAlert('Encuesta','Te gusta rootcodes.com?')
  4. boton_no = droid.dialogSetNegativeButtonText('No me gusta')
  5. boton_si = droid.dialogSetPositiveButtonText('Si, me gusta')
  6. boton_cancelar = droid.dialogSetNeutralButtonText('Yo no voto!')
  7. droid.dialogShow()
  8. respuesta = droid.dialogGetResponse().result
  9. if respuesta['which']=='positive':
  10.  droid.dialogCreateAlert('Gracias por tu voto','Me alegra que te guste!')
  11. elif respuesta['which']=='negative':
  12.  droid.dialogCreateAlert('Gracias por tu voto','Una lastima que no te guste!')
  13. else:
  14.  droid.dialogCreateAlert('Gracias por tu voto','Un voto nulo :\\')
  15. droid.dialogShow()
  16.  
Por lo que dependerá del botón que presionemos la respuesta
Bueno, el sueño me la está ganando, así que mañana continúo y actualizo el post !

Fuente: http://rootcodes.com/python-androidalgunas-funciones-basicas/

Saludos !
180  Programación / Scripting / [Código-Python-Android]Calculadora por secuencia - JaAViEr(0x5d) en: 27 Diciembre 2011, 02:22 am
Hola, buen día.
Para navidad me llegó un samsung galaxy tab(con android), así que me puse a indagar sobre
como programar cosas para Android y me topé con mi amado python. Antes que todo
hay que bajar la aplicación SL4A http://code.google.com/p/android-scripting y luego el Python
desde la misma web.

Así que me animé a crear la misma calculadora por secuencias del QT4, pero en Android:
Código
  1. import android
  2. droid = android.Android()
  3. secuencia = droid.dialogGetInput('Secuencia','Inserta secuencia:', None).result
  4. resultado = eval(secuencia)
  5. droid.dialogCreateAlert('Resultado','Resultado %s'%resultado)
  6. droid.dialogShow()
  7.  

Capturas de pantalla:

RESULTADO


Saludos !
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines