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)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python]Mi módulo newbie n.n
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python]Mi módulo newbie n.n  (Leído 1,886 veces)
S3kh

Desconectado Desconectado

Mensajes: 58


Ver Perfil
[Python]Mi módulo newbie n.n
« en: 15 Septiembre 2011, 00:14 am »

 [edit] ¿Cómo le pongo color al código?
 Bueno, edito el mismo post. Ya solucioné mis dudas, leí, entendí y estoy haciendo mi módulo (ya hace unos días) con varias funciones raras :P Pienso ponerle muchas cosas, hasta ahora tiene:
-Armado de menúes (Ahora estoy trabando en el armado de menúes con contexto)
-Armado de cajas de texto (con recuadros ASCII Extendidos)
-Marquesina de textos (Textos en movimiento, los cuáles voy a mejorar)
-Manejo de color en consola: Obtener atributs de texto, cambiarlos, etc.
-Obtención de valores: Se puede pasra una lista de cadenas, y devuelve la de menor y mayor longitud, o se puede pasar números y da el mayor y el menor, en una tupla.
-Tiene otros "dos print", ilprint para mostrar un mensaje con otro color, sin cambiar el color de la consola, es decir, cambia solopara mostrar el texto y vuelve a la normalidad y "olprint" que es lo mismo, solo que muestra el texto seguido (equivalente a sys.stdout.write)
-Invertir cadenas
-Muestra mensajes con beepeo :P
Y estoy trabajando en:
Barra de progreso
Inputboxes (Con recuadros ascii)
Animaciones ascii :P
Relojes (TAmbién en ASCII, toda la onda)
Y estoy modificando un programa mío para resolver cosas de matemática, y poderlo aplicar :P
Es una newbiada, y tiene cosas que están de mas, pero es porque forman parte de lo que estoy agregando :P
 tiene un par de variables definidas, como líneas, y cosas así :P Véanlo en el código, después voy a hacer un texto sobre como usarlo :P Es una newbiada total, y espero que algunos sabiondos puedan corregirme n.n Hay cosas que repito ESTÁN DE MAS pero porque van a formar parte de otra cosa que estoy armando :P
Y también puse de dónde aprendí eso :P

Código
  1. # -*- coding: cp1252 -*-
  2. #--------------------------------------------
  3. #Autor: GeSeM (S3KH)   Grisolía Emilio.
  4. # Se permite la modificación, y edición de jazzer. Dejando a la moral de cada uno el hecho de mantener o no los créditos.
  5. #Prohibido distribuirlo compilado SIN el fichero de texto, puesto que es código abierto.
  6. #Programado en Python 2.7.
  7. #--
  8. #Versión 2.0
  9. # Espero, pueda servirles un poco...!
  10. #                                    Septiembre, 2011. Argentina.
  11. #--------------------------------------------
  12.  
  13. print 'Cargando Jazzer...'
  14. print 'Cargando datos... 100%'
  15. ERROR01 = 'Error (Argumento invalido): '
  16. ERROR02 = 'Error (Función inexistente): '
  17. ERROR03 = 'Error (Dato/s invalido/s): '
  18. VAR     = 'VAR'
  19. n       = '-n'
  20. endl    = 'endl'
  21.  
  22.  
  23.  
  24. print 'Cargando (modulos)... 100%'
  25.  
  26.  
  27. #--- MÓDULOS IMPORTADOS ---#
  28.  
  29. import os, time, math, cmath, sys
  30. print 'Cargando ctypes... 100%'
  31. from ctypes import *
  32.  
  33. #-- El uso de ctypes brinda la posibilidad de poder usar las APIs de Windows, entre demás prestaciones de C
  34.  
  35. #------------CONSTANTES (WIN32API)------------------------#
  36.  
  37. print 'Cargando jazzer (GENERIC_READ)... 100%'
  38. #GENERIC_READ
  39.  
  40. STD_INPUT_HANDLE     = -10
  41. STD_OUTPUT_HANDLE    = -11
  42. STD_ERROR_HANDLE     = -12
  43.  
  44. #-- Tipos de dato C
  45. print 'Cargando datos C... 100%'
  46. Short                = c_short
  47. uShort               = c_ushort
  48. Long                 = c_long
  49.  
  50. #-- HWND (GetStdHandle)
  51. print 'Cargando HWND_STD(IO)... 100%'
  52. HWND_StdOut          = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
  53. HWND_StdIn           = windll.kernel32.GetStdHandle(STD_INPUT_HANDLE)
  54.  
  55.  
  56. #------------CONSTANTES (COLORES)--------------------------#
  57. # Dados en formato hexadecimal                             #
  58. #----------------------------------------------------------#
  59. print 'Cargando colores... 100%'
  60. FOREGROUND_BLACK     = 0x0000
  61. FOREGROUND_BLUE      = 0x0001
  62. FOREGROUND_GREEN     = 0x0002
  63. FOREGROUND_CYAN      = 0x0003
  64. FOREGROUND_RED       = 0x0004
  65. FOREGROUND_MAGENTA   = 0x0005
  66. FOREGROUND_YELLOW    = 0x0006
  67. FOREGROUND_GREY      = 0x0007
  68. FOREGROUND_INTENSITY = 0x0008 # Color de texto intensificado
  69. BACKGROUND_BLACK     = 0x0000
  70. BACKGROUND_BLUE      = 0x0010
  71. BACKGROUND_GREEN     = 0x0020
  72. BACKGROUND_CYAN      = 0x0030
  73. BACKGROUND_RED       = 0x0040
  74. BACKGROUND_MAGENTA   = 0x0050
  75. BACKGROUND_YELLOW    = 0x0060
  76. BACKGROUND_GREY      = 0x0070
  77. BACKGROUND_INTENSITY = 0x0080 # Fondo de texto intensificado
  78.  
  79. #-------------------------------------------------------------#
  80.  
  81. #-------- Carácter de emisión de sonido
  82. beep                 = chr(7)
  83.  
  84.  
  85.  
  86.  
  87. #----- CONSTANTES (Gráficas) ----------------------------------#
  88.  
  89. print 'Constantes graficas... 100%'
  90. #----- LÍNEAS (ASCII EXTENDIDO) -----#
  91.  
  92. # Usadas para la construccion de menúes
  93.  
  94. # formato de constante:
  95. # Las constantes de las líneas se componen de un prefijo "l", seguido de una S o una D
  96. # para indicar si es simple(S) o doble(D). Finalmente, un juego de 3 letras indica cuál caracter es:
  97.  
  98. #-- ES(I/D) = Esquina Superior (Izquierda o Derecha)
  99. #-- EI(I/D) = Esquina Inferior (Izquierda o Derecha)
  100. #-- HOR     = HORizontal
  101. #-- VER     = VERtical
  102. #-- CRZ     = CRuZ
  103. #-- T(DI/ID)= "T" (Derecha>Izquierda / Derecha<Izquierda) (Línea "T" que apunta hacia un lado)
  104. #-- LT(B/A) = Línea T (Baja / Alta) (De abajo hacia arriba / De arriba hacia abajo)
  105.  
  106. #----------LÍNEAS DOBLES---------------------------#
  107. lDESI    = chr(201) #-- Esquina superior izquierda
  108. lDESD    = chr(187) #-- Esquina superior derecha
  109. lDEID    = chr(188) #-- Esquina inferior derecha
  110. lDEII    = chr(200) #-- Esquina inferior izquierda
  111.  
  112. lDVER    = chr(186) #-- Línea doble vertical
  113. lDHOR    = chr(205) #-- Linea doble horizontal
  114.  
  115. lDLTA    = chr(203) #-- Línea "T" (Arriba)
  116. lDLTB    = chr(202) #-- Línea "T" (Abajo)
  117. lDTID    = chr(185) #-- Línea "T" (Izquierda>Derecha)
  118. lDTDI    = chr(204) #-- Línea "T" (Derecha>Izquierda)
  119.  
  120. lDCRZ    = chr(206) #-- Linea doble "cruz"
  121.  
  122. #----------LÍNEAS SIMPLES---------------------------#
  123. lSEII    = chr(192) #-- Esquina inferior izquierda
  124. lSESI    = chr(218) #-- Esquina superior izquierda
  125. lSESD    = chr(191) #-- Esquina superior derecha
  126. lSEID    = chr(217) #-- Esquina inferior derecha
  127.  
  128. lSVER    = chr(179) #-- Línea vertical
  129. lSHOR    = chr(196) #-- Línea horizontal
  130.  
  131. lSTID    = chr(195) #-- Línea "T" (Izquierda>Derecha)
  132. lSLTB    = chr(193) #-- Línea "T" (abajo)
  133. lSLTA    = chr(194) #-- Línea "T" (arriba)
  134. lSTDI    = chr(180) #-- Linea "T" (Derecha>Izquierda)
  135.  
  136. lSCRZ    = chr(197) #-- Línea "cruz"
  137.  
  138.  
  139. #----------------GRÁFICOS---------------------------#
  140. # Carácteres que son usados para rellenar espacios
  141. # o gráficos, animaciones, etc
  142. #----------------------------------------------------#
  143.  
  144. fill_1           = chr(176) #-- Menos saturado
  145. fill_2           = chr(177)
  146. fill_3           = chr(178)
  147. fill_4           = chr(219) #-- Mas saturado
  148. #--
  149. fill_5           = chr(220)
  150. fill_6           = chr(221)
  151. fill_7           = chr(222)
  152. fill_8           = chr(223)
  153. blank            = ' '
  154. P                = '.'
  155. D1, D2           = '<', '>'
  156. line             = chr(10)
  157.  
  158. print 'Secuencias (animaciones)... 100%'
  159. #---------SECUENCIAS--------------------------------#
  160. # Las animaciones son secuencias de carácteres
  161. # que mostrados (respetando dicha secuencia)
  162. # generan "imágenes" en movimiento.
  163. # Se almacenan en listas, para ser impresas
  164. # siguiendo el orden en ellas.
  165. #----------------------------------------------------#
  166.  
  167. ANIM01           = [P, P*2, P*3]                    #Secuencia de 3 puntos suspensivos
  168. ANIM02           = [D1, D1*2, D1*3]                 #Secuencia con los direccionales (<)
  169. ANIM03           = [D2, D2*2, D2*3]                 #Secuencia con los direccionales (>)
  170. ANIM04           = [fill_1, fill_2, fill_3, fill_4] #Secuencia con carácteres de relleno
  171. ANIM05           = ['\\', lSVER*2, '/', lSHOR*2]    #Secuencia de barra giratoria
  172. ANIM06           = [blank, D1]                      #Prompt titilante
  173.  
  174.  
  175.  
  176. print 'Cargando controles... 100%'
  177. #----------CONSTANTES DE CONTROLES------------------#
  178. # Hay disponibles los siguientes "controles":
  179. # Cajas de aviso
  180. # Cajas de ingreso de datos
  181. # Relojes (Numeración romana, occidenta (Analógica / Digital)
  182. # Barras separadoras
  183. #---------------------------------------------------#
  184. # Próximamente (Barras de progreso, animaciones ASCII)
  185. # Y mas...!
  186.  
  187.  
  188. #--CAJAS DE TEXTO (Marco doble) (Argumentos)
  189.  
  190. DBox  = 'DBox'
  191. DDBox = 'DDBox'
  192. DIBox = 'DIBox'
  193. D1Box = 'D1Box'
  194. D2Box = 'D2Box'
  195.  
  196.  
  197. #--CAJAS DE TEXTO (Marco simple) (Argumentos)
  198.  
  199. SBox  = 'SBox'
  200. SDBox = 'SDBox'
  201. SIBox = 'SIBox'
  202. S1Box = 'S1Box'
  203. S2Box = 'S2Box'
  204.  
  205. #Lista de cajas
  206.  
  207. Boxes = [DBox, DDBox, DIBox, D1Box, D2Box, SBox, SDBox, SIBox, S1Box, S2Box]
  208.  
  209. #------------- Relojes ----------------------#
  210. CLOCK_OCC   = 'CLOCK_OCC'
  211. CLOCK_ROM   = 'CLOCK_ROM'
  212.  
  213. DIGITAL   = 'DIGITAL'
  214. ANALOGIC = 'ANALOGIC'
  215.  
  216. FORM12    = 'FORM12'    #Formato de 12horas
  217. FORM24    = 'FORM24'    #Formato de 24horas
  218.  
  219. sContext = 'sRecuadro' #Sin recuadro
  220. Context1 = 'Recuadro1' #Recuadro rectangular o cuadrado
  221. Context2 = 'Recuadro2' #Recuadro circular o redondeado
  222.  
  223. NUM_OCC12 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
  224. NUM_OCC24 = NUM_OCC12
  225. iN = 13
  226. while (iN <= 24):
  227.    NUM_OCC24.append(iN)
  228.    iN += 1
  229.  
  230.  
  231. NUM_ROM  = {1:'I',
  232.            2:'II',
  233.            3:'III',
  234.            4:'IV',
  235.            5:'V',
  236.            6:'VI',
  237.            7:'VII',
  238.            8:'VIII',
  239.            9:'IX',
  240.            10:'X',
  241.            11:'XI',
  242.            12:'XII'
  243.            }
  244.  
  245.  
  246.  
  247. #---------------------------------------------#
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254. print 'Cargando estructuras C... 100%'
  255. #-------------------------------------------------------------------------------------#
  256.  
  257. #--ESTRUCTURAS C------------------------------#
  258. # Las estructuras C son utilizadas
  259. # junto con ctypes para poder invocar funciones
  260. # del sistema operativo, que necesiten apuntar
  261. # a estructuras de datos
  262. #-----------------------------------
  263. # Visitar MSDN y documentación de Python para mas información.
  264.  
  265. #----------------------Console (ScreenBufferInfo)
  266.  
  267. class COORD(Structure):           #-- Estructura para coordenadas.
  268.        _fields_ =[
  269.                ('X', Short),
  270.                ('Y', Short)
  271.                  ]
  272.  
  273. class SMALL_RECT(Structure):       #-- Estructura para posiciones.
  274.        _fields_ =[
  275.                ('Left', Short),
  276.                ('Top', Short),
  277.                ('Right', Short),
  278.                ('Bottom',Short)
  279.                  ]
  280.  
  281. class CONSOLE_SCREEN_BUFFER_INFO(Structure):
  282.        _fields_ =[
  283.                ('dwSize', COORD),
  284.                ('dwCursorPosition', COORD),
  285.                ('wAttributes', uShort),
  286.                ('srWindow', SMALL_RECT),
  287.                ('dwMaximumWindowSize', COORD)
  288.                  ]
  289.  
  290.  
  291. print 'Cargando funciones... (Misc)'
  292. #--- Reversión de una cadena
  293. #--- (Argumento = Cadena)
  294. def strReverse(String):
  295.        reversedString = ''
  296.        reverseIndex  = -1
  297.        abs_maxCount  = abs(len(String))
  298.        while (abs(reverseIndex) <= abs_maxCount):
  299.            reversedString = reversedString + String[reverseIndex]
  300.            reverseIndex -= 1
  301.        return reversedString
  302.  
  303. #--- Obtención de cadena de mayor y menor longitud, o número mas grande y mas chico
  304. #--- Devuelve una tupla, siendo elemento 0 el mayor y 1 el menor.
  305. #--- Los arugmentos son: 'str', 'num', para indicar si se trabaja con una cadena o números.
  306. #--- Traspasar cualquier cantidad de cadenas/números
  307. def GetValues(valueType, *Values):
  308.        valTypes = ('str', 'num');
  309.        if not (valueType in valTypes): return ERROR01+valueType;  
  310.        if (valueType==valTypes[0]):
  311.                maxStr, minStr = '', '';
  312.                lenValues      = len(Values);
  313.                Count          = 0;
  314.                maxCount       = (lenValues - 1);
  315.                while (Count < maxCount):
  316.                        if (len(Values[Count]) > len(Values[Count+1])):
  317.                                maxStr=Values[Count];
  318.                                minStr=Values[Count+1];
  319.                        elif (len(Values[Count]) < len(Values[Count+1])):
  320.                                maxStr=Values[Count+1];
  321.                                minStr=Values[Count];
  322.                        Count += 1;
  323.                return maxStr, minStr;
  324.        elif (valueType==valTypes[1]):
  325.                tmpMenor = 0
  326.                tmpMayor = 0
  327.                longitudValores    =len(Valores)
  328.                Contador           = 0
  329.                maxContador        = (longitudValores-1)
  330.                while (Contador < maxContador):
  331.                        if (Valores[Contador] >= Valores[Contador+1]):
  332.                                tmpMayor = Valores[Contador]
  333.                                tmpMenor = Valores[Contador+1]    
  334.                        elif (Valores[Contador] <= Valores[Contador+1]):
  335.                                tmpMayor = Valores[Contador+1]
  336.                                tmpMenor = Valores[Contador]
  337.                        Contador += 1
  338.                return tmpMayor, tmpMenor
  339.  
  340.  
  341. print 'Cargando funciones (WINAPI32)...100%'
  342. #------------------------------FUNCIONES---------------------------------#
  343.  
  344. #--- Manejo de consola (Color e información)
  345. #--- No necesita argumentos, devuelve el color de consola.
  346. def GetConsoleColor():
  347.        GConsoleScreenBufferInfo = CONSOLE_SCREEN_BUFFER_INFO()
  348.        windll.kernel32.GetConsoleScreenBufferInfo(HWND_StdOut, byref(GConsoleScreenBufferInfo))
  349.        return hex(GConsoleScreenBufferInfo.wAttributes)
  350. #--- Argumento = Color
  351. def SetConsoleColor(Color):
  352.        bool = windll.kernel32.SetConsoleTextAttribute(HWND_StdOut, Color)
  353.        return bool
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360. #-------------------------------------------------------------------------#
  361.  
  362.  
  363. print 'Cargando funciones de cálculo lineal... 100%'
  364. class Lineal:
  365. # Cálculo líneal
  366.    def __init__(self, a, b, c):
  367.        self.a = a
  368.        self.b = b
  369.        self.c = c
  370. # Obtención de discriminante
  371.    def Discriminante(self):
  372.        Discriminante = self.b*self.b -4*self.a*self.c
  373.        return Discriminante
  374. # Obtención de raices (Soporte para raices en campo complejo)  
  375.    def raices(self):
  376.        Discriminante = self.b*self.b -4*self.a*self.c
  377.        if (Discriminante < 0):
  378.                real = -self.b/(2*self.a)
  379.                imag = math.sqrt (-Discriminante)/(2*self.a)
  380.                return 'Im', 'X1', real, imag, 'X2', real, imag
  381.        elif (Discriminante > 0):
  382.                X1 = (-self.b + math.sqrt (Discriminante))/(2*self.a)
  383.                X2 = (-self.b - math.sqrt (Discriminante))/(2*self.a)
  384.                return '2', X1, X2
  385.        elif (Discriminante == 0):
  386.                X = -self.b/(2*self.a)
  387.                return '1', X
  388.  
  389.  
  390. #-----------Draws--------------------------------------------------------#
  391. def pchar(char): sys.stdout.write(char);
  392.  
  393. def iprint(Color, jline, *iText):
  394.        def tpchar(Text):
  395.            for item in Text: pchar(str(item));
  396.        if (Color != n):
  397.            prevColor = hex(GetConsoleColor());
  398.            SetConsoleColor(Color);
  399.        Count     = 0;
  400.        fText     = [];
  401.        for item in iText:fText.append(str(item));
  402.        for item in fText:tpchar(str(item));
  403.        if (Color != n):
  404.            SetConsoleColor(prevColor);
  405.        if (jline == endl):
  406.            print line
  407.  
  408. class Draw:
  409.        def __init__(self, *Args):
  410.            self.Args = Args   #-- En construcción
  411.  
  412. #----------CONTROLES------------------------------------------------------#
  413.  
  414.  
  415. print 'Cargando controles... 100%'
  416.  
  417.  
  418.  
  419.  
  420. class Control:
  421.        def __init__(self, *Options):
  422.                if not (Options):
  423.                    pass;
  424.  
  425.                lnOptions = len(Options)
  426.                #-- En construcción
  427.  
  428.  
  429.  
  430.  
  431.  
  432.        def Box(self, Color, Sound, Stop, Text, box):
  433.                if not (box in Boxes):
  434.                        x = Control()
  435.                        Control.sbox(x, 0xC, 0, 1, 'Error <box inválido>', DBox)
  436.                lenLDH  = lDHOR*len(Text)
  437.                txtLn   = lDVER+Text+lDVER
  438.                prevColor = GetColor()
  439.                SetConsoleColor(Color)
  440.                #-- Verificación argumento caja --#
  441.                if (box == DBox):
  442.                        print lDESI+lenLDH+lDESD+line+txtLn+line+lDEII+lenLDH+lDEID
  443.                        SetConsoleColor(prevColor)
  444.                        if (Sound == 1): sys.stdout.write(chr(7))
  445.                        if (Stop == 1): raw_input()
  446.                elif (box == DDBox):
  447.                        print lDESI+lenLDH+lDLTA+line+txtLn+line+lDEII+lenLDH+lDLTB
  448.                        SetConsoleColor(prevColor)
  449.                        if (Sound == 1): sys.stdout.write(chr(7))
  450.                        if (Stop == 1): raw_input()
  451.                elif (box == DIBox):
  452.                        print lDLTA+lenLDH+lDESD+line+txtLn+line+lDLTB+lenLDH+lDEID
  453.                        SetConsoleColor(prevColor)
  454.                        if (Sound == 1): sys.stdout.write(chr(7))
  455.                        if (Stop == 1): raw_input()
  456.                elif (box == D1Box):
  457.                        print lDHOR+lenLDH+lDHOR+line+Texto+line+lDHOR+lenLDH+lDHOR
  458.                        SetConsoleColor(prevColor)
  459.                        if (Sound == 1): sys.stdout.write(chr(7))
  460.                        if (Stop == 1): raw_input()
  461.                elif (box == D2Box):
  462.                        print lDVER+(blank*len(Texto))+lDVER+line+lDVER+Texto+lDVER+line+lDVER+(blank*len(Texto))+lDVER;
  463.                        SetConsoleColor(prevColor);
  464.                        if (Sound == 1): sys.stdout.write(chr(7));
  465.                        if (Stop == 1): raw_input();
  466.  


« Última modificación: 20 Septiembre 2011, 02:07 am por S3kh » En línea

criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: [Python]Mi módulo newbie n.n
« Respuesta #1 en: 16 Septiembre 2011, 20:57 pm »

[*code=python][*/code]

(Sin los asteriscos).

Un saludo.


« Última modificación: 16 Septiembre 2011, 20:59 pm por R0LFback » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python] modulo de C para python
Scripting
rponceaci4 3 3,982 Último mensaje 5 Noviembre 2010, 22:30 pm
por rponceaci4
[PYTHON] Modulo random
Scripting
ChicoMaravilla 2 6,463 Último mensaje 8 Abril 2011, 00:54 am
por ChicoMaravilla
[Python] Importar Funciones de C++ a Modulo de Python
Scripting
Di6it4Lj4ck4L 2 2,823 Último mensaje 2 Mayo 2011, 19:08 pm
por Di6it4Lj4ck4L
Sobre modulo record en python
Scripting
lindtaylor 0 2,150 Último mensaje 21 Febrero 2012, 18:22 pm
por lindtaylor
[AYUDA][PYTHON] Necesito ayuda con el metodo SEARCH del modulo RE de python
Scripting
Noxware 2 1,914 Último mensaje 24 Mayo 2014, 16:11 pm
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines