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()在每次写入后进行,因为默认情况下会缓冲标准输出

于 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 回答