我已经看到了同样的问题,但它始终是这样的:
val1, val2 = input("Enter 2 numbers")
我的问题不同。
我有两个字符串str1
和str2
。我想逐字节地比较它们,使得输出看起来像这样:
str1 str2
0A 0A
20 20
41 41
42 42
43 43
31 31
32 32
33 33
2E 21
所以,我尝试过各种语法来比较它们,但它始终以相同的错误结束。这是我最近的一次尝试:
#!/usr/bin/python3
for c1, c2 in (tuple("\n ABC123."), tuple("\n ABC123!")):
print("%02X %02X" % (ord(c1), ord(c2)))
错误:
$ python3 test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
ValueError: too many values to unpack (expected 2)
当然,这一行:
for c1, c2 in (tuple("\n ABC123."), tuple("\n ABC123!")):
经历了许多不同的迭代:
for c1, c2 in "asdf", "asdf"
for c1, c2 in list("asdf"), list("asdf")
for c1, c2 in tuple("asdf"), tuple("asdf")
for c1, c2 in (tuple("asdf"), tuple("asdf"))
for (c1, c2) in (tuple("asdf"), tuple("asdf"))
所有这些都引发了同样的错误。
我认为我不太了解python的压缩/解压缩语法,而我只是准备好一起攻击黑客攻击低级别的解决方案。
有什么想法吗?
答案 0 :(得分:0)
好的,所以我最终这样做了:
for char in zip(s1,s2):
print("%02X %02X" % ( ord(char[0]), ord(char[1]) ))
但是,我注意到如果我碰巧有两个不同长度的列表,那么较长的列表似乎最终会被截断。例如:
s1 = "\n ABC123."
s2 = "\n ABC123!."
0A 0A
20 20
41 41
42 42
43 43
31 31
32 32
33 33
2E 21
# !! <-- There is no "2E"
所以我想我可以通过为每个字符串打印len()
然后填充较短的字符串来解决这个问题。