2016-06-29 23 views
1

無法理解PHRASES部分的代碼。這是學習Python的難題。在這部分之後,我很失落。請給我解釋一下嗎?無法理解第41課從難以學習Python

該書對以下代碼沒有任何解釋。

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 *** function, and call it with parameters self, @@@.", 
    "***.*** = '***'": 
     "From *** get the *** attribute and set it to '***'." 
} 

# do they want to drill phrases first 
if len(sys.argv) == 2 and sys.argv[1] == "english": 
    PHRASE_FIRST = True 
else: 
    PHRASE_FIRST = False 

# 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 


# keep going until they hit CTRL-D 
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" 

回答

1

PHRASES是含詞典問題描述(例如,「將名爲X類,它是一個Y」)和溶液(例如,「類X(Y)」)。

代碼拾取從字典隨機問題/溶液對一個,獲取從http://learncodethehardway.org/words.txt單詞列表和隨機選擇一些單詞填寫爲佔位符值如%%%***(使得溶液是不同的每時間),要求您輸入解決方案,然後打印正確的解決方案。