es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intentando imprimir caracteres ASCII del 128 al 160, ¿por qué se detiene en el 157?

Soy nuevo en Python y estoy aprendiendo programación/codificación, unicode, ascii y demás.
Me gustaría imprimir caracteres ASCII según sus códigos y utilizando la función chr().

def tabla_ascii():
    "procedimiento que imprime una tabla de caracteres ascii con sus valores"
    i = 127
    while i < 258:
        print(f"{i} -> {chr(i)}")
        i += 1

tabla_ascii()

Desafortunadamente, el resultado es incorrecto. Se detiene en el código 157:

127 ->
128 ->
129 ->
130 ->
131 ->
132 ->

133 ->

134 ->
135 ->
136 ->
137 ->
138 ->
139 ->
140 ->
142 ->
143 ->
144 ->
146 ->
147 ->
148 ->
149 ->
150 ->
151 ->
152 ->
154 ->
155 ->

157 ->

Entiendo que estos códigos devuelven un espacio en blanco, pero ¿por qué detienen el proceso?

Configuración:
– Python 3.8.10 (por defecto, 28 de septiembre de 2021, 16:10:42)
[GCC 9.3.0] en Linux
– Usando VIM – Vi IMproved 8.1

Cuando ejecuto este código en Visual Studio Code, el script produce una salida hasta 256. Pero en mi terminal (Linux Mate), se bloquea. Eso es difícil de entender para mí…

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en Python y ASCII, puedo explicar por qué el código se detiene en el código 157. En ASCII, los códigos del 128 al 159 se conocen como caracteres de control o caracteres no imprimibles. Estos caracteres no representan símbolos visibles y se utilizan como comandos para controlar dispositivos como impresoras, terminales y otros hardware.

    En Python, la función chr() devuelve el carácter que corresponde al punto de código Unicode dado. Sin embargo, no todos los puntos de código Unicode tienen caracteres correspondientes, especialmente en el conjunto de caracteres ASCII. Cuando intentas imprimir un carácter ASCII no imprimible usando chr(), puede aparecer como un espacio en blanco o directamente no ser mostrado.

    En el código proporcionado, el bucle while se ejecuta desde el código 127 hasta el código 258. Sin embargo, dado que los códigos del 128 al 157 son caracteres no imprimibles, se muestran como espacios en blanco y no aparecen en la salida. Por lo tanto, el bucle parece detenerse en el código 157 porque los caracteres siguientes no son visibles.

    Para imprimir todos los caracteres ASCII, incluidos los no imprimibles, puedes modificar el código de la siguiente manera:

    def tabla_ascii():
        "procedimiento que imprime una tabla de caracteres ascii con sus valores"
        i = 0
        while i < 256:
            print(f"{i} -> {repr(chr(i))}")
            i += 1
    
    tabla_ascii()
    

    Utilizando la función repr(), podemos mostrar los códigos de los caracteres en un formato imprimible para caracteres no imprimibles. Además, ahora el bucle se ejecuta desde 0 hasta 255, lo que incluye todos los caracteres ASCII imprimibles y no imprimibles.

    ¡Espero que esta explicación sea útil!

Comments are closed.