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 - S3kh

#41
Qué tal gente, espero que me puedan ayudar. Leyendo en la documentación de Python no encontré módulo alguno que capture las teclas (Se que hay pero no son oficiales). ¿Hay alguna forma de poder capturar teclas sin bajar ningún módulo ni nada? Sólamente por curiosidad. No hace falta que me den links directos ni nada, nada mas díganme si lo hay, porque la verdad no lo encuentro u.u

Busqué si hay algo estándar de PYthon, pero no encuentro. Si se que está termcolor, pero no me funciona en Windows... ¿Tengo que hacerlo por mi mismo? ¿De qué tengo que informarme? Es que quiero darle algo mas de vida a la consola.
Muchas gracias de antemano.ç

EDIT:
Ahora encontré una WEB que no me cargaba, habla sobre ctypes. Y da ejemplo de cambio de color. Por lo que veo llama a las APIs de Windows... Me imagino que con esto me va a ser suficiente... Igual, si me pueden orientar un poco mas lo agradecería... :)

EDIT2:
Acá logré avanzar algo, mirando este código:
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE= -11
STD_ERROR_HANDLE = -12

FOREGROUND_BLUE = 0x01 # text color contains blue.
FOREGROUND_GREEN= 0x02 # text color contains green.
FOREGROUND_RED  = 0x04 # text color contains red.
FOREGROUND_INTENSITY = 0x08 # text color is intensified.
BACKGROUND_BLUE = 0x10 # background color contains blue.
BACKGROUND_GREEN= 0x20 # background color contains green.
BACKGROUND_RED  = 0x40 # background color contains red.
BACKGROUND_INTENSITY = 0x80 # background color is intensified.

import ctypes

std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)

def set_color(color, handle=std_out_handle):
   """(color) -> BOOL
   
   Example: set_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY)
   """
   bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
   return bool


Aunque no logro entenderlo, qué hacen exactamente las variables STD_OUTPUT_HANDLE y demás? Se que las otras son para colores, y después por lo visto ctypes.windll.kernel32 es para acceder a una función del kernel32. el identificador 'bool' es obligatorio? Ahora voy a averiguar sobre GetStdHandle, a ver si logro entenderlo u.u

Alguien que sepa sobre lo de las teclas? n.n

EDIT (numero 500millones): El tema de los códigos hexadecimales, cada dígito hexadecimal corresponde a un número y a un fondo? O 2 dígitos hexadecimales tienen un estándar?
Según el código, 0x80 intensifica el fondo, pero pruebo y no logro entender que es lo que realmente hace. :\
#42
ASM / Re: Salto de línea (fasm16) y algo mas je
24 Agosto 2011, 23:51 PM
ÇEs que me refería a que yo había usado dos cadenas de texto, no una :P
#43
ASM / Re: Salto de línea (fasm16) y algo mas je
24 Agosto 2011, 02:32 AM
 Ah, genial esa solución. Aunque la implementé de esta forma:


[...]
Texto db 'Hola xD', 0Dh, 0Ah, 24h
Pausa db 'Presione una tecla para continuar', 24h
[...]


Muchísimas gracias, ahora entendí mejor el por qué del 0Dh y 0Ah jeje...

Gracias n.n
#44
ASM / Salto de línea (fasm16) y algo mas je
23 Agosto 2011, 03:31 AM
 Qué tal gente? Estaba INTENTANDO hacer un programa que muestre "hola mundo", y en la línea siguiente que muestre "presione una tecla para continuar", y espere que se ingrese una tecla. Inicialmente había hecho esto

org 100h
use16

MOV      AH,9
MOV      DX,Texto
INT       21h             ;Muestro "Hola mundo!"
MOV      DX,Pausa
INT        21H            ;Muestro "Presione una tecla para continuar"
MOV      AH,1            ;Espero el ingreso de una tecla
INT        21H
INT        20h

Texto db 'Hola mundo!', 24h
Pausa db 'Presione una tecla para continuar.', 24h


Ahora, el mensaje "Presione una tecla para continuar" me aparece pegado al texto. La idea era que me quedara en la línea de abajo. Así que conté la cantidad de carácteresde "Hola mundo!", y la reste a la cantidad de columnas. Me dió 74, así que quise poner 74 espacios después del "Hola mundo!" asi el mensaje de pausa aparecía en la línea de abajo, intenté:


