所以我试图把一个二进制字符串转换成一个字符,但是每个字符串都存储在一个迭代器中,所以我不能在它们前面添加一个b
。如何更改代码以实现此目的?你知道吗
originalText = "This is a message!"
text2Binary = [format(ord(x), 'b') for x in originalText]
textLength = len(originalText)
text2BinaryList = iter(text2Binary)
binary2TextCycler = next(text2BinaryList)
for i in range(textLength):
print(binary2TextCycler)
我认为您的主要问题是您缺少迭代的工作方式。你知道吗
现在您有了一个列表,它已经是表示每个字符的二进制字符串的一个iterable。我想这就是你想要的。您只需迭代它们即可将其打印出来:
如果您想更改它们的打印格式,只需更改传递给原始理解中
format
的格式字符串:#
表示“备用格式”,0
表示用0填充,10
表示填充到10个字符,因此得到的结果是:如果您需要不同的格式,只需使用不同的格式规范即可。要添加额外的字符,您可能需要使用
str.format
,而不是只使用format
:…或f字串:
现在,让我们看看您添加的所有额外内容:
虽然这个可以工作,但是你不需要某个东西的长度来迭代它;只需要直接迭代它。你知道吗
同时:
这将在列表上创建一个迭代器,然后从该迭代器中获取第一个元素。所以,
binary2TextCycler
就是字符串'0b01010100'
。不管您在其他iterable上循环多少次,比如range(textLength)
,每次都会得到相同的第一个字符串。你知道吗作为旁注:
text2Binary
是一个列表,text2BinaryList
是该列表上的迭代器。这是相当混乱的命名,这可能是为什么你困惑自己。你知道吗无论如何,如果您想让它工作,您必须再次推进迭代器并在每次循环中存储新值:
但如果您了解
for
循环是如何工作的,那么这相当于:显然,您可以删除额外的
next
:因此,很明显,您可以通过在两个iterable中的
zip
上循环来替换它:然后,您不需要
iter
;您可以直接使用iterable:而且,由于实际上没有对任何东西使用
i
,而且两个iterable的长度相同,因此可以完全删除第一个:像这样?你知道吗
退货
相关问题 更多 >
编程相关推荐