官方示例
下方代码逐个拷贝为 *.灵 文件,即可用 lingyu 文件名.灵 直接运行。全部源码位于灵语项目 examples/ 目录。点「在线运行」不用安装也能玩。
hello.灵
14 行从 系统 导入 参数
定义 斐波那契(n):
若 n <= 1:
返回 n
返回 斐波那契(n - 1) + 斐波那契(n - 2)
定义 主函数():
打印("你好,灵语!")
打印("斐波那契(10) =", 斐波那契(10))
打印("命令行参数:", 参数[1:])
若 __名__ == "__main__":
主函数()九九乘法表.灵
7 行九九乘法表:教学示例 —— 嵌套循环 / 格式化输出
# 九九乘法表:教学示例 —— 嵌套循环 / 格式化输出
循环 行数 于 范围(1, 10):
行 = ""
循环 列数 于 范围(1, 行数 + 1):
行 = 行 + f"{行数}×{列数}={行数 * 列数:<4}"
打印(行)全角示例.灵
8 行总和 = 0
循环 x 于 范围(5):
总和 += x
打印("总和 =", 总和)
若 总和 == 10:
打印("正确!")
否则:
打印("错误")列表与字典.灵
22 行列表与字典:教学示例 —— 容器 / 循环 / 常用内置
# 列表与字典:教学示例 —— 容器 / 循环 / 常用内置
水果 = 列表()
水果.追加("苹果")
水果.追加("香蕉")
水果.追加("橘子")
打印("共有 " + 字符串(长度(水果)) + " 种水果")
循环 序号 于 范围(长度(水果)):
打印(字符串(序号 + 1) + ". " + 水果[序号])
分数 = 字典()
分数["小明"] = 92
分数["小红"] = 88
分数["小刚"] = 97
总成绩 = 求和(分数.值列表())
平均分 = 总成绩 / 长度(分数)
打印("平均分:" + 字符串(平均分))
最低分 = 最小值(分数.值列表())
打印("最低分:" + 字符串(最低分))多文件示例.灵
5 行导入 数学工具箱
打印("3 的平方 =", 数学工具箱.平方(3))
打印("半径 2 圆的面积 =", 数学工具箱.圆面积(2))
打印("3-4-5 直角三角形的斜边 =", 数学工具箱.斜边(3, 4))数学工具箱.灵
10 行导入 数学
定义 平方(x):
返回 x * x
定义 圆面积(r):
返回 数学.圆周率 * r * r
定义 斜边(a, b):
返回 数学.平方根(平方(a) + 平方(b))数据框示例.灵
12 行跑法:python -m lingyu examples\数据框示例.灵
# 灵语 M10 演示:写中文版代码——导入中文库名、用中文 API
# 跑法:python -m lingyu examples\数据框示例.灵
导入 数据框库
表 = 数据框库.数据框({"甲": [1, 2, 3], "乙": [4, 5, 6]})
打印("—— 数据表头部 ——")
打印(表.头部(2)) # 实例中文方法 .头部 → pandas.head
打印("—— 中文 API ——")
打印("平均 =", 表.平均()) # .平均 → DataFrame.mean
打印("求和 =", 表.求和()) # .求和 → DataFrame.sum文本统计.灵
18 行文本统计:教学示例 —— 文件读取 / 字典计数 / 排序
# 文本统计:教学示例 —— 文件读取 / 字典计数 / 排序
文本 = "山外青山楼外楼 西湖歌舞几时休 暖风熏得游人醉 直把杭州作汴州"
词表 = 文本.字符替换(" ", "")
字典统计 = 字典()
循环 每个字 于 词表:
若 每个字 于 字典统计:
字典统计[每个字] = 字典统计[每个字] + 1
否则:
字典统计[每个字] = 1
统计结果 = []
循环 字符 于 字典统计:
统计结果.追加([-字典统计[字符], 字符])
循环 次数, 字符 于 排序(统计结果):
打印(字符, "出现", -次数, "次")未命名.灵
247 行不再因缺第三方库整体崩溃,也无 e/exec 类英文残留。
# 灵语备忘录 —— Qt 图形界面版
# 跑法:python -m lingyu examples\未命名.灵
# #42/#43:界面需 PySide6(pip install PySide6);缺失时示例优雅降级为提示并正常退出,
# 不再因缺第三方库整体崩溃,也无 e/exec 类英文残留。
导入 系统
从 系统 导入 参数
导入 JSON
从 lingyu.i18n 导入 汉化, 注册词表
# #42:非 PySide6 环境不硬崩——占位同名类使函数/类体可编译,入口处按 界面可用 分流
尝试:
从 PySide6.QtWidgets 导入 QMainWindow, QWidget, QLineEdit
从 PySide6.QtWidgets 导入 QPushButton, QScrollArea, QCheckBox, QLabel
从 PySide6.QtWidgets 导入 QVBoxLayout, QHBoxLayout, QApplication
注册词表({"执行": "exec"}) # #43:应用.执行() → exec()(规避英文残留)
汉化(QApplication)
界面可用 = 真
捕获 模块未找到:
界面可用 = 假
QMainWindow = QWidget = QLineEdit = QPushButton = 对象
QScrollArea = QCheckBox = QLabel = QApplication = 对象
QVBoxLayout = QHBoxLayout = 对象
数据文件 = "我的备忘录.json"
类 主窗口(QMainWindow):
定义 初始化(自身):
父类().初始化() # 正确调用 super().__init__()
自身.备忘录数据 = []
自身.当前过滤文本 = ""
自身.setWindowTitle("📒 灵语备忘录")
自身.setFixedSize(520, 700)
中央部件 = QWidget()
自身.setCentralWidget(中央部件)
主布局 = QVBoxLayout(中央部件)
主布局.setSpacing(12)
主布局.setContentsMargins(16, 16, 16, 16)
自身.setStyleSheet("""
QMainWindow {
背景: #f0f2f5;
}
QLineEdit {
边框: 2px solid #d1d5db;
边框半径: 12px;
背景: #ffffff;
字体大小: 14px;
内边距: 10px 14px;
}
QLineEdit:focus {
边框: 2px solid #6366f1;
}
QPushButton {
边框: 无;
边框半径: 12px;
背景: #6366f1;
颜色: white;
字体大小: 13px;
字体粗细: 600;
内边距: 10px 18px;
}
QPushButton:hover {
背景: #4f46e5;
}
QPushButton#删除按钮 {
背景: #f43f5e;
最小宽度: 30px;
最大宽度: 30px;
最小高度: 30px;
最大高度: 30px;
边框半径: 15px;
内边距: 0px;
}
QPushButton#删除按钮:hover {
背景: #e11d48;
}
QScrollArea {
边框: 无;
背景: 透明;
}
QWidget#条目背景 {
背景: #ffffff;
边框半径: 12px;
}
""")
搜索框 = QLineEdit()
搜索框.setPlaceholderText("🔍 搜索备忘录内容...")
搜索框.textChanged.connect(自身.当搜索变化)
主布局.addWidget(搜索框)
添加布局 = QHBoxLayout()
自身.输入框 = QLineEdit()
自身.输入框.setPlaceholderText("写点什么...")
自身.输入框.returnPressed.connect(自身.添加备忘录)
添加按钮 = QPushButton("➕ 新增")
添加按钮.clicked.connect(自身.添加备忘录)
添加布局.addWidget(自身.输入框, 3)
添加布局.addWidget(添加按钮, 1)
主布局.addLayout(添加布局)
自身.滚动区域 = QScrollArea()
自身.滚动区域.setWidgetResizable(真)
自身.滚动区域.setStyleSheet("背景: 透明; 边框: 无;")
自身.容器 = QWidget()
自身.容器.setObjectName("条目背景")
自身.容器布局 = QVBoxLayout(自身.容器)
自身.容器布局.setSpacing(10)
自身.容器布局.setContentsMargins(8, 8, 8, 8)
自身.容器布局.addStretch(1)
自身.滚动区域.setWidget(自身.容器)
主布局.addWidget(自身.滚动区域)
底部布局 = QHBoxLayout()
自身.计数标签 = QLabel("共 0 项")
自身.计数标签.setStyleSheet("颜色: #6b7280; 字体大小: 12px;")
底部布局.addWidget(自身.计数标签)
底部布局.addStretch(1)
清空完成按钮 = QPushButton("✅ 清除已完成")
清空完成按钮.clicked.connect(自身.清除已完成)
底部布局.addWidget(清空完成按钮)
主布局.addLayout(底部布局)
自身.加载数据()
自身.刷新列表()
# ---------- 核心功能 ----------
定义 添加备忘录(自身):
文本 = 自身.输入框.text().strip()
若 文本:
自身.备忘录数据.追加({"文本": 文本, "完成": 假})
自身.输入框.clear()
自身.保存数据()
自身.刷新列表()
定义 切换完成状态(自身, 索引):
若 0 <= 索引 < 长度(自身.备忘录数据):
自身.备忘录数据[索引]["完成"] = 非 自身.备忘录数据[索引]["完成"]
自身.保存数据()
自身.刷新列表()
定义 删除指定(自身, 索引):
若 0 <= 索引 < 长度(自身.备忘录数据):
自身.备忘录数据.弹出(索引)
自身.保存数据()
自身.刷新列表()
定义 清除已完成(自身):
新数据 = []
循环 项 于 自身.备忘录数据:
若 非 项["完成"]:
新数据.追加(项)
自身.备忘录数据 = 新数据
自身.保存数据()
自身.刷新列表()
定义 当搜索变化(自身, 文本):
自身.当前过滤文本 = 文本
自身.刷新列表()
定义 刷新列表(自身):
循环 i 于 反转(范围(自身.容器布局.count())):
项 = 自身.容器布局.itemAt(i)
若 项.widget() 且 项.widget() 是 QWidget:
项.widget().deleteLater()
删除 项
过滤词 = 自身.当前过滤文本.strip().lower()
显示列表 = []
循环 项 于 自身.备忘录数据:
若 过滤词 == "" 或 过滤词 于 项["文本"].lower():
显示列表.追加(项)
索引 = 0
循环 数据 于 显示列表:
条目 = QWidget()
条目.setStyleSheet("""
背景: #ffffff;
边框半径: 12px;
""")
条目布局 = QHBoxLayout(条目)
条目布局.setContentsMargins(12, 12, 12, 12)
复选框 = QCheckBox()
复选框.setChecked(数据["完成"])
复选框.stateChanged.connect(匿名函数 checked, idx=索引: 自身.切换完成状态(idx))
条目布局.addWidget(复选框)
标签 = QLabel(数据["文本"])
标签.setWordWrap(真)
若 数据["完成"]:
标签.setStyleSheet("文字修饰: 贯穿线; 颜色: #9ca3af; 字体大小: 14px;")
否则:
标签.setStyleSheet("颜色: #1f2937; 字体大小: 14px;")
条目布局.addWidget(标签, 1)
删除钮 = QPushButton("✕")
删除钮.setObjectName("删除按钮")
删除钮.clicked.connect(匿名函数 _, idx=索引: 自身.删除指定(idx))
条目布局.addWidget(删除钮)
自身.容器布局.insertWidget(自身.容器布局.count() - 1, 条目)
索引 += 1
自身.计数标签.setText(f"共 {长度(显示列表)} 项 / 总计 {长度(自身.备忘录数据)} 项")
# ---------- 数据持久化 ----------
定义 保存数据(自身):
尝试:
使用 打开(数据文件, "w", 编码="utf-8") 作为 f:
JSON.转储(自身.备忘录数据, f, 确保ascii=假, 缩进=2)
捕获 异常 作为 失败原因:
打印("⚠️ 保存失败:", 失败原因)
定义 加载数据(自身):
尝试:
使用 打开(数据文件, "r", 编码="utf-8") 作为 f:
自身.备忘录数据 = JSON.加载(f)
捕获 文件未找到:
自身.备忘录数据 = []
捕获 异常 作为 失败原因:
打印("⚠️ 加载数据出错,重置为空。", 失败原因)
自身.备忘录数据 = []
# ---------- 程序入口 ----------
若 __名__ == "__main__":
若 非 界面可用:
# 无 PySide6:示例仍可运行,提示安装后体验完整界面
打印("📒 未命名.灵 的图形界面需要 PySide6,请先安装:")
打印(" pip install PySide6")
系统.退出(0)
# 安全处理 QApplication 单例(通常不需要,但以防万一)
应用 = QApplication.instance()
若 应用 是 空:
应用 = QApplication(参数)
窗口 = 主窗口()
窗口.show()
系统.退出(应用.执行())猜数字游戏.灵
25 行猜数字游戏:教学示例 —— 循环 / 条件 / 输入 / 随机 / 整数转换
# 猜数字游戏:教学示例 —— 循环 / 条件 / 输入 / 随机 / 整数转换
导入 随机
秘密号 = 随机.随机整数(1, 100)
次数 = 0
打印("我已想好一个 1 到 100 之间的数字……")
当 真:
尝试:
猜测 = 整数(输入("请猜一个数字:"))
捕获 EOF错误:
打印("输入已结束,游戏中止。")
退出循环
次数 = 次数 + 1
若 猜测 < 秘密号:
打印("太小了,再大一点")
否则若 猜测 > 秘密号:
打印("太大了,再小一点")
否则:
打印(f"恭喜!猜中了,共猜了 {次数} 次")
退出循环
打印("游戏结束。")窗口示例.灵
19 行跑法:python -m lingyu examples\窗口示例.灵
# 灵语 M9 演示:第三方库(tkinter)成员全程中文——「窗口.标题」合法
# 跑法:python -m lingyu examples\窗口示例.灵
从 lingyu.i18n 导入 汉化, 注册词表
导入 tkinter 作为 界面库
注册词表({"标题": "title", "几何": "geometry", "关闭": "destroy",
"主循环": "mainloop", "更新": "update", "打包": "pack",
"按钮": "Button", "标签": "Label", "绑定": "bind", "聚焦": "focus",
"退出": "quit", "配置": "config", "文本": "text"})
汉化(界面库.Tk)
根 = 界面库.Tk()
根.标题("灵语窗口") # .标题 → .title()
根.几何("240x120") # .几何 → .geometry()
根.更新() # 立即渲染,不阻塞主循环
打印("窗口标题 =", 根.标题()) # 读取回显
根.关闭() # .关闭 → .destroy()语法全览.灵
75 行见 lingyu\keywords.py 的 METHODS 表),示例全程中文,无需切英文。
# 语法全览:一个例子串起灵语的主要语法点
# 运行:python -m lingyu examples\语法全览.灵
# 说明:容器/字符串/文件对象的方法名也有中文别名(追加/值列表/读/写/大写……,
# 见 lingyu\keywords.py 的 METHODS 表),示例全程中文,无需切英文。
导入 数学
导入 随机
导入 操作系统
定义 主():
# 变量与基本类型
名字 = "小明"
年龄 = 16
身高 = 1.72
是学生 = 真
# 容器
科目 = ["语文", "数学", "英语"]
成绩 = {名字: 92, "小红": 88}
# 函数
定义 介绍(某名):
返回 f"{某名} 今年 {年龄} 岁,身高 {身高}"
打印(介绍(名字))
打印("科目数:", 长度(科目))
打印("总分:", 求和(成绩.值列表()))
打印("随机数:1~6 →", 随机.随机整数(1, 6))
打印("半径4的圆的面积:", 数学.圆周率 * 4 * 4)
打印("16 的平方根:", 数学.平方根(16))
# 条件
若 年龄 >= 18:
打印("已成年")
否则:
打印("未成年")
# 循环
循环 序号 于 范围(长度(科目)):
打印("科目", 序号 + 1, ":", 科目[序号])
# 类与继承
类 动物():
定义 初始化(自身, 某名):
自身.某名 = 某名
定义 叫声(自身):
返回 "……"
类 猫(动物):
定义 叫声(自身):
返回 "喵"
小猫 = 猫("团子")
打印("多态:", 小猫.某名, "说", 小猫.叫声())
# 异常处理
尝试:
打印(10 / 0)
捕获 零除错误:
打印("除零错误已被捕获")
# 文件读写
临时文件 = "临时.txt"
使用 打开(临时文件, "w", encoding="utf-8") 作为 文件对象:
文件对象.写("灵语文件示例")
使用 打开(临时文件, encoding="utf-8") 作为 文件对象:
打印("文件内容:", 文件对象.读())
操作系统.删除文件(临时文件)
打印("结束:语法全览示例运行完毕。")
若 __名__ == "__main__":
主()面向对象示例.灵
22 行类 动物():
定义 初始化(自身, 名字):
自身.名字 = 名字
定义 叫声(自身):
返回 "……"
类 猫(动物):
定义 叫声(自身):
返回 "喵"
类 狗(动物):
定义 叫声(自身):
返回 "汪"
定义 主函数():
动物们 = [猫("小白"), 狗("大黄")]
循环 动物 于 动物们:
打印(动物.名字 + "说:" + 动物.叫声())
若 __名__ == "__main__":
主函数()