0

Pythonで特定の文字列のビットを順番に表示しようとしています。バイナリ文字列に変換できますが、タイマーで列挙することはできません。

これが私が使用しているコードに基づく最小限の例です:

import sys
string = "a"
for char in string:
    mybyte = str(bin(ord(char))[2:].zfill(8)) // convert char to 8 char length string which are char's representation in binary
    for bit in mybyte:
        sys.stdout.write(bit)
        time.sleep(0.5)

    sys.stdout.write("\n")

これは、0.5秒で区切られた各ビットを表示しませんが、すべてのビット(8 x 0.5 = 4秒)が処理されて表示されるまで待ちます。

ただし、lopに改行を入れると、タイムリーに正しい反復が得られますが、各ビットの間に不要な改行を入れるというコストがかかります。私はここで問題の良いアプローチがないなどの間違ったことをしていると思いますが、私は本当にこれに固執しているので、どんなアドバイスも歓迎します。

4

2 に答える 2

0

sys.stdout.flush()stdoutはデフォルトでバッファリングされるため、書き込みのたびに行う必要があり ます

于 2012-12-30T16:47:47.350 に答える
0

あなたはフラッシュする必要があるかもしれませんsys.stdout

import sys
string = "a"
for char in string:
    mybyte = str(bin(ord(char))[2:].zfill(8)) // convert char to 8 char length string which are char's representation in binary
    for bit in mybyte:
        sys.stdout.write(bit)
        sys.stdout.flush()  # <-- Add this line right here
        time.sleep(0.5)

    sys.stdout.write("\n")

Python 3の場合、endキーワード引数を使用してprint()

import sys
string = "a"

for char in string:
    mybyte = str(bin(ord(char))[2:].zfill(8))

    for bit in mybyte:
        print(bit, end='')
        time.sleep(0.5)

    print()

Python 2の場合、print関数をインポートする必要があります。

 from __future__ import print_function
于 2012-12-30T16:47:51.247 に答える