2014-04-11 69 views
0

我試圖讓從學習Python困難的方法工作的腳本。 從6個錯誤中,我可以把它歸結爲一個錯誤。 但這一個錯誤,即使嘗試了幾個小時後我仍無法解決。 這是錯誤消息:ValueError異常:需要超過1的值來解壓:學習Python困難的方法例如:41

E:\PythonCode>python oop_test.py Traceback (most recent call last): File "oop_test.py", line 72, in question, answer = convert(snippet,phrase)[0] ValueError: too many values to unpack

下面是完整的源代碼:

import random 
from urllib import urlopen 
import sys 

WORD_URL = "http://learncodethehardway.org/words.txt" 

WORDS = [] 

PHRASES = { 
    "class %%%(%%%): ": 
    "Make a class named %%% that is-a %%%", 
    "class %%%(object):\n\tdef __init__(self, ***)": 
    "class %%% has-a __init__ that takes self and *** parameters", 
    "class %%%(object):\n\tdef ***(self, @@@)": 
    "class %%% has-a function named *** that takes self and @@@ parameters.", 
    "*** = %%%()": 
    "Set *** to an instance of class %%%.", 
    "***.***(@@@)": 
    "From *** get the *** attribute and set it to '***'." 
} 

#do they want to drill phrases first 

PHRASE_FIRST = False 

if len(sys.argv) == 2 and sys.argv[1] == "english": 
    PHRASE_FIRST = True 

#load up the words from the website 

for word in urlopen(WORD_URL).readlines(): 
    WORDS.append(word.strip()) 

def convert(snippet, phrase): 
    class_names = [w.capitalize() for w in random.sample(WORDS, snippet.count("%%%"))] 

    other_names = random.sample(WORDS, snippet.count("***")) 

    results = [] 
    param_names = [] 

    for i in range(0, snippet.count("@@@")): 
     param_count = random.randint(1,3) 
     param_names.append(','.join(random.sample(WORDS, param_count))) 

    for sentence in snippet, phrase: 
     result = sentence[:] 

    #fake class names 
    for word in class_names: 
     result = result.replace("%%%", word, 1) 

    #fake other names 
    for word in other_names: 
     result = result.replace("***", word, 1) 

    #fake parameter lists 
    for word in param_names: 
     result = result.replace("@@@", word, 1) 

    results.append(result) 
    return results 


try : 
    while True : 
     snippets = PHRASES.keys() 
     random.shuffle(snippets) 

     for snippet in snippets: 
      phrase = PHRASES[snippet] 
      question, answer = convert(snippet,phrase) 
      if PHRASE_FIRST: 
       question, answer = answer, question 
      print question 
      raw_input("> ") 
      print "ANSWER: %s\n\n" % answer 
except EOFError: 
    print "\nBye" 

回答

0

在第39行,你說:

results = [] 

幾個操作後,上線61,你終於:

results.append(result) 
return results 

因此results永遠只能有一個成員。然而,上線72(你的錯誤),您有:

question, answer = convert(snippet,phrase) 

你不能只從一個拿着名單解壓兩個項目,作爲@AdamSmith正確地現在在評論中指出。 :)

相關問題