判断一门语言值不值得学,最好的办法是看它写过什么。 下面这些都在仓库里,clone 下来就能跑。
| 项目 | 做了什么 | 规模 |
|---|---|---|
| 基石自述站 | 352 行 | |
| 小网站 | 跑起来: | 87 行 |
| 待办清单 | 用基石写的命令行待办工具:增删改查 + JSON 持久化 + 命令行参数。 | 145 行 |
| 成绩分析 | 用基石写的真实数据处理工具:读一个带「姓名,语文,数学,英语」表头的 CSV, | 82 行 |
| 排序跑分 | 用基石写的三个排序实现 + 跑分表:正确性用内建 排序() 当裁判, | 110 行 |
| 日志统计 | 用基石写的真实日志分析工具:读一个服务器访问日志(每行一条),统计 | 73 行 |
| 网页采集 | 用基石写的真实网页采集脚本:抓取一个网页,用正则提取所有链接(标题 + 网址), | 65 行 |
下面是从项目里截的真实代码(不是为演示编的):
导入 文件
导入 系统
导入 时间
导入 json
导入 文本 为 文本模块
令 数据文件 = "待办.json"
函数 读任务():
如果 非 文件.文件存在(数据文件):
返回 []
尝试:
令 内容 = json.读文件(数据文件)
如果 类型(内容) == "列表":
导入 表格
导入 文本
函数 数字(值):
尝试:
返回 小数(值)
捕获 值错误:
返回 0
函数 总分(行, 科目):
令 合计 = 0
遍历 i 在 范围(1, 长度(行)):
合计 = 合计 + 整数(数字(行[i]))
返回 合计
导入 容器
函数 解析行(行):
令 段 = 行.拆分(" ")
如果 长度(段) < 5:
返回 空
返回 [段[0], 段[3], 段[4]]
函数 统计(日志路径):
令 有效 = []
用 打开(日志路径) 为 日志:
遍历 行 在 日志:
令 行 = 行.去空白()
如果 行 != "":
导入 网络
导入 正则
导入 表格
导入 html
函数 提取链接(页面):
令 结果 = []
遍历 组 在 html.取链接(页面):
令 标题 = 组[0]
令 网址 = 组[1]
如果 网址.开头是("http"):
结果.追加([标题, 网址])
返回 结果
配套 10 章教程, 每个例子都是完整可跑的小程序 —— 从打印一行字到记账程序。
| 文件 | 规模 |
|---|---|
| 01_你好.jsh | 6 行 |
| 02_计算器.jsh | 8 行 |
| 03_清单.jsh | 11 行 |
| 04_猜数字.jsh | 16 行 |
| 05_九九乘法表.jsh | 6 行 |
| 06_函数演示.jsh | 26 行 |
| 07_通讯录.jsh | 18 行 |
| 08_读写文件.jsh | 17 行 |
| 09_成绩表分析.jsh | 29 行 |
| 10_记账程序.jsh | 38 行 |
官网里的「自述」页由一个用基石写的程序
生成(examples/projects/基石自述站/生成.jsh,300 多行)——
它读仓库里的真数据(版本号、测试数、里程碑),当场算出页面。
所以那页上的数字不会过期。
换句话说:这个语言至少已经能写「读文件、处理文本、生成 HTML」这类活了。 这类活占程序员日常的一大半。
clone 下来直接跑仓库里的例子(不用装,源码即可运行)git clone https://github.com/benxiaoniao/JISHI.git
cd JISHI
python -m oracle.jishi.cli examples/projects/待办清单/待办.jsh