【python练习】《learn python the hard way》ex41 opp_test.py

“笨方法”学Python(第三版)ex41 学习面向对象术语 Python 3.6.5代码 新手一枚,买的书是教Python2,想学Python3,ex41一直报错,上网查后发现主要是三个问题:1. Python3中urllib库发生变化2. Python3中严格区分str和bytes,29行遍及读取网页上的单词,word为bytes,不能作为replace()的第二个参数3. Python3中dict.keys返回的不是列表,需要用list()处理下面贴出可以python3.6.5可以... 阅读详情

---

和上一篇一样,这个也加上了中文注释。


# -*- coding: utf-8 -*-
# Copyright by XD 
# 交流QQ:584927688 ^_^
#《learnpythonthehardway》ex41,学会说面向对象。
#oop_test.py
#
#此为learnpythonthehardway中作者为了帮助读者熟悉面向对面的编程\
#而设计的一个根据代码写描述或根据描述写代码的考试小程序。
#

#目的:一方面是督促我自己充分理解这段代码,另一方面也能帮助初学者理解。
import random
from urllib import urlopen
import sys
#作者随意准备的词汇。
WORD_URL = "http://learncodethehardway.org/words.txt"
WORDS = []

#代码及描述中的‘函数方法/属性’function/attribute,‘参数’parameters,‘类名’,‘实例名/对象’,
PHRASES = {
	"class %%%(%%%):":
	"Make a class named %%% that is-a %%%",
	"class %%%(object):\n\tdef __init__(self,***)":
	"class %%% has-a __init__ 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 
#由答题者选择是要根据描述编码还是根据代码描述。
#sys.argv为从命令行接收的参数,第一个参数默认为文件名。
if len(sys.argv) == 2 and sys.argv[1] == "english":
	PHRASE_FIRST = True
else:
	PHRASE_FIRST = False

# load up the words from the website
#将词汇们载入到列表WORDS中。
for word in urlopen(WORD_URL).readlines():
	WORDS.append(word.strip())

#定义覆盖描述及代码中预留位置的函数,参数为片段、描述。
#最后返回一个列表results
#先将预留放置词汇的位置分类
#参数为key或value,两个总是相对
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('@@@')):
		#参数的个数为1-3个随机。
		param_count = random.randint(1,3)
		#随机到几个参数就从WORDS中获取几个词
		param_names.append(', '.join(random.sample(WORDS, param_count)))

	#准备好要进行替换的PHRASES
	for sentence in snippet,phrase:
		result = sentence[:]
		#result = [snippet,phrase]
		#扯句闲话,作者为了描述和代码对应,替换词汇的顺序是固定的。。
		#用这种方法替换,描述与代码中词汇的顺序肯定是一样的。
		#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\n\n" % answer
except EOFError:
	print '\nBye!'


“笨办法”学Python习题41代码问题 中文版的《“笨办法”学Python》书中给出的代码ex41.py存在缩进问题,由于Python根据缩进来区分代码块,因此少一个缩进就牛头不对马嘴了…… 原书中第47行到第59行的部分需要再加一个缩进,代码才能正常运行,附上正确代码: import random from urllib import urlopen import sys WORD_URL = "http://learnco 阅读详情

相关推荐

笨方法学python习题41学习笔记

笨方法学python习题41学习笔记

Learn Python the Hard Way Ex41记录

LPTHW Ex41学习记录

LastTrainHome的博客 1080

笨办法学python 习题ex49 示例

笨办法学pythoon 习题49 测试代码示例。选了几个关键函数做测试示范。

Learn Python the hard way, ex41 来自Percal 25 号星星的哥顿人

我承认,我偷懒了,少打了大量代码(剧情),英文太差,下次可以编个中文的试试 1 #!/urs/bin/python 2 #coding:utf-8 3 from sys import exit 4 from random import randint 5 6 def death(): 7 quips=["you died. you kinda...

weixin_30527423的博客 179

AI 编程新范式:一文彻底搞懂 LLM、Agent、MCP、Skill 是怎么协作的

