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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Python (Moderador: Danielㅤ)
| | |-+  [Python] Imprimir mas rápido
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Imprimir mas rápido  (Leído 2,832 veces)
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
[Python] Imprimir mas rápido
« en: 3 Agosto 2015, 11:09 am »

Hola tengo este codigo:

Código
  1. from os import system
  2. from msvcrt import getch
  3. import colorama
  4. from colorama import Fore
  5. import json
  6.  
  7. colorama.init()
  8.  
  9. maxX = 80
  10. maxY = 40
  11.  
  12. system('mode 80,40')
  13. class posistion:
  14. def __init__(self):
  15. self.x = 0
  16. self.y = 1
  17. def addX(self,v = 1):
  18. if self.x < maxX - 1:
  19. self.x += v
  20. if self.x < 0:
  21. self.x = 0
  22. return self.x
  23. else:
  24. return -1
  25. def addY(self,v = 1):
  26. if self.y < maxY - 1:
  27. self.y += v
  28. if self.y < 1:
  29. self.y = 1
  30. return self.y
  31. else:
  32. return -1
  33. class cForSave:
  34. pass
  35.  
  36. def Mprint(m):
  37. r = '\n'
  38. for i,x in enumerate(m):
  39. for j,y in enumerate(x):
  40. if i == pos.y and j == pos.x:
  41. r += (Fore.RED + y)
  42. elif y == ' ':
  43. r += (Fore.WHITE + y)
  44. else:
  45. r += (Fore.WHITE + y)
  46. print r,
  47. #print pos.x,pos.y
  48.  
  49.  
  50. pos = posistion()
  51. matrix = [[' ' for x in range(1,maxX + 1)] for x in range(1,maxY + 1)]
  52. while True:
  53. c = getch()
  54. if c == '\000' or c == '\xe0':
  55. key = ord(getch())
  56. if key == 77: # right
  57. pos.addX()
  58. elif key == 75: # left
  59. pos.addX(-1)
  60. elif key == 80: # bottom
  61. pos.addY()
  62. elif key == 72: # top
  63. pos.addY(-1)
  64. elif c == '\t': # Save monster to file
  65. f = open('monster','w')
  66. s = cForSave()
  67. s.matrix = matrix
  68. s.pos = pos
  69. json.dump(s,f)
  70. f.close()
  71. system('cls')
  72. print 'Monster saved!'
  73. system('pause')
  74. elif c == '\r': # Load monster from file
  75. try:
  76. f = open('monster','r')
  77. s = json.load(f)
  78. matrix = s.matrix
  79. pos = s.pos
  80. except IOError:
  81. system('cls')
  82. print 'Monster file not found!'
  83. system('pause')
  84. else:
  85. matrix[pos.y][pos.x] = c
  86. system('cls')
  87.  
  88. Mprint(matrix)
  89.  
  90.  
Funciona pero muy lento y la pantalla parpadea. Es mi segundo programa en python y no se me ocurrió otra manera. No se como modificar solo un carácter del terminal con python y no reescribir todo.

Un saludo


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [Python] Imprimir mas rápido
« Respuesta #1 en: 3 Agosto 2015, 11:16 am »

no hay ninguna manera en que pueda probar que es lo que pasa... pero recomiendo usar el cls justo antes de la impresión para evitar el parpadeo


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: [Python] Imprimir mas rápido
« Respuesta #2 en: 4 Agosto 2015, 13:45 pm »

no hay ninguna manera en que pueda probar que es lo que pasa... pero recomiendo usar el cls justo antes de la impresión para evitar el parpadeo

El cls no mejora nada. También probé con imprimir cada carácter en su sitio pero veo que tarda todavía mas:

Código
  1. def Mprint(m):
  2. r = '\n'
  3. for i,x in enumerate(m):
  4. for j,y in enumerate(x):
  5. if i == pos.y and j == pos.x:
  6. r += (Fore.RED + '\033[' + str(i) + ';' + str(j) + 'H' + y)
  7. elif y == ' ':
  8. r += (Fore.WHITE + '\033[' + str(i) + ';' + str(j) + 'H' + y)
  9. else:
  10. r += (Fore.WHITE + '\033[' + str(i) + ';' + str(j) + 'H' + y)
  11. print r,

Por ahora no se me ocurre otra cosa
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [Python] Imprimir mas rápido
« Respuesta #3 en: 4 Agosto 2015, 13:48 pm »

y si en lugar de borrar simplemente sobreescribes (y aagregas una cantidad x de espacios al final para sobreescribir en blanco el resto)
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Python] Imprimir mas rápido
« Respuesta #4 en: 4 Agosto 2015, 14:45 pm »

No necesitas limpiar el buffer con el comando CLS, ni tampoco hacer un "char-fill" con espacios.

Lee:
http://foro.elhacker.net/scripting/iquestcomo_obtener_una_combinacion_mediante_su_indice-t438670.0.html;msg2027398#msg2027398

PD: al menos podrías haber indicado cual es la finalidad de tu script, ¿noc crees?.

Saludos
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda imprimir variables Python « 1 2 »
Scripting
CaronteGold 16 20,179 Último mensaje 29 Noviembre 2009, 22:30 pm
por Novlucker
Imprimir valor de una funcion en python
Scripting
Canariolp21 4 8,727 Último mensaje 30 Noviembre 2010, 16:48 pm
por Canariolp21
Imprimir resultado Python
Scripting
krystiag 0 2,251 Último mensaje 29 Noviembre 2016, 19:19 pm
por krystiag
Python se ha convertido en el lenguaje de programación que crece más rápido
Noticias
wolfbcn 0 1,775 Último mensaje 12 Septiembre 2017, 02:01 am
por wolfbcn
[PYTHON]Imprimir en consola al terminar de ejecutarse una función...
Python
dimineko 5 3,069 Último mensaje 18 Junio 2018, 16:55 pm
por e
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines