笨方法学python3 源码_笨办法学习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')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值