如何解决Python中“没有足够的值来解包(预期2,得到1)”错误?

时间:2019-02-02 12:10:23

标签: python-3.x

我想用2个字符串打印不常见的字符,但是我无法这样做,因为在运行代码时,我收到错误消息:“没有足够的值要解压(预期2,得到1)”

我创建了2个字符串,我试图通过将它们存储在这2个变量a和b中然后在循环继续时将它们替换为下一个字符来遍历字符串中的每个字符。最后我添加了if条件如果在迭代的任何时候a和b中的值都匹配,则首先打印公共字符。

这两个打印命令都必须在输出中显示“ ho”,但是我却收到错误消息“没有足够的值要解压(预期2,得到1)”。请帮忙..

string_s1 = "Hello"
string_s2 = "Python"

for a, b in string_s1 and string_s2:

   if a == b:
      print(a)
      print(b)

2 个答案:

答案 0 :(得分:0)

使用邮政编码。这将处理字符串长度不同的情况

string_s1 = "Hello"
string_s2 = "Python"

for a, b in zip(string_s1, string_s2):

   if a == b:
      print(a)
      print(b)

答案 1 :(得分:0)

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

  1. 为什么引发not enough values to unpack异常?因为如果a and bba返回True,否则返回a。因此,尽管ab都是非空的,但是a and b总是返回字符串b,即,代码中返回了string_s2。也就是说,在您的for循环中,字符串string_s2被赋值给元组a,b,这就是为什么您会遇到异常— Python不知道如何解包字符串到两个变量。
  2. 如果没有a and b,该怎么办?好吧,在这种情况下,zip(string_s1,,string_s2) SEEMS是一个解决方案,但不是您想要的。您的预期输出为ho,这意味着嵌套的for循环是实际的解决方案。
  3. 请注意字母的大小写。如果输出中包含字母h,则在比较之前,H中的字母Hello必须用小写字母掩盖。

因此,您想要的代码可能是:

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='')