org 100h
use16

MOV      DX,Texto
MOV      AH,9
INT        21H
JMP        Espacios

Espacios:
MOV     DX,Espacio
MOV     CX,4A
INT       21h
DEC      CX
LOOP     Espacios
JMP       Pausa

Pausa:
MOV     AH,1
INT      21h
INT      20h



O sea, la idea es que inicie CX en 74, y vaya decrementando, y por cada ciclo, agregue un espacio. Al llegar a los 74, saltaría a la segunda línea y mostraría eso :P
(SI, soy un asco para esto)
La cosa es que tampoco me funciona así. Me estoy guiando por manuales viejos les aviso n.n

Y también vi algo de "salto de línea" que tenía que ponerle 0D 0A al final del texto del que saltaría a la otra línea, y me tira sintáxis inválida :(

Si alguien me puede decir como hacer funcionar eso, lo agradecería u.u
#45
Scripting / Python: Syntax error en "def" o_o
8 Agosto 2011, 22:38 PM
 De nuevo yo con mis problemas raros, estoy usando IDLE, estaba probando el siguiente código (Da las raíces de una ecuación cuadrática, y muestra los pasos para hacerla), y realmente, andaba todo bien, iba editando la funcion LinealStep (Que en el código se ocupa de mostrar el paso por paso), y de repente el programa empezó a tirar "Syntax Error", en algo donde no había tocado absolutamente nada. Me marca "def". Y me marca siempre uno. No sé sinceramente cuál es el error sintáctico acá. Se que no tiene que ver con identación (O al menos no me dice eso):

# -*- coding: cp1252 -*-

from os import system
from cmath import sqrt

def Lineal(a, b, c):
       a               = float(a)
       b               = float(b)
       c               = float(c)
       bc              = b ** 2.0
       bcstr           = str(bc)
       
       Disc            = bc - 4.0 * a * c
       DiscStr         = str(Disc)
       DiscStr2        = 'bc - 4.0 * a * c'
       
       Sqr_Res         = sqrt(Disc)
       Sqr_ResStr      = str(Sqr_Res)
       Sqr_ResStr2     = 'R2(bc - 4.0 * a * c)'
       
       NEG_Res         = -b - Sqr_Res / (2.0 * a)
       rNEG_Res        = abs(NEG_Res)
       
       POS_Res         = -b + Sqr_Res / (2.0 * a)
       rPOS_Res        = abs(POS_Res)
       
       print ' '
       print 'Fórmula usada: -b +- R2 <b^2 - 4 * a * c>'
       print '                        -----------------'
       print '                             2 * a      '

       LinealStep(a, b, c, bc, bcstr, Sqr_Res)

       print 'X1 = ', rPOS_Res
       print 'X2 = ', rNEG_Res

def LinealStep(a, b, c, bc, bcstr, Sqr_Res):

       Astr, Bstr, Cstr, BCstr = str(a), str(b), str(c), str(bc)
       print 'Paso 1) Implementar fórmula'
       print 'Paso 2) Reemplazar:'
       print ' a por ', Astr
       print ' b por ', Bstr
       print ' c por ', Cstr

       print 'Quedando asi la formula: ', Bstr, ' +- R2<', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr, '>'
       print ' '* 36, '-' * 25
       print ' '* 45, '2 * ', Astr

       print 'Resolviendo interior de la raiz(Discriminante): '
       print ' ', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr
       print ' ', BCstr, ' + ', str((4 * a) * c)
       print ' ', str(bc + (4 * a) * c), ' '

       print 'Ahora, se calcula la raiz cuadrada de ', str(bc + (4 * a) * c)
       print 'R2<', str(bc + (4 * a) * c, ' = ', Sqr_Res

##ACÁ ME TIRA ERROR MARCANDO "def", pero a veces lo marca en los otros def
def Menu():
       TCuad           = raw_input('Coeficiente de termino cuadratico(a): ')
       TX              = raw_input('Segundo coeficiente(b): ')
       TIndep          = raw_input('Término independiente(c): ')
       print           'La ecuacion quedaria de la siguiente manera: '
       print           int(TCuad), 'X^2 + ', int(TX), 'X + ', int(TIndep)
       Next            = raw_input('Presione enter para hallar raíces: ')
       Lineal(TCuad, TX, TIndep)

Menu()



EDIT: Y ahora, saqué la función Menu, y me marca error en el nombre de la variable TCuad, dejo el código de esa última parte:

def LinealStep(a, b, c, bc, bcstr, Sqr_Res):

        Astr, Bstr, Cstr, BCstr = str(a), str(b), str(c), str(bc)
        print 'Paso 1) Implementar fórmula'
        print 'Paso 2) Reemplazar:'
        print ' a por ', Astr
        print ' b por ', Bstr
        print ' c por ', Cstr

        print 'Quedando asi la formula: ', Bstr, ' +- R2<', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr, '>'
        print ' '* 36, '-' * 25
        print ' '* 45, '2 * ', Astr

        print 'Resolviendo interior de la raiz(Discriminante): '
        print ' ', Bstr, '^2 + 4 * ', Astr, ' * ', Cstr
        print ' ', BCstr, ' + ', str((4 * a) * c)
        print ' ', str(bc + (4 * a) * c), ' '

        print 'Ahora, se calcula la raiz cuadrada de ', str(bc + (4 * a) * c)
        print 'R2<', str(bc + (4 * a) * c, ' = ', Sqr_Res


TCuad           = raw_input('Coeficiente de termino cuadratico(a): ')
TX              = raw_input('Segundo coeficiente(b): ')
TIndep          = raw_input('Término independiente(c): ')
print           'La ecuacion quedaria de la siguiente manera: '
print           int(TCuad), 'X^2 + ', int(TX), 'X + ', int(TIndep)
Next            = raw_input('Presione enter para hallar raíces: ')
Lineal(TCuad, TX, TIndep)


Me marca en rojo TCuad.  Qué onda? O sea, no hay problemas de identación, no es palabra reservada, y me anduvo perfecto :\ se me empezó a buguear con el def de las funciones, saco la función Menu y me tira error en eso u.u


Desde ya muchas gracias de antemano n.n
#46
http://pastebin.com/xwHMg2mM

gracias por la ayuda Nov n.n

EDIT: Solucionado. Tuve que agregarle un espacio, no se por qué. Se ve mal identado, pero funciona en fin. Je.. Gracias :)
#47
 Pero el tema es que en mi editor se ve como la imágen que puse. Y lo modifique con los espacios correctos, pero sigue dándome el mismo error. Reemplazé también los espacios por tabulaciones y me da el mismo error. No se que pasa. También usé el notepad común, y sigue igual. :S
#48
No, no funciona, es la única que no funciona. Y está todo hecho con espacios, no uso tabulador :P por eso me llama la atención, digamos, viene:
While
  If
  elif
    instrucciones
    [...]
  elif
    instrucciones
    [...]

Digamos, está bien identada. Además me marca el error de identación con el "^" justo donde termina la instruccion, es decir al final de [...]Usuario_Objeto)
El "piquito" señala el paréntesis :S
#49
 O hay algo que estoy pasando por alto, o algo funca mal, me tira "IdentationError: Unindent doesnt match any outer identation level", es decir, que no encaja con ningún otro nivel de identación. Estoy pensando que es algún tipo de problema con el editor de texto, verán acá si les pongo el código me aparecen las cosas con una identación DIFERENTE a la que veo yo en mi editor (notepad++), según donde lo veo, está todo identado como se debe. Les dejo el código, el txt y la imágen de como lo veo yo.
EDIT: El error está en la línea 59, pero miren la imágen porque el código está mal identado, no es como lo tengo yo en m txt.
Código:

import marqlib
from random import randint

RondasJugadas = 0
PCGanadas = 0
UsuariosGanadas = 0
gDTj = '>8'
gITj = '8<'
gPr = '[]'
gPl = '#'

def Clean():
   system('cls')

def Tabla(uGanadas, pGanadas, rJugadas, uObjeto, pObjeto):
   print 'Rondas jugadas: ', rJugadas
   print 'Usuario: (', uObjeto, '): ', uGanadas
   print 'PC: (', pObjeto, '): ', pGanadas
   Next = raw_input()
   Clean()
 
def Presentacion():
   system('color 1f & cls')
   marqlib.DAI_Marq(' ', 'Piedra, Papel, O Tijera!', 25, 1, 1, 0.1)

def EleccionPC():
   ePC = randint(1, 3)
   return ePC

def Rest(Val, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto):
  if Val == 0:
     print 'Empate!'
     Tabla(UsuarioGanadas, PCGanadas, RondasJugadas, pObjeto, uObjeto)
  elif Val == 1:
      Tabla(UsuarioGanadas, PCGanadas, RondasJugadas, pObjeto, uObjeto)
  elif Val == 3:
      print 'Ganador: USUARIO!'
      Tabla(UsuarioGanadas, PCGanadas, RondasJugadas, Usuario_Objeto, PC_Objeto)
  elif Val == 4:
      print 'Ganador: PC'
      Tabla(UsuarioGanadas, PCGanadas, RondasJugadas, Usuario_Objeto, PC_Objeto)

def Jugada(Usuario_Objeto, Usuario_Opcion, PC_Opcion, PC_Objeto):
 while PCGanadas <= 2 or UsuarioGanadas <= 2:
   RondasJugadas += 1
   if Usuario_Opcion == PC_Opcion:
    Rest(0, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
   elif Usuario_Opcion == 1 and PC_Opcion == 2:
    PCGanadas += 1
    Rest(1, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
   elif Usuario_Opcion == 1 and PC_Opcion == 3:
    UsuarioGanadas += 1
    Rest(1, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
   elif Usuario_Opcion == 2 and PC_Opcion == 1:
    UsuarioGanadas += 1
    Rest(1, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
   elif Usuario_Opcion == 2 and PC_Opcion == 3:
    PCGanadas += 1 #LA LINEA QUE SIGUE ES LA 59.
        Rest(1, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
   elif Usuario_Opcion == 3 and PC_Opcion == 2:
    UsuarioGanadas += 1
        Rest(1, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
   elif Usuario_Opcion == 3 and PC_Opcion == 1:
    PCGanadas += 1
    Rest(1, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
 if PCGanadas == 2:
   Rest(4, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
MenuDeJuego()
 elif UsuarioGanadas == 2:
   Rest(3, PCGanadas, UsuarioGanadas, RondasJugadas, PC_Objeto, Usuario_Objeto)
   MenuDeJuego()

def MenuDeJuego():
   PCOp = EleccionPC()
   mOp = raw_input('Piedra(1), Papel(2), o Tijera(3)? ')
   if PCOp == 1:
       Obj = gPr
   elif PCOp == 2:
       Obj = gPl
   elif PCOp == 3:
       Obj = gDTj
   OpcionUsuario(mOp, PCOp, Obj)

def OpcionUsuario(Opcion, PCOp, Obj):
   if Opcion > 3:
       print 'Error. Opcion incorrecta'
   break
   if Opcion == 1:
       ObjetoElegido = gPr
   Jugada(ObjetoElegido, Opcion, PCOp, Obj)
   elif Opcion == 2:
       ObjetoElegido = gPl
   Jugada(ObjetoElegido, Opcion, PCOp, Obj)
   elif Opcion == 3:
       ObjetoElegido = gITj
       Jugada(ObjetoElegido, Opcion, PCOp, Obj)

Presentacion()
MenuDeJuego()


Ven ahí que la línea 59 (precedida por mi comentario en el código) se ve con otra identación, errónea según mi entender. Pero yo en mi editor de texto la veo de la siguiente manera:
http://imageshack.us/photo/my-images/807/asden.jpg/

Fíjense que la línea 59 está identada tal cual como las anteriores, y el error sale justo en esa línea, y en caso de que la identación esté mal, por qué no salió en las anteriores si están identadas de la misma forma? :\

Sinceramente no veo porque el error está en esa línea que es igual a las otras.
Gracias de antemano por la ayuda :) Por si influye en algo, uso Python2.7.

Saludos, y gracias por cualquier ayuda n.n

PD: El código subido acá no está identado de la misma forma que en mi editor de textos, asi que es mejor guiarse por la imágen :S
#50
ASM / Re: Duda sobre modo :P
19 Julio 2011, 15:23 PM
Ah ahora entendí bien n.n gracias a todos n.n ahora a seguir leyendo :) muchísimas gracias :)