user5653362 user5653362 - 5 months ago 20
Python Question

Unable to understand lecture 41 from Learn Python the hard way

Unable to understand the code from PHRASES part. This is the code from learn Python the hard way. I am so lost after that part.Can someone please explain?

The book does not have any explanation about the code below.

import random
from urllib import urlopen
import sys

WORDS = []

"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":

# load up the words from the website
for word in urlopen(WORD_URL).readlines():

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)


return results

# keep going until they hit CTRL-D
while True:
snippets = PHRASES.keys()

for snippet in snippets:
phrase = PHRASES[snippet]
question, answer = convert(snippet, phrase)
question, answer = answer, question

print question

raw_input("> ")
print "ANSWER: %s\n\n" % answer
except EOFError:
print "\nBye"


PHRASES is a dictionary containing problem descriptions (such as "Make a class named X that is a Y") and solutions (such as "class X(Y)").

The code picks one of the problem/solution pairs randomly from the dictionary, gets a list of words from and randomly chooses one of those words fill in for the placeholder values such as %%% and *** (so that the solutions are different every time), asks you to type your solution, then prints the correct solution.