0

かなり具体的な質問があります:

\033[構文を使用して特定の場所に文字を出力したい。これは、以下のコードが行うべきことです: (dictcellsは同じキーを持ちますcoordsが、値として または のいずれ'*''-'を持ちます。)

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)

ただし、これを無限の while ループに入れると、常に同じ文字が同じ位置に出力されるとは限らないことに気付きました。わずかな変更しかありませんが、一部を削除して、いくつかのループの後に元に戻します。私はすでにリストで試してみましたが、問題なく動作しているように見えるので、辞書と何か関係があると思う傾向がありますが、それが何であるかわかりません。ここでコンソールで問題を確認できます: SharedConsole .この問題に関するすべてのヒントに満足しています。

関連トピック: 印刷後、dict の値にいくつかの変更を加える必要がありますcellsが、理由は不明ですが、最初の 2 つのルールのみが実行され、残りは無視されます。populationルールは、セルの周囲にいくつの近隣 ( にあります) があるかをテストし、それに応じたルールを適用する必要があります。これの私の実装では、ある種の奇妙な腫瘍の成長があります(セルが死ぬはずの周りに3つ以上ある場合、発生しないはずです)(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ので、それは問題ではないと確信しています。遅いコンソールで申し訳ありません。

前もって感謝します!キリル

4

1 に答える 1

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

また、書き込みを結合することをお勧めします (一度に 1 行ずつ書き込みます)。

# 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)]
于 2012-07-04T18:43:28.627 に答える