本文用通俗易懂的方式解析了AI编程新架构的核心概念。通过"三国演义"类比,文章将复杂的技术架构拆解为:Agent(军师/大脑)负责思考和决策,Skill(招式/手脚)执行具体操作,MCP(令箭/协议)作为通信标准,MCP Server(将军/身体)承载多个Skill。这套分工架构使AI从单纯聊天进化成能完成实际编程任务的全能助手,实现了关注点分离——Agent专注智能提升,Skill专注功能实现,MCP确保稳定连接。这正是Cursor、Claude等新一代AI开发工具采用的核心架构,标志

猫老板的豆 3080

Cisco思科 电子科技大学计算机网络 SRWE 期末技能考试 (PTSA)

电子科技大学2024春_SRWE_计算机网络系统 SRWE 期末技能考试 (PTSA)

2301_76745065的博客 5094

笨办法学Python(learn python the hard way)--练习程序41

下面是练习41,基于python3 #ex41.py 1 #打印文档字符串 print(函数名.__doc__) 2 from sys import exit 3 from random import randint 4 5 def death(): 6 quips = ["You died. You kinda suck at this.", ...

weixin_30731305的博客 323

BERT之提取特征向量 及 bert-as-server的使用

本文内容列表提取句向量1、句向量简介1-1传统句向量1-2、BERT句向量2、 extract_features.py源码分析2-1 main函数 前一篇文章 BERT介绍及中文文本相似度任务实践 简单介绍了使用BERT进行中文文本相似度计算的方法,这篇文章着重对特征提取方法进行讲述。 提取句向量 1、句向量简介 1-1传统句向量 更多采用word embedding的方式取加权平均,该方法的一大...

ling620的专栏 1万+

Python 学习笔记——笨方法学python3——习题41

Python 学习笔记——笨方法学python3——习题41

Ignorantstudent的博客 1378

LSS(Lift, Splat, Shoot)算法解析

**LSS(Lift, Splat, Shoot)** 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法,通过将图像特征反投影到3D空间生成伪视锥点云,通过`Efficientnet`算法提取云点的深度特征和图像特征并对深度信息进行估计,最终将点云特征转换到BEV空间下进行特征融合和后续的语义分割任务。 本篇按照LSS代码的运行逻辑,结合论文对LSS算法进行解析。

超爱吃小蛋糕的66的博客 8685

流体仿真软件:COMSOL Multiphysics二次开发_(11).COMSOL与外部软件的数据交换

通过上述方法,您可以实现 COMSOL Multiphysics 与外部软件的数据交换,从而更好地集成和分析仿真结果。无论是从文本文件导入数据,导出数据到 MATLAB,还是通过 API 和 COMSOL Server 实现实时通信,都能满足不同场景下的需求。希望这些内容对您在流体仿真领域的开发工作有所帮助。

kkchenjj的博客 1553

【Python】Learn Python the hard way, ex41 面向对象术语练习

# coding:utf-8 # 导入模块 import random from urllib import urlopen import sys # 定义一个变量,字符串内容为一个url WORD_URL = "http://learncodethehardway.org/words.txt" # 定义一个空列表 WORDS = [] # 定义一个字符串常量,内容为多个字符串 PHRASE

守望的距离 2110

RK3568平台(平台总线篇)Gsensor STK8BA50

Gsensor,即加速度传感器(Accelerometer),是一种用于测量物体加速度的电子设备。以下是其关键点:1.工作原理MEMS技术:大多数Gsensor基于微机电系统(MEMS),通过检测质量块的位移来测量加速度。压电效应:部分Gsensor利用压电材料在受力时产生电压的特性来测量加速度。2.主要功能加速度测量:测量物体在X、Y、Z三个方向上的加速度。倾斜检测:通过重力加速度判断设备的倾斜角度。运动检测:识别设备的运动状态,如静止、移动、晃动等。震动检测:感知设备的震动或冲击。

weixin_49303682的博客 480

《Learn python3 the hard way》ex40到ex41总结

ex40 讲述库,类和对象的关系 库像字典,类像库,对象像导入(import) 从一堆东西中取出一些东西的方法有三个:字典、库和类。 ex41 学习面向对象 class 告诉Python建立一个事物的新类型(type) object 有两个意思,一个是事物最基本的类型(type),一个是事物的任何实例 instance 当你告诉Python去创建一个类时你得到的东西 def 在类里定义一个方法 self 在类的方法里,self是一个变量,目的是让实例或对象访问。 inheritance 一个类可以从其他类里

zilongxuan008的博客 308

(11-3-01 )

以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强大工具。在本节的内容中,将实型一个完整的机器学习模型项目,智能检测出以太坊区块链中的非法账户。从问题定义到模型建立和评估,再到最终的总结和建议。本实例突出了处理类别不平衡问题的重要性,并展示了如何使用多种机器学习算法来解决实际问题。此外,通过数据可

码农三叔 2170

AUTOSAR进阶图解==>AUTOSAR_SWS_ECUStateManager

AUTOSAR ECU State Manager 摘要 AUTOSAR ECU状态管理器(EcuM)是Classic Platform 4.4.0规范中的核心模块,负责管理ECU的整个生命周期,包括启动、运行、关机和睡眠等状态转换。EcuM通过协调各基础软件模块的初始化过程,确保系统可靠运行。 主要功能包括: 启动管理 - 控制从硬件初始化到应用运行的完整启动序列 状态转换 - 管理RUN/POST_RUN/SHUTDOWN等状态切换 唤醒验证 - 区分真实与虚假唤醒事件 关机序列 - 确保安全关机保存关

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2473

笨办法学习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 = { ...

weixin_30813225的博客 475

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

笨方法学Python—习题41:学习面向对象术语

单词练习(术语学习) 1. 类(class):            告诉Python创建新类型的东西。 2. 对象(object):           两个意思,最基本的东西(变量、语句等等),或者某个东西的实例。 3. 实例(instance):       是让Python创建一个时得到的东西 4. def:                           在类里定义函数的方法

youngersteral的博客 3302

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

learnpythonthehardway EX41 相关

str.count() # str.count()方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。 # str.count(sub, start= 0,end=len(string)) ''' sub -- 搜索的目标字符串 start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。 end -- 字符串中结束搜索的位置。默认为字符串的最后一个...

weixin_30919919的博客 174

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

笨方法学python ex43_笨办法学Python(learn python the hard way)--练习程序42

下面是练习42,基于python3#ex42.py1 class TheThing(object):2 #__init__为class设置内部变量的方式,正常情况下函数内的变量与外部没有关联,但是这里的number变量却可以在class下关联3 def __init__(self):4 self.number = 556 def some_function(...

weixin_39708557的博客 277

习题41 学习面向对象术语

这一节学习的是面向对象术语。

大卫DrDavidS的博客 1170

python 无类的哥顿人游戏

#--coding:utf-8-- from sys import exit from random import randint def death(): quips=["You died.You kinda suck at this.", "Nice job,you died...jackass", "Such a luser.",

ab1233369ab的专栏 998

Python-练习 48. 更复杂的用户输入

练习 48. 更复杂的用户输入游戏词汇表(lexicon)48.1.1 拆解句子48.1.2 词汇表元组(Lexicon Tuples)48.1.3 扫描输入48.1.4 异常和数字一个测试优先挑战你需要测试附加练习常见问题 在之前的游戏中,你通过设置特定的字符串来控制用户的输入。比如,只有用户输入“run”,而且得是精确的“run”,游戏才能正常运行。他们要是输入了类似的短语,比如“run fast”,程序都会报错。但我们需要的是一个能让用户通过多种方式来输入的设备,同时可以把用户输入的内容转换成计算机能

weixin_44696566的博客 801

learn python the hard way--oop_test 面向对象术语

import random from urllib.request import urlopen import sys #导入模块 WORD_URL="http://learncodethehardway.org/words.txt" WORDS =[] #????这是一个网址 PHRASES = { "class %%%(%%%):": "make a class na...

Printfsome的博客 324

笨办法学python 学习笔记1

EX0 安装python如果安装完python, powershell仍然不识别“python”命令,说明“环境变量”没有设置好。有两种方法可以解决这个问题:1. 在powershell 里面输入以下命令:[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")2. 右键点击“我的电脑”—‘’属性”...

white_rabbit_2的博客 580
上一篇: 【python练习】--《learn python the hard way》ex39
下一篇: 【Python】50行实现字符画----总结
ssshaooo
博客等级 码龄10年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值