笨辦法學習python-ex41源碼加自己注釋


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM