专栏名称: Crossin的编程教室
编程世界的新手村。 这里有可能是最简单的 Python 入门教程。 每天5分钟,轻松学编程。
目录
相关文章推荐
人人都是产品经理  ·  蜜雪冰城为何总会被原谅? ·  16 小时前  
91产品  ·  单场240万短袖直播话术拆解 ·  昨天  
91产品  ·  DeepSeek定制指南(家居行业) ·  2 天前  
人人都是产品经理  ·  电气化公路运输全景管控运营平台建设方案 ·  3 天前  
人人都是产品经理  ·  要不要交社保:三周过去了,外卖骑手的群里静悄悄 ·  3 天前  
51好读  ›  专栏  ›  Crossin的编程教室

【每周一坑】疯狂的小母牛 +【解答】数据库

Crossin的编程教室  · 公众号  ·  · 2019-03-01 15:50

正文

之前我们的“ 每周一坑 ”栏目挖了一个“ 单词本 ”的系列。不过看起来大家都这种中长线项目兴趣不大啊……最近的一期,直到最近几天才有一位同学提交了解答。 所以我决定暂停一下,今天还是来点短平快的小练习。


上期的分析解答在本文后半部分给出,前几期内容见:

也可从公众号( 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 = wordt.ph_en = ph_ent.means = meanst.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 的详细介绍可从上面提供的文章链接进入查看。

两个版本的代码均已上传,获取可在公众号里回复关键字 单词本


感谢各位同学的参与。

期待在下一期中看到你的代码!







请到「今天看啥」查看全文


推荐文章
人人都是产品经理  ·  蜜雪冰城为何总会被原谅?
16 小时前
91产品  ·  单场240万短袖直播话术拆解
昨天
91产品  ·  DeepSeek定制指南(家居行业)
2 天前
人人都是产品经理  ·  电气化公路运输全景管控运营平台建设方案
3 天前
心理语录  ·  我很累,但无路可退...
8 年前
谷歌开发者  ·  Awareness API现已提供语义时间支持
7 年前