#!/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')