之前我们的“
每周一坑
”栏目挖了一个“
单词本
”的系列。不过看起来大家都这种中长线项目兴趣不大啊……最近的一期,直到最近几天才有一位同学提交了解答。
所以我决定暂停一下,今天还是来点短平快的小练习。
上期的分析解答在本文后半部分给出,前几期内容见:
也可从公众号(
Crossin的编程教室
)
菜单栏最右侧
进入查看所有往期练习。
今天要讲的这个,是一道算得上经典的编程问题:
母牛问题
有一头母牛,它
每年年初生一头小母牛
。每头小母牛从
第 4 个年头
开始,
每年年初也生一头小母牛
。(别问我公牛上哪去了……)请编程实现计算在
第 n 年
的时候,
共有多少头
母牛?
输入:年份 n
输出:母牛的数量
运行示例:
这道题,如果你网上搜一下,会有很多地方用各种语言写过。一般来说是
迭代(循环)
和
递归
两种解法。不过我当年看到这道题的时候,就觉得这个很适合用
面向对象
的思想来实现,因为母牛就是一种类型,每头母牛都是这个类型的一个实例。这个思路你也可以考虑下。
详细解答和参考代码将在下次栏目中给出,也可以其他同学在留言中的代码。
期待各位同学提交解答,更期待你能完成整个系列。
提交代码可以使用
paste.ubuntu.com
或
codeshare.io
等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。
往期问题可通过公众号菜单栏“
课外辅导
”栏目中进入查看。
【解答】单词本 - 数据库
上次我们的题目是使用数据库存储单词数据。这里我们以最简单的
sqlite
为例(参考:
《Python 实战(2):简单的数据库
》
):
创建数据表及读取数据
import sqlite3
conn = sqlite3.connect('words.db')
cursor = conn.cursor()
create_tb_cmd='''
CREATE TABLE IF NOT EXISTS WORD
(english TEXT,
date DATE,
phonetic TEXT,
chinese TEXT
);
'''
cursor.execute(create_tb_cmd)
cursor.execute('select english from WORD;')
words = [w[0] for w in cursor.fetchall()]
写入数据
insert_cmd = '''
INSERT INTO WORD
(english, date, phonetic, chinese)
VALUES (?, ?, ?, ?);
'''
cursor.execute(insert_cmd, (word, t, ph, chs))
conn.commit()
特别说明下:Linux 和较新版的 Mac 系统都默认装有 SQLite,Windows 需要安装但也不复杂。另外 Python 直接带有对 SQLite 的支持,无需再安装其他模块。
如上述代码,直接对数据库进行读写操作,你还需要了解一点
SQL 语句
的基本语法。
还有种选择就是
《像对象一样对待数据》
里提到的
ORM
方式来操作数据库。来自 @Nttzl 同学的解答就使用了此方法。其中数据库部分代码:
import datetime,requests,peewee
db = peewee.SqliteDatabase("words.db")
class Word(peewee.Model):
class Meta:
database = db
word = peewee.CharField()
ph_en = peewee.CharField()
means = peewee.CharField()
date = peewee.DateTimeField()
Word.create_table()
t_list = Word.select()
words = [t.word for t in t_list]
t = Word()
t.word = word
t.ph_en = ph_en
t.means = means
t.date = datetime.date.today()
t.save()
t = Word.get(word=word)
print(t.word+' ['+t.ph_en+'] '+t.means+' '+str(t.date)+'\n')
关于
sqlite3
和
peewee
的详细介绍可从上面提供的文章链接进入查看。
两个版本的代码均已上传,获取可在公众号里回复关键字
单词本
感谢各位同学的参与。
期待在下一期中看到你的代码!