获取两个字符串的常用字符会导致"ValueError: not enough values to unpack"



我想在 2 个字符串中打印不常见的字符,但我无法这样做,因为当我运行代码时,我收到错误not enough values to unpack (expected 2, got 1).

我已经创建了 2 个字符串,我正在尝试通过将字符串中的每个字符存储在这两个变量中来迭代字符串中的每个字符ab,然后在循环继续时将它们替换为下一个字符。最后,我添加了 if 条件,即在迭代中的任何时间点,如果 ab 中的值匹配,则首先打印常用字符。

两个打印命令都必须显示"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)

嗯,有一些问题需要解决:

  1. 为什么提出not enough values to unpack例外?这是因为a and b返回b如果a True,否则返回a。因此,虽然 ab 都是非空的,但 a and b 总是返回字符串b,即 代码中返回string_s2。也就是说,在你的for循环中,字符串string_s2被计算到元组a,b,这就是为什么你得到例外——Python 不知道如何将一个字符串解压缩为两个变量。
  2. 如果不a and b该怎么办?好吧,在这种情况下,zip(string_s1,,string_s2)似乎是一个解决方案,但不是您想要的。您的预期输出是ho,这意味着嵌套for循环是实际的解决方案。
  3. 小心信件的大小写。如果输出中有字母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)

相关内容

最新更新