我想在 2 个字符串中打印不常见的字符,但我无法这样做,因为当我运行代码时,我收到错误not enough values to unpack (expected 2, got 1)
.
我已经创建了 2 个字符串,我正在尝试通过将字符串中的每个字符存储在这两个变量中来迭代字符串中的每个字符a
和b
,然后在循环继续时将它们替换为下一个字符。最后,我添加了 if 条件,即在迭代中的任何时间点,如果 a
和 b
中的值匹配,则首先打印常用字符。
两个打印命令都必须显示"ho"
作为输出,但是,我not enough values to unpack (expected 2, got 1)
收到错误。
string_s1 = "Hello"
string_s2 = "Python"
for a, b in string_s1 and string_s2:
if a == b:
print(a)
print(b)
嗯,有一些问题需要解决:
- 为什么提出
not enough values to unpack
例外?这是因为a and b
返回b
如果a
True
,否则返回a
。因此,虽然a
和b
都是非空的,但a and b
总是返回字符串b
,即 代码中返回string_s2
。也就是说,在你的for
循环中,字符串string_s2
被计算到元组a,b
,这就是为什么你得到例外——Python 不知道如何将一个字符串解压缩为两个变量。 - 如果不
a and b
该怎么办?好吧,在这种情况下,zip(string_s1,,string_s2)
似乎是一个解决方案,但不是您想要的。您的预期输出是ho
,这意味着嵌套for
循环是实际的解决方案。 - 小心信件的大小写。如果输出中有字母
h
,则在比较之前,必须将Hello
H
的字母转换为小写。
因此,您想要的代码可能是:
string_s1 = "Hello"
string_s2 = "Python"
for a in string_s1:
for b in string_s2:
a,b = map(str.lower,(a,b))
if a == b:
print(a,end='')
使用 zip。这将处理字符串长度不同的情况
string_s1 = "Hello"
string_s2 = "Python"
for a, b in zip(string_s1, string_s2):
if a == b:
print(a)
print(b)