用计时器在python中显示字符串的位

时间:2012-12-30 16:46:13

标签: python

我正在尝试按顺序显示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中添加一个新行,我会得到一个及时正确的迭代但是在每个位之间有我不想要的换行符。我猜我在这里做错了就像没有问题的好方法但我真的坚持这个,所以任何建议都是受欢迎的。

2 个答案:

答案 0 :(得分:0)

每次写入后需要sys.stdout.flush(),因为stdout默认是缓冲的

答案 1 :(得分: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,您必须导入打印功能:

 from __future__ import print_function