python古诗朝代_用 Python 编写中国历史知识库,此时不用中文命名变量更待何时?...
原标题:用 Python 编写中国历史知识库,此时不用中文命名变量更待何时?
早先想做个以中国历史为背景的小游戏,但苦于没找到现成已结构化的历史数据。理想中的需要有人物(包括基本信息、人物关系)、事件(包括时间、地点)等等。
加上后来想尝试将少儿编程与传统学科(尤其是文科)结合起来,于是试着用 Python 代码记录历史数据并提供查询功能。有几个优势:
数据是纯文本格式, 易于合作编辑
易于扩展和重构, 相比数据库, 可以更方便地增减/修改数据之间的关系
编辑时可以借助IDE的自动补全, 语法错误等功能, 减少笔误
易于编写自动测试以保证一些基本检验规则, 比如朝代没有重合部分, 先辈出生日期肯定早于后辈, 等等.
易于直接使用数据进行分析:
比如这样:
Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
};
消失国家 = 国家所属时期[朝代.春秋].diff(国家所属时期[朝代.战国])
console.log("春秋消失的国家: " + JSON.stringify(消失国家))
可以输出:
春秋消失的国家: ["晋国","宋国","吴国","越国","鲁国"]
下面是 Python 源码, 仅作原型演示之用, 如果正式开始项目会采用更翔实的史实参考来源(如教材). 数据结构设计等等很不成熟, 请多指摘, 尤其是TODO部分.
注意:全部变量采用了中文命名,原因很简单,用的到这个代码的开发者必然会中文咯。
// 来源: 中国少儿百科全书-历史大观: 河姆渡文化-郑和下西洋
var 朝代 = Object.freeze({
新石器: "新石器时代",
东周: "东周",
春秋: "春秋时期",
战国: "战国时期",
秦: "秦朝",
西汉: "西汉",
东汉: "东汉",
三国: "三国时期",
隋: "隋朝",
唐: "唐朝",
元: "元朝",
明: "明朝"
});
var 社会类型 = Object.freeze({
氏族社会: "氏族社会",
母系社会: "母系社会"
});
// TODO: 添加地点关系, 如国-地区-省-市-镇, 以及行政区划改变(村->镇等)
var 地点 = Object.freeze({
浙江: "浙江省",
余姚: "余姚市",
河姆渡: "河姆渡文化",
长江下游: "长江下游地区",
黄河中游: "黄河中游地区",
陕西: "陕西省",
西安: "西安市",
半坡: "半坡遗址",
长安: "长安",
洛阳: "洛阳",
齐: "齐国",
晋: "晋国",
宋: "宋国",
秦: "秦国",
楚: "楚国",
吴_春秋: "吴国",
越: "越国",
燕: "燕国",
韩: "韩国",
赵: "赵国",
魏_战国: "魏国",
鲁: "鲁国",
匈奴: "匈奴",
大月氏: "大月氏",
西域: "西域",
官渡: "官渡",
赤壁: "赤壁",
魏_三国: "魏国",
蜀国: "蜀国",
吴_三国: "吴国",
吐蕃: "西藏",
蒙古: "蒙古国",
中亚: "中亚",
东欧: "东欧",
西洋: "东南亚和印度洋沿海"
});
// TODO: 更多人物信息, 如原名, 性别, 小名等等
var 人物 = Object.freeze({
周平王: "周平王",
齐桓公: "齐桓公",
晋文公: "晋文公",
宋襄公: "宋襄公",
秦穆公: "秦穆公",
楚庄王: "楚庄王",
吴王: "阖闾",
越王: "勾践",
孔子: "孔子",
老子: "老子",
墨子: "墨子",
孟子: "孟子",
秦王: "嬴政",
汉景帝: "汉景帝",
汉武帝: "刘彻",
卫青: "卫青",
霍去病: "霍去病",
张骞: "张骞",
袁绍: "袁绍",
袁术: "袁术",
曹操: "曹操",
孙坚: "孙坚",
刘备: "刘备",
孙权: "孙权",
曹丕: "曹丕",
汉献帝: "汉献帝",
唐太宗: "李世民",
李靖: "李靖",
尉迟恭: "尉迟恭",
李建成: "李建成",
魏征: "魏征",
文成公主: "文成公主",
松赞干布: "松赞干布",
武则天: "武则天",
唐高宗: "唐高宗",
成吉思汗: "铁木真",
忽必烈: "忽必烈",
郑和: "马和",
朱棣: "朱棣"
});
var 年号 = Object.freeze({
贞观: "贞观"
});
var 路线 = Object.freeze({
丝绸之路: "丝绸之路"
});
var 群体 = Object.freeze({
儒家: "儒家",
道家: "道家",
墨家: "墨家"
})
var 行为 = Object.freeze({
栽种: "栽种",
制作: "制作",
结婚: "结婚",
求教: "求教",
消灭: "消灭",
出使: "出使",
出击: "出击",
击败: "击败",
效力: "效力",
称帝: "称帝"
});
var 植物 = Object.freeze({
水稻: "水稻"
});
var 物件 = Object.freeze({
陶器: "陶器"
});
var 国家所属时期 = Object.freeze({
[朝代.春秋]: [地点.齐, 地点.晋, 地点.宋, 地点.秦, 地点.楚, 地点.吴_春秋, 地点.越, 地点.鲁],
[朝代.战国]: [地点.齐, 地点.楚, 地点.燕, 地点.秦, 地点.韩, 地点.赵, 地点.魏_战国],
[朝代.三国]: [地点.魏_三国, 地点.吴_三国, 地点.蜀国]
});
// 数字为公元纪年, 如-5000即公元前5000年, 221即公元后221年
// TODO: 很多年份如秦代-200需更正
var 时间跨度 = Object.freeze({
[地点.河姆渡]: {开始: -6000, 结束: -5000},
[地点.半坡]: {开始: -4400, 结束: -4300},
[朝代.东周]: {开始: -770, 结束: -221},
[朝代.秦]: {开始: -221, 结束: -200},
[朝代.西汉]: {开始: -200, 结束: 0},
[朝代.东汉]: {开始: 0, 结束: 229},
[年号.贞观]: {开始: 626, 结束: 650}
});
// TODO: 此表仅在人物无具体生卒年月时有用
var 所属时期 = Object.freeze({
[地点.半坡]: 朝代.新石器,
[地点.河姆渡]: 朝代.新石器,
[人物.孔子]: 朝代.春秋,
[人物.老子]: 朝代.春秋,
[人物.卫青]: 朝代.西汉,
[人物.霍去病]: 朝代.西汉
});
var 所属地点 = Object.freeze({
[人物.孔子]: 地点.鲁,
});
var 人物所属群体 = Object.freeze({
[人物.孔子]: 群体.儒家,
[人物.孟子]: 群体.儒家,
[人物.老子]: 群体.道家,
[人物.墨子]: 群体.墨家
});
var 属性 = Object.freeze({
[地点.河姆渡]: 社会类型.氏族社会,
[地点.半坡]: 社会类型.母系社会
});
// 行为方向为: 前者对后者
// TODO: 加入事件发生时间, 地点
var 事件 = Object.freeze({
[行为.结婚]: [(人物.文成公主, 人物.松赞干布), (人物.武则天, 人物.唐高宗)],
[行为.栽种]: [(地点.河姆渡, 植物.水稻)],
[行为.制作]: [(地点.半坡, 物件.陶器)],
[行为.求教]: [(人物.孔子, 人物.老子)],
[行为.消灭]: [(地点.秦, 地点.韩), (地点.秦, 地点.赵), (地点.秦, 地点.魏_战国)],
[行为.出使]: [(人物.张骞, 地点.西域), (人物.郑和, 地点.西洋)],
[行为.出击]: [(人物.卫青, 地点.匈奴), (人物.霍去病, 地点.匈奴)],
[行为.击败]: [(人物.曹操, 人物.袁绍)],
[行为.效力]: [(人物.魏征, 人物.李建成), (人物.魏征, 人物.唐太宗), (人物.李靖, 人物.唐太宗), (人物.尉迟恭, 人物.唐太宗), (人物.郑和, 人物.朱棣)],
[行为.称帝]: [(人物.曹丕, 地点.魏_三国, 220), (人物.刘备, 地点.蜀国, 221), (人物.孙权, 地点.吴_三国, 229)]
});
var 名言 = Object.freeze({
[人物.唐太宗]: ["民, 水也; 君, 舟也. 水能载舟, 亦能覆舟"]
});
责任编辑:
python古诗朝代_用 Python 编写中国历史知识库,此时不用中文命名变量更待何时?...相关推荐
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python游戏房间_使用 Python 学习面向对象的编程 | Linux 中国
使用 Python 类使你的代码变得更加模块化.-- Seth Kenlon 在我上一篇文章中,我解释了如何通过使用函数.创建模块或者两者一起来使 Python 代码更加模块化.函数对于避免重复多次使 ...
- c调用python第三方库_用 Python ctypes 来调用 C/C++ 编写的第三方库
看到一篇简洁的文章--如何用Python ctypes调用C++(ctypes调用C没这么多麻烦事),不敢独享... 如果需要用 Python 调用 C/C++ 编写的第三方库(这些第三方库很可能就是 ...
- python 免费空间_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
- python制作鬼畜_用Python分析本山大叔鬼畜视频为啥这么火
原标题:用Python分析本山大叔鬼畜视频为啥这么火 ♚ cxa,有着丰富的爬虫工作经验,公众号Python学习开发,擅长各种爬虫技术,熟悉大规模爬虫开发.热爱并喜欢钻研python. 改革春风吹满地 ...
- python的认识_认识Python和基础知识
一.第一个Python程序 用vim编写,格式: vim hello.py 然后按 i 进入插入模式开始写代码,注意所有的代码都要用英文输入法,先写括号和引号,再在引号里面写内容(为了避免引号.括号不 ...
- python char 相等_用 Python 实现 Excel文本函数
用 Python 实现 Excel文本函数 Excel 是非常强大的电子表格软件,大家日常经常用 Excel 处理成绩.师生名单.分析数据等,对 Excel 的函数比较了解,通过用 Python 实现 ...
- python希腊字母字符串_#10 Python字符串
前言 通过上一节可知,Python6个序列的内置类型中,最常见的是列表和元组,但在Python中,最常用的数据类型却不是列表和元组,而是字符串.要想深入了解字符串,必须先掌握字符编码问题.因此本篇博文 ...
最新文章
- 全球有多少 C/C++ 程序员?Java 和 Python 又有多少?
- VisualStudio代码样式-我最喜欢的一种风格
- 计算机视觉与深度学习 | 对恐怖袭击事件记录数据的量化分析(附源代码):博主的机器学习首秀(研究生数学建模二等奖)
- NYOJ10: skiing(DFS + DP)
- 排序算法第四篇——冒泡排序
- atitit查询表修改表字段没反应--解锁锁定的表
- MySQL数据库性能优化方法,一篇给你总结了
- isis软件添加源代码c语言,ProteusISIS和Keil软件入门学习..doc
- web 安全-电脑端口(全部)
- 【超图+CESIUM】【基础API使用示例】09、超图|CESIUM - 场景分屏设置
- 政简网:还剩一个月时间怎么科学有效复习公务员考试?
- MySQL联合主键解释
- 如何通过发送短信唤起三方app?
- Cat3.0.0监控本地部署+springboot接入cat例子
- 实现图片“模糊”特效
- 物联网之MQTT3.1.1和MQTT5协议 (4) PUBLISH报文
- opencv-python使用cv2.resize()函数批量放大图片
- 电脑上照片如何压缩大小?怎么把照片在线压缩?
- HDU-6121 Build a tree - 2017 Multi-University Training Contest - Team 7(完全K叉树)
- 树莓派编译ffmpeg支持x264硬解码播放视频
热门文章
- 教你轻松分清pandas中的axis=0,axis=1具体含义
- 部署 Elastic
- taro tabBar的设置,设置tabbar的文字,设置tabbar的图标
- 用迭代法求 x=根号a。求平方根的迭代公式为:X(n+1)=(Xn+a/Xn) /2。要求前后两次求出的x的差的绝对值 小于10的-5次方
- Qt之connect函数—信号槽连接的几种方式和优缺点
- G1重要算法与总体流程
- 二本大一新生拒绝摆烂,2个月后的觉醒
- Python语言程序设计第七章 - 组合数据类型 - 6.1
- 各种系统架构图及其简介
- 机器学习-样本不均衡现象