一些Python代码的帮助

一些Python代码的帮助,python,ctypes,Python,Ctypes,谁能告诉我为什么num_chars和num_行必须相同 from ctypes import * num_chars = 8 num_rows = 8 num_cols = 6 buffer = create_string_buffer (num_chars*num_rows*num_cols+num_chars) for char in range(num_chars): for row in range(num_rows): for co

谁能告诉我为什么num_chars和num_行必须相同

from ctypes import *

num_chars = 8
num_rows = 8
num_cols = 6

buffer = create_string_buffer (num_chars*num_rows*num_cols+num_chars)

for char in range(num_chars):
        for row in range(num_rows):
                for col in range(num_cols):
                        if char == num_chars-1 and col == num_cols-1:
                                buffer[row*num_rows*num_cols+char*num_cols+col+row] = '|'
                                buffer[row*num_rows*num_cols+char*num_cols+col+row+1] = '\n'
                        elif col == num_cols-1:
                                buffer[row*num_rows*num_cols+char*num_cols+col+row] = '|'
                        else:
                                buffer[row*num_rows*num_cols+char*num_cols+col+row] = ('.', '*')[char>row]

print buffer.value
输出

.....|*****|*****|*****|*****|*****|*****|*****|
.....|.....|*****|*****|*****|*****|*****|*****|
.....|.....|.....|*****|*****|*****|*****|*****|
.....|.....|.....|.....|*****|*****|*****|*****|
.....|.....|.....|.....|.....|*****|*****|*****|
.....|.....|.....|.....|.....|.....|*****|*****|
.....|.....|.....|.....|.....|.....|.....|*****|
.....|.....|.....|.....|.....|.....|.....|.....|
现在将num_chars更改为15

.....|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|
*****|*****|*****|*****|*****|*****|*****|*****|
*****|*****|*****|*****|*****|*****|*****|*****|
*****|*****|*****|*****|*****|*****|*****|*****|
*****|*****|*****|*****|*****|*****|*****|*****|
*****|*****|*****|*****|*****|*****|*****|*****|
*****|*****|*****|*****|*****|*****|*****|*****|
.....|*****|*****|*****|*****|*****|*****|*****|

您说您使用ctypes是因为您需要可变字符缓冲区。但是您可以从列表理解中获得所需的输出

num_chars = 5
num_rows = 8
empty = ['.' * num_chars]
full = ['*' * num_chars]
print '\n'.join(
    '|'.join(empty * (i + 1) + (num_rows - i - 1) * full)
    for i in xrange(num_rows)
)

.....|*****|*****|*****|*****|*****|*****|*****
.....|.....|*****|*****|*****|*****|*****|*****
.....|.....|.....|*****|*****|*****|*****|*****
.....|.....|.....|.....|*****|*****|*****|*****
.....|.....|.....|.....|.....|*****|*****|*****
.....|.....|.....|.....|.....|.....|*****|*****
.....|.....|.....|.....|.....|.....|.....|*****
.....|.....|.....|.....|.....|.....|.....|.....
编辑

我将向您展示如何使用列表理解来绘制您想要绘制的任何字符位图。这个想法很简单。构建一个布尔数组,在要打印字符的位置使用True,否则使用False。只需使用“或”技巧打印正确的字符。这个例子将构建一个象棋一样的棋盘。可以使用相同的概念绘制所需的任何形状

rows = 5
cols = 6
char = '#'
empty = '.'
bitmap = [[ (i + j)%2 == 0 for i in xrange(cols)] for j in xrange(rows)]
print '\n'.join(
    '|'.join(bitmap[j][i] * char or empty for i in xrange(cols))
    for j in xrange(rows)
)
好了。我有rownum_rows而不是rownum_chars我必须要一个Pepper博士。顺便说一下,这不是家庭作业。这是一个LCD项目

num_chars = 10
num_rows = 8
num_cols = 6

buffer = create_string_buffer (num_chars*num_rows*num_cols+num_chars)

for char in range(num_chars):
        for row in range(num_rows):
                for col in range(num_cols):
                        if char == num_chars-1 and col == num_cols-1:
                                buffer[row*num_chars*num_cols+char*num_cols+col+row] = '|'
                                buffer[row*num_chars*num_cols+char*num_cols+col+row+1] = '\n'
                        elif col == num_cols-1:
                                buffer[row*num_chars*num_cols+char*num_cols+col+row] = '|'
                        else:
                                buffer[row*num_chars*num_cols+char*num_cols+col+row] = ('.', '*')[char>row]

print repr(buffer.raw)
print buffer.value

你能解释一下你想做什么吗?嗯,我想输出就足够了。你必须玩这个,并插入不同的数字,看看它在做什么。我会这样做并插入输出。为什么要使用ctypes?用于可变字符缓冲区。源和输出是不够的,因为您已经声明它工作不正常。你想让我们修复它,但你没有具体说明它应该做什么,只是第一个例子做了,第二个例子没有。请多描述一些。帮帮我们帮帮你,我有点困惑。我没有得到相同的输出。为什么不使用num_cols?但是你的角色中有那么多col。如果你复制并粘贴我的代码,它会在回答中产生精确的输出。你所说的num_cols是什么意思?你需要更具描述性。我假设num of U chars是指每个,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*********************************************************,我假设,我假设num我假设,我假设NuU U U的假设,我假设NuU U U的假设我假设,NuU U U U U chars的数字是指每每,,,,,,,,,,,,,,,,,,…我假设我假设我假设我假设我假设我假设我假设我假设我假设我假设我假设,NuU U U U U U U字符字符字符字符的数字的数字的数字的数字的数字是是,数字的数字,意思意思意思意思意思意思是每个,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,************************************************************************************************************........|........|........|........|********|********|********|******** ........|........|........|........|........|********|********|******** ........|........|........|........|........|........|********|******** ........|........|........|........|........|........|........|******** 。这些字符有8个空格宽。