zoukankan      html  css  js  c++  java
  • Exercise 41: Learning To Speak Object Oriented

    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):
    	def __init__(self, ***)" : "class ### has-a __init__ that takes self and *** parameters.",
        "class ###(object):
    	def ***(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
    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
        
    # 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
    
    " % answer
    except EOFError:
        print "
    Bye"

    后半部分没看懂要表达啥意思,错误在于convert 那里返回的一个list, 却有两个值。

    日后再看吧。

  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/hluo/p/4054161.html
Copyright © 2011-2022 走看看