#!/user/bin/env python #-*-coding:utf-8 -*- #Author: qinjiaxi 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 PHRASES_FIRST = False if len(sys.argv) == 2 and sys.argv[1] == 'english': PHRASES_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('###'))]#從words序列中抽取帶'###'的字符串,數量是片段里面含有'###'的數量並把第一個字母變大寫,后面變小些(也就是隨機抽取類) other_names = random.sample(WORDS, snippet.count("***"))#從words序列中抽取帶'***'的字符串,數量是片段里面含有'***'的數量 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)))#從words列表中隨機抽取1-3個參數,加入到參數名列表中並用逗號隔開 for sentence in snippet, phrase: result = sentence[:] #fake class_names for word in class_names: result = result.replace("###", word, 1)#把第一個'###'替換成word #fake other_names for word in sentence: result = result.replace("***", word, 1)#把第一個'***'替換成word #fake parameter lists for word in param_names: result = result.replace('@@@', word, 1)#把第一個'@@@'替換成word results.append(result) return results try: while True: snippets = PHRASES.keys()#獲取字典中的key並以列表方式返回 random.shuffle(snippets)#將列表中的元素隨機打亂 for snippet in snippets: phrase = PHRASES[snippet]#獲取字典中的值 question, answer = convert(snippet, phrase)#調用convert函數 if PHRASES_FIRST: question, answer = answer, question print(question) raw_input('>') print("ANSWER: %s\n\n" % answer) except EOFError: print('\nbye')