如何修复此ASCII表的间距?

时间:2014-12-26 21:17:58

标签: python python-3.x

我正在尝试使用Python 3编写程序,其中所需的输出是此表:

chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
asc: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
asc: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
asc: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
asc: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
asc: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  
asc: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

但是,我无法获得正确的间距。 以下是我使用的代码:

x         = 32
y         = 48
timesLeft = 6
while timesLeft > 0:
    for i in range(x, y):
        if i >= 32 and i % 16 == 0:
            if i > 32:
                print('')
        print('chr:', end='')
    print('  ',chr(i), end='')

    for j in range(x, y):
        if j >= 32 and j % 16 == 0:
            print('')
            print('asc:', end='')
        print(' ',j, end='')
    timesLeft = timesLeft - 1
    x = x + 16
    y = y + 16

这就是它的回报:

chr:       !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
asc:  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
asc:  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
asc:  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
asc:  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
asc:  96  97  98  99  100  101  102  103  104  105  106  107  108  109  110  111
chr:   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
asc:  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127

如果无论如何都要调整我的代码(即没有完全重写它),那么它的输出看起来像第一个表?如果我确实需要彻底改变代码,那么任何建议都会非常感激。

我正在处理此代码,作为本页最后一次练习的一部分:http://cscircles.cemc.uwaterloo.ca/8-remix/

1 个答案:

答案 0 :(得分:0)

您的原始程序根本不适用于我(?)

我已经用这种方式修改了程序:

x = 32
y = 48

for i in range(0,6):

    # Characters
    print('chr:', end='')
    for i in range(x, y):
        print('  ', chr(i), end='')
    print('')  # newline

    # Numbers
    print('asc: ', end='')
    for j in range(x, y):
        print('{:^4}'.format(j), end='')
    print('')  # newline

    # Advance to next row
    x = x + 16
    y = y + 16

其中给出了以下输出:

chr:       !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
asc:  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47 
chr:   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
asc:  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63 
chr:   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
asc:  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79 
chr:   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
asc:  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95 
chr:   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
asc:  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 
chr:   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~   
asc: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 

这就是你想要的吗?

要获得精确您显示的输出,可以这样做:

x = 32
y = 48

for m in range(0, 6):

    print('chr:', end='')
    for i in range(x, y):
        print('  %s ' % chr(i), end='')
    print('')

    print('asc:', end='')

    if (m == 5):
        print(' ', end='')

    for j in range(x, y):

        if (m == 4 and j == 100):
            print(' ', end='')

        print('{:^4}'.format(j), end='')

    print('')

    x = x + 16
    y = y + 16

输出

chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   / 
asc: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47 
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ? 
asc: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63 
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O 
asc: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79 
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _ 
asc: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95 
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o 
asc: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111 
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~    
asc: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 

但是......由于ASCII表不太可能改变,因此将它作为字符串打印并完成它会更容易吗?