Python 为什么返回两个以上的值? ValueError回溯(最近一次调用) 在() 5其他: 6通 ---->7种动物饼干(“平头骆驼”) 动物饼干(文本) 1 def动物饼干(文本): ---->text.split()中的[word1,word2]为2: 3如果word1[0]==word2[0]: 4返回真值 5其他: ValueError:要解压缩的值太多(应为2个)

Python 为什么返回两个以上的值? ValueError回溯(最近一次调用) 在() 5其他: 6通 ---->7种动物饼干(“平头骆驼”) 动物饼干(文本) 1 def动物饼干(文本): ---->text.split()中的[word1,word2]为2: 3如果word1[0]==word2[0]: 4返回真值 5其他: ValueError:要解压缩的值太多(应为2个),python,function,Python,Function,split返回字符串列表,如果字符串不包含用作分隔符的字符串,则边缘大小写是包含单个字符串的列表 通过在text.split()中对[word1,word2]说,您基本上希望它返回一个列表列表,如下例所示: ValueError Traceback (most recent call last) <ipython-input-21-bfc977603445> in <module>() 5

split
返回字符串列表,如果字符串不包含用作分隔符的字符串,则边缘大小写是包含单个字符串的列表

通过在text.split()中对[word1,word2]说
,您基本上希望它返回一个列表列表,如下例所示:

ValueError                                Traceback (most recent call last)
<ipython-input-21-bfc977603445> in <module>()
      5         else:
      6             pass
----> 7 animal_crackers('Levelheaded Llama')

<ipython-input-21-bfc977603445> in animal_crackers(text)
      1 def animal_crackers(text):
----> 2    for [word1, word2] in text.split():
      3         if word1[0]==word2[0]:
      4             return true
      5         else:

ValueError: too many values to unpack (expected 2)
将输出

for [word1, word2] in [['a', 'b'], ['c', 'd']]:
    print(word1, word2)
您有两个选择:

  • 分别抓取每个元素:

    a b
    c d
    
  • 使用解包(仅当您确信
    文本总是有一个空格,或者如果您希望得到一个错误,则使用解包):


split
返回字符串列表,如果字符串不包含用作分隔符的字符串,则边缘大小写是包含单个字符串的列表

通过在text.split()中对[word1,word2]说
,您基本上希望它返回一个列表列表,如下例所示:

ValueError                                Traceback (most recent call last)
<ipython-input-21-bfc977603445> in <module>()
      5         else:
      6             pass
----> 7 animal_crackers('Levelheaded Llama')

<ipython-input-21-bfc977603445> in animal_crackers(text)
      1 def animal_crackers(text):
----> 2    for [word1, word2] in text.split():
      3         if word1[0]==word2[0]:
      4             return true
      5         else:

ValueError: too many values to unpack (expected 2)
将输出

for [word1, word2] in [['a', 'b'], ['c', 'd']]:
    print(word1, word2)
您有两个选择:

  • 分别抓取每个元素:

    a b
    c d
    
  • 使用解包(仅当您确信
    文本总是有一个空格,或者如果您希望得到一个错误,则使用解包):


代码中的问题是,您尝试将一个值分配给两个变量,这里的
text.split()
['Levelheaded','Llama']
,因此您将迭代的元素的第一个元素将是
'Levelheaded'
,您尝试分配给两个变量
word1
word2

相反,您可以不迭代地分配它们,也可以将
true
更改为
true

word1, word2 = text.split()

代码中的问题是,您试图将一个值分配给两个变量,这里的
text.split()
['Levelheaded',Llama']
,因此您要迭代的元素的第一个元素将是
'Levelheaded'
,您尝试分配给两个变量
word1
word2

相反,您可以不迭代地分配它们,也可以将
true
更改为
true

word1, word2 = text.split()
text.split()

def animal_crackers(text):
    word1, word2 = text.split()
    if word1[0] == word2[0]:
        return True

print(animal_crackers('Levelheaded Llama')) # -> True
既然我们知道在两个元素的列表上有一个循环,我们可以像这样展开循环:

for [word1, word2] in ['Levelheaded', 'Llama']:
    if word1[0]==word2[0]:
        return true
    else:
        pass
现在类似于
[word1,word2]='Levelheaded'
的东西会将字符串视为一个字符列表,但是由于单词包含两个以上的字符,因此会出现错误

因为您实际上不想在任何东西上循环,所以应该去掉for循环,只需编写:

# First iteration
[word1, word2] = 'Levelheaded'
if word1[0]==word2[0]:
    return true
else:
    pass

# Second iteration
[word1, word2] = 'Llama'
if word1[0]==word2[0]:
    return true
else:
    pass
text.split()

def animal_crackers(text):
    word1, word2 = text.split()
    if word1[0] == word2[0]:
        return True

print(animal_crackers('Levelheaded Llama')) # -> True
既然我们知道在两个元素的列表上有一个循环,我们可以像这样展开循环:

for [word1, word2] in ['Levelheaded', 'Llama']:
    if word1[0]==word2[0]:
        return true
    else:
        pass
现在类似于
[word1,word2]='Levelheaded'
的东西会将字符串视为一个字符列表,但是由于单词包含两个以上的字符,因此会出现错误

因为您实际上不想在任何东西上循环,所以应该去掉for循环,只需编写:

# First iteration
[word1, word2] = 'Levelheaded'
if word1[0]==word2[0]:
    return true
else:
    pass

# Second iteration
[word1, word2] = 'Llama'
if word1[0]==word2[0]:
    return true
else:
    pass

在['a','b',['c','d'].
中的[word1,word2]应该是
,您缺少了一个右括号。@logicalkoan fixedIt应该是
在['a','b',['c','d'].
中的[word1,word2]缺少右括号。@logicalkoan fixedIt应该注意,
[word1,word2]=text.split()
如果
文本
包含多个空格,则会导致完全相同的错误;如果文本中不包含空格,则会导致相反的错误all@DeepSpace当然,但如果是那样的话,那是意料之中的,不是吗?在我阅读时,OP对这个错误感到困惑,因为
text.split()
应该为给定的输入返回两个元素。我不认为OP期望代码能够为多于或少于一个空格的输入工作。换句话说:使用
[word1,word2]=text.split()
代码执行OP期望原始代码执行的操作:比较字符串中两个单词的首字母,或者如果少于或多于两个单词,则导致错误。这就是我对问题的解释。@sepp2k完全正确,代码只用于两个字符串,因此只需要一个空格。需要注意的是,
[word1,word2]=text.split()
如果
text
包含多个空格,将导致完全相同的错误,相反的错误,如果它在all@DeepSpace当然,但如果是那样的话,那是意料之中的,不是吗?在我阅读时,OP对这个错误感到困惑,因为
text.split()
应该为给定的输入返回两个元素。我不认为OP期望代码能够为多于或少于一个空格的输入工作。换句话说:使用
[word1,word2]=text.split()
代码执行OP期望原始代码执行的操作:比较字符串中两个单词的首字母,或者如果少于或多于两个单词,则导致错误。这就是我对这个问题的解释。@sepp2k完全正确,代码只用于两个字符串,因此只需要一个空格。