打印出词典

时间:2012-07-04 15:06:27

标签: python dictionary python-3.x simulation

我有一个相当具体的问题:

我想使用\033[语法在特定位置打印字符。这是以下代码应该执行的操作:(字典cellscoords具有相同的键,但'*''-'为值。)

coords = {'x'+str(x)+'y'+str(y) : (x,y) for x,y, in itertools.product(range(60), range(20))}

for key, value in coords.items():  

    char = cells[key]  
    x,y = value
    HORIZ=str(x)
    VERT=str(y)
    char = str(char)
    print('\033['+VERT+';'+HORIZ+'f'+char)

然而,我注意到如果我将它放入无限循环中,它并不总是在相同位置打印相同的字符。只有轻微的变化,但它会删除一些并在一些循环之后将它们重新放入。我已经用列表尝试了它,并且它似乎表现得很好,所以我倾向于认为它与dict有一些东西,但我无法弄清楚它可能是什么。您可以在此处查看控制台中的问题:SharedConsole。我对此问题的每个提示感到高兴。

关于相关主题: 在打印之后,应该对cells dict的值进行一些更改,但由于我不知道的原因,只执行前两个规则而忽略其余规则。规则应该测试有多少邻居(population)在单元格周围并应用相应的规则。在我的实施中,我有一些奇怪的肿瘤生长(这不应该发生,好像它们周围应该有超过三个细胞应该死亡)(见FreakingTumor):

if cells_copy [coord] == '-':
    if population == 3:
        cells [coord] = '*'
if cells_copy [coord] == '*':
    if population > 3:
        cells [coord] = '-'
    elif population <= 1:
        cells [coord] = '-'
    elif population == 2 or 3:
        cells [coord] = '*'

我多次检查population变量,所以我很确定这不是问题。 对于缓慢的游戏机我很抱歉。

提前致谢! Kyril

1 个答案:

答案 0 :(得分:1)

您的语法

    elif population == 2 or 3:

评估为

    elif (population == 2) or (3 != 0):

和3从不为0,因此该子句始终为True。你打算写的是

    elif population == 2 or population == 3:

或者

    elif population in (2,3):

这个逻辑可以简化为

EMPTY = '-'
FULL = '*'
if cells_copy[coord] == EMPTY:
    if population == 3:
        cells[coord] = FULL
else:
    if population not in set([2,3]):
        cells[coord] = EMPTY

我还建议合并你的写作(一次写一个完整的行):

# Make sure everything in `cells` is a string
ESC = chr(27)

for y in xrange(20):
    outp = (cells['x{}y{}'.format(x,y)] for x in xrange(60))
    print('{}[{};{}f{}'.format(ESC, y, x, ''.join(outp)), end='')

您可能还会因为cells列表而不是dict

而受益
WIDTH = 60
HEIGHT = 20
cells = [[EMPTY]*WIDTH for y in xrange(HEIGHT)]