本项目所有代码均由 AI 生成,未经人工审核。请谨慎使用。
欢迎来到 RedbookLang(薯言) 的世界!
这是一个全新的编程语言,旨在让编程变得更简单、更有趣。
它的语法灵感来源于 Redbook 社区的交流方式,使用了许多通俗易懂的表达方式。
下面是 RedbookLang 的基本语法和功能介绍。
# 符号开始一行注释。注释内容会被解释器忽略。# 这是一行注释,解释器会忽略我哦
大小写 (Case Sensitivity): RedbookLang 中的关键字和用双引号包裹的标识符(如变量名、函数名)是区分其实际内容的,但关键字本身(如 种草一个, 听我说,)必须按照文档中指定的大小写来书写。
语句体 (Statement Bodies): 重要提示: 当前版本的 RedbookLang 中,函数定义、条件语句 (康康是不是, 或者康康, 都不是呢)以及循环语句 (本宝宝坚持, 盘点清单) 的执行体都只能包含 单个语句。
RedbookLang 目前支持以下主要数据类型:
数值 (Number): 包括整数和浮点数。负数可以通过在数字前加上 - (负号) 来表示 (技术上这是一个一元运算符作用于数字)。
10
3.14
-7
字符串 (String): 用单引号 '' 包裹的文本。支持空字符串(如 '')。
'你好, RedbookLang!'
'今天天气真不错☀️'
''
布尔值 (Boolean): 代表逻辑真或假。
当然啦 (代表 真 / True)才不是 (代表 假 / False)种草一个 "事实" 是 当然啦
种草一个 "谣言" 是 才不是
列表 (List): 用方括号 [] 包裹,元素用逗号分隔。可包含任意类型。使用方括号和从 0 开始的数字索引 [0] 来访问元素。
种草一个 "我的列表" 是 [1, 'a', 当然啦]
听我说, "我的列表"[1] # 输出: a
字典 (Dict): 用大括号 {} 包裹,是键值对的集合。键和值都可以是任意表达式。使用方括号和键 ['key'] 来访问元素。
种草一个 "我的字典" 是 {'昵称': '小红薯', '年龄': 18}
听我说, "我的字典"['年龄'] # 输出: 18
声明和赋值 (Declaration and Assignment): 使用 种草一个 关键字声明变量,后跟用双引号 "" 包裹的变量名,然后是 是 关键字和赋给变量的值。
种草一个 "我的变量" 是 100
种草一个 "欢迎语" 是 'Hello, RedbookLang!'
种草一个 "笔记赞数" 是 1024
种草一个 "是否周末" 是 当然啦
标识符 (Identifiers): 变量名和函数名等标识符,必须用双引号 "" 包裹。
"myVar"
"计算总价"
"用户昵称"
RedbookLang 支持多种运算符:
算术运算符 (Arithmetic Operators):
加上 (+): 数字加法,或字符串拼接。
听我说, 10 加上 5 # 输出: 15
听我说, '你好' 加上 '薯言' # 输出: 你好薯言
减去 (-): 数字减法。
听我说, 10 减去 5 # 输出: 5
乘以 (*): 数字乘法。
听我说, 10 乘以 5 # 输出: 50
除以 (/): 数字除法。结果通常是浮点数。
听我说, 10 除以 5 # 输出: 2.0
听我说, 7 除以 2 # 输出: 3.5
一元负号 (-): 用于表示负数或取一个数值表达式的负值。
种草一个 "温度" 是 -5
种草一个 "另一个数" 是 10
听我说, -"另一个数" # 输出: -10
比较运算符 (Comparison Operators): 用于比较两个值,结果是布尔值 (当然啦 或 才不是)。
等于 (==)不等于 (!=)小于 (<)小于等于 (<=)大于 (>)大于等于 (>=)听我说, 10 等于 10 # 输出: True (实际输出可能是 当然啦 的等价值)
听我说, '苹果' 不等于 '香蕉' # 输出: True
听我说, 5 大于 3 # 输出: True
Note: For <, <=, >, >= operators, comparing values of different types (e.g., a number and a string) may lead to a TypeError.
逻辑运算符 (Logical Operators): 用于组合布尔表达式。
并且 (AND): 如果两边的表达式都为真,则结果为真。或者 (OR): 如果两边的表达式至少有一个为真,则结果为真。反转魅力 (NOT): 对单个布尔表达式取反。种草一个 "阳光明媚" 是 当然啦
种草一个 "周末" 是 才不是
听我说, "阳光明媚" 并且 "周末" # 输出: False
听我说, "阳光明媚" 或者 "周末" # 输出: True
听我说, 反转魅力 "周末" # 输出: True
运算符优先级 (Operator Precedence): RedbookLang 遵循一定的运算顺序:
() 内的表达式- 作为负号, 反转魅力)乘以, 除法 除以加上, 减法 减去等于, 小于, 等)并且或者可以使用圆括号 () 来明确控制运算顺序。
听我说, (10 加上 5) 乘以 2 # 输出: 30
听我说, 反转魅力 ("阳光明媚" 并且 "周末") # 先算括号内,再取反
RedbookLang 支持条件语句和循环语句来控制程序的执行流程。
康康是不是、或者康康 和 都不是呢。
康康是不是 condition: statement
或者康康 condition: statement (可选,可有多个)
都不是呢: statement (可选)
condition 是一个结果为布尔值的表达式。statement 是当条件满足时执行的单个语句。
种草一个 "笔记点赞数" 是 250
康康是不是 "笔记点赞数" 大于 500:
听我说, '哇哦!笔记小爆款!'
或者康康 "笔记点赞数" 大于 200:
听我说, '不错哦,笔记有人气,继续加油!' # 这条会执行
都不是呢:
听我说, '每篇用心分享的笔记都是好笔记!💖'
While 循环 (本宝宝坚持): 当给定条件为真时,重复执行一个语句。
本宝宝坚持 condition: statement
condition 是一个布尔表达式。statement 是在每次循环中执行的单个语句。
为了防止无限循环,存在一个最大循环次数限制 (默认为2000次)。种草一个 "计数器" 是 0
本宝宝坚持 "计数器" 小于 3:
种草一个 "计数器" 是 "计数器" 加上 1
听我说, '计数器最终值为:', "计数器" # 输出: 计数器最终值为: 3
For 循环 (盘点清单): 用于遍历一个数字序列。
盘点清单 "iterator_var" (启动: start_expr, 目标: end_expr [, 跨步: step_expr]): statement
"iterator_var": 用双引号包裹的循环变量名。启动: start_expr: 循环的起始值 (包含)。目标: end_expr: 循环的结束边界。
跨步 为正,循环继续只要迭代变量 < end_expr。跨步 为负,循环继续只要迭代变量 > end_expr。跨步: step_expr (可选): 每次循环的步长,默认为 1。步长不能为 0。start_expr, end_expr, step_expr 都必须是数值。
statement 是在每次循环中执行的单个语句。同样有最大循环次数限制。听我说, '* 正向盘点 *'
盘点清单 "序号" (启动: 1, 目标: 4): # 序号: 1, 2, 3
听我说, '当前序号是:', "序号"
听我说, '* 反向盘点 (带步长) *'
盘点清单 "倒计时" (启动: 5, 目标: 0, 跨步: -1): # 倒计时: 5, 4, 3, 2, 1
听我说, '倒计时:', "倒计时"
函数是可重用的代码块。
定义函数 (Defining Functions): 使用 开个新帖 关键字。
叫: 后跟用双引号 "" 包裹的函数名。
艾特: 后跟圆括号 () 包裹的参数列表。参数名也用双引号 "" 包裹,多个参数用逗号 , 分隔。如果函数没有参数,则 () 中为空。
函数体以冒号 : 开始,后跟函数执行的单个语句。
绝绝子: 用于从函数中返回值。
开个新帖 叫 "加法大师" 艾特 ("数字一", "数字二"):
绝绝子 "数字一" 加上 "数字二"
开个新帖 叫 "简单问候" 艾特 (): # 无参数函数
听我说, '你好呀, 薯宝宝!'
开个新帖 叫 "个性化问候" 艾特 ("名字"):
绝绝子 '你好呀, ' 加上 "名字" 加上 '!'
调用函数 (Calling Functions): 使用 调用 关键字。
"" 包裹的函数名。用: 后跟圆括号 () 包裹的参数值列表。多个参数值用逗号 , 分隔。如果调用无参函数,() 中为空。种草一个 "计算结果" 是 调用 "加法大师" 用 (15, 7)
听我说, "计算结果" # 输出: 22
调用 "简单问候" 用 () # 输出: 你好呀, 薯宝宝!
种草一个 "问候语" 是 调用 "个性化问候" 用 ('小红薯')
听我说, "问候语" # 输出: 你好呀, 小红薯!
返回值 (Return Values): 函数体中 绝绝子 后面的表达式的值就是函数的返回值。如果函数没有 绝绝子 语句,或者 绝绝子 后面没有显式值,则函数不会返回一个可直接使用的值 (类似于其他语言中的 void 或 None 返回,但在薯言中,你不能直接将这个“无返回值”赋给变量或打印它期待一个值)。
''),不会报错。输出 (Output): 使用 听我说, 关键字打印一个或多个值到控制台。多个值用逗号 , 分隔,输出时它们会用单个空格隔开,并在末尾自动添加换行。
听我说, '欢迎来到 RedbookLang!'
种草一个 "年龄" 是 18
听我说, '我的年龄是:', "年龄", '岁。' # 输出: 我的年龄是: 18 岁。
RedbookLang 会在遇到语法错误或运行时错误时给出中文提示。常见的错误类型包括:
SyntaxError: 词法分析或语法分析阶段发现代码不符合 RedbookLang 语法。例如,关键字写错,或者括号不匹配。TypeError: 操作应用于了不兼容的类型。例如,用非数值类型进行 乘以 运算,或者对两个不同类型的值使用某些比较运算符。NameError: 尝试使用一个未“种草”(定义)的标识符(变量或函数名)。ZeroDivisionError: 尝试将一个数除以零。ValueError: 传递给操作或函数的参数类型正确但值不合适。例如,盘点清单 的 跨步 参数为零。RuntimeError: 一般的运行时错误,例如循环次数超过了预设的最大限制。# RedbookLang (薯言) 来了! yyds!
听我说, '--- 基础变量和打印 ---'
种草一个 "我的昵称" 是 '薯条宝宝'
种草一个 "幸运数字" 是 -7 # 定义负数
听我说, "我的昵称", '的幸运数字是', "幸运数字"
听我说, '--- 列表(List) 和 字典(Dict) ---'
种草一个 "空列表" 是 []
种草一个 "数字列表" 是 [1, 2, 3]
种草一个 "混合列表" 是 ['a', 2, 当然啦]
听我说, "数字列表"
听我说, "混合列表"
种草一个 "空字典" 是 {}
种草一个 "信息" 是 {'昵称': '小红薯', '年龄': 18}
听我说, "信息"
听我说, '--- 访问列表和字典的元素 ---'
听我说, '数字列表的第一个元素是:', "数字列表"[0]
听我说, '信息的昵称是:', "信息"['昵称']
听我说, '--- 函数定义与调用 ---'
开个新帖 叫 "制作元气早餐" 艾特 ("主食", "饮品"):
绝绝子 '元气早餐已上线:' 加上 "主食" 加上 ' + ' 加上 "饮品" 加上 ',开启美好一天!☀️'
种草一个 "我的早餐" 是 调用 "制作元气早餐" 用 ('小面包', '燕麦拿铁')
听我说, "我的早餐"
听我说, '--- 条件语句:康康是不是 ---'
种草一个 "笔记点赞数" 是 250
康康是不是 "笔记点赞数" 大于 500 并且 "幸运数字" 小于 0:
听我说, '哇哦!笔记小爆款,而且今天幸运值拉满!'
或者康康 "笔记点赞数" 大于 200:
听我说, '不错哦,笔记有人气,继续加油!' # <--- 这条会执行
都不是呢:
听我说, '没关系,每篇用心分享的笔记都是好笔记!💖'
康康是不是 反转魅力 ("笔记点赞数" 等于 0): # not (点赞 == 0) -> 点赞 != 0
听我说, '笔记已经有赞啦,不是零蛋宝宝!'
听我说, '--- 循环:本宝宝坚持 ---'
种草一个 "每日目标步数" 是 3
种草一个 "已走步数" 是 0
开个新帖 叫 "走一步" 艾特 ("当前步数"):
绝绝子 "当前步数" 加上 1
本宝宝坚持 "已走步数" 小于 "每日目标步数":
种草一个 "已走步数" 是 调用 "走一步" 用 ("已走步数")
听我说, '今日运动KPI完成,共走', "已走步数", '步!🏃♀️'
听我说, '--- 循环:盘点清单 (支持负数和负步长) ---'
开个新帖 叫 "分享第N个草稿" 艾特 ("草稿序号"):
听我说, '正在编辑第', "草稿序号", '个草稿,快要完成了!'
听我说, '* 正向盘点 *'
盘点清单 "草稿ID" (启动: 1, 目标: 4): # 草稿ID: 1, 2, 3
调用 "分享第N个草稿" 用 ("草稿ID")
听我说, '* 反向盘点 *'
盘点清单 "倒数日" (启动: 3, 目标: 0, 跨步: -1): # 倒数日: 3, 2, 1
听我说, '距离 deadline 还有:', "倒数日", '天! 冲刺!'
种草一个 "我的起点" 是 -2
种草一个 "我的终点" 是 3
种草一个 "我的步调" 是 1
盘点清单 "负数测试" (启动: "我的起点", 目标: "我的终点", 跨步: "我的步调"): # -2, -1, 0, 1, 2
听我说, '负数循环测试值:', "负数测试"
听我说, '--- 布尔与逻辑 ---'
种草一个 "今天下雨" 是 才不是
种草一个 "周末" 是 当然啦
康康是不是 "今天下雨" 或者 反转魅力 "周末": # false or not(true) -> false or false -> false
听我说, '坏天气,宅家刷剧吧!'
都不是呢: # 这条会执行
听我说, '天气不错,或者就是周末,出去玩!'
听我说, '--- 错误处理 ---'
# 试试错误处理
种草一个 "空篮子" 是 0
# 下面这行会触发 ZeroDivisionError,如果取消注释
# 听我说, 100 除以 "空篮子"
听我说, '代码执行完毕,感谢使用薯言!'
祝你使用 RedbookLang (薯言) 编程愉快!🎉