2016-06-29 3 views
1

Nicht in der Lage, den Code von PHRASES Teil zu verstehen. Dies ist der Code von Python auf die harte Tour lernen. Ich bin so verloren nach diesem Teil. Kann jemand bitte erklären?Unfähig, Vortrag 41 zu verstehen von Python lernen auf die harte Tour

Das Buch hat keine Erklärung zum folgenden Code.

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" 

Antwort

1

SÄTZE ist ein Problem Beschreibungen Wörterbuch enthält (wie „Machen Sie eine Klasse mit dem Namen X, die ein Y“) und Lösungen (wie „Klasse X (Y)“).

Der Code wählt eine der Problem/Lösungspaare zufällig aus dem Wörterbuch, wird eine Liste von Wörtern aus http://learncodethehardway.org/words.txt und wählt zufällig einige Worte für Platzhalter Werte zu füllen, wie %%% und *** (so dass die Lösungen alle unterschiedlich sind Zeit), fordert Sie auf, Ihre Lösung einzugeben, und druckt dann die richtige Lösung aus.