Python - Learn Python The Hard Way exercise 41 confused?
Question: I read all the answers related to that section but still didn't understand the
1 part. What exactly the following code does?

    
    
    random.sample(WORDS, snippet.count("%%%"))
    

I know it means the number of occurrences of "###" in snippet but didn't get
what exactly it means.

Here is the whole code if it helps:

    
    
    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"
    


Answer: The code gets [random
elements](https://docs.python.org/2/library/random.html#random.sample) from
`WORDS`. Since you might have more than one `%%%` placeholder in the string,
it gets as many items from that list as there are occurrences of `%%%` in
`snippet`.

