Heyo 教程
从零开始,每一节都能直接跑。关键词就是日常用语:say 说、ask 问、when 如果、need 需要。打开在线编辑器 ↗
1 · hello, world
say "hello, world"
say 让电脑说话。逗号隔开可以一次说多样,中间用空格连接:
say "我", "是", "Heyo" // 我是 Heyo say "1+2=", 1 + 2 // 1+2= 3
2 · 变量与运算:is
不用写 let、不用写 =,一个 is 就搞定。中文变量名随意用:
age is 12 名字 is "小明" age is age + 1 say 名字, "今年", age, "岁" // 小明 今年 13 岁
运算符
| 写法 | 意思 | 例子 |
|---|---|---|
+ - * / | 加减乘除 | 7 / 2 → 3.5 |
% | 取余数 | 7 % 2 → 1 |
== != > < >= <= | 比较,得 yes / no | age >= 18 |
and or not | 并且 / 或者 / 取反 | age > 6 and age < 12 |
yes / no | 真 / 假 | OK is yes |
3 · ask 问用户要输入
程序跑到 ask 会停下来等你打字,回车后把结果存进变量。两种写法:
// 表达式形式:值存进变量 name is ask "你叫什么:" // 语句形式:效果一样 ask name "你叫什么:" say "你好,", name // 输入的数字自动变成数,能直接算 age is ask "几岁:" say "明年", age + 1, "岁"
在 Heyo Studio(桌面版)里:运行到 ask 时输出区会弹出输入框,打字回车即可;运行中 Run 按钮变成 ■ Stop,随时可停。
4 · when 条件判断
score is 86 when score >= 90 -> say "优秀" elsewhen score >= 60 -> say "及格" else -> say "再努力"
单行条件用 ->;要执行多件事就换行缩进,用 done 收尾:
when score > 90 say "优秀!" say "奖励一颗星" done
5 · again 循环
次数循环
again i < 5 say "第", i + 1, "次" done
遍历列表
nums is [3, 1, 4, 1, 5] total is 0 again pick in nums total is total + pick done say "总和:", total
中途控制
again yes guess is ask "猜数字(1-10):" when guess == 7 -> stop // 跳出整个循环 when guess > 10 -> skip // 跳过本轮,进下一轮 done say "猜中了!"
6 · need 定义函数
need greet(name) return "Hello, " + name + "!" done need 三倍(x) return x * 3 done say greet("Heyo") // Hello, Heyo! say 三倍(14) // 42
7 · 列表
fruits is ["苹果", "香蕉", "橘子"] say fruits[0] // 苹果(从 0 数起) fruits[1] is "葡萄" // 替换 say len(fruits) // 3 push(fruits, "西瓜") // 尾部加一个 last is pop(fruits) // 尾部取出 → 西瓜 again f in fruits say f done
切片与常用操作
nums is [1, 2, 3, 4, 5, 6] say slice(nums, 1, 4) // [2, 3, 4] say sort(nums) // [1, 2, 3, 4, 5, 6] say reverse(nums) // [6, 5, 4, 3, 2, 1] say sum(nums) // 21 say max(nums), min(nums) // 6 1
8 · 字典
user is {name: "小明", age: 12} say user.name // 小明(点号取值) say user["age"] // 12(方括号也行) user.age is 13 // 改值 user.city is "北京" // 加新键 say keys(user) // [name, age, city] say values(user) say has(user, "email") // no again k in keys(user) say k, "=", user[k] done
9 · 字符串
s is "Hello Heyo" say s.upper // HELLO HEYO say s.lower // hello heyo say len(s) // 11 say split(s, " ") // [Hello, Heyo] say replace(s, "Heyo", "世界") say s.startswith("He") // yes // 数字和文本互转 n is num("42") + 8 // 50 t is text(3.14) + "!" // "3.14!" // 文本相加就是拼接 say "Hey" + "o!" // Heyo!
10 · 文件读写
write "hello.txt" <- "Heyo 写入的" text is "" read "hello.txt" -> text say "文件里说:", text
方向记法:
<- 是把右边的东西「写进」左边的文件;-> 是把文件「读到」右边的变量。跟数据流动的方向一致。11 · use 引入模块
// 用另一个 .hy 文件里定义的函数和变量 use "math_utils.hy" say square(9)
12 · 内置函数速查表
列表
len(l) | 长度 | push(l, x) | 尾部加入 |
pop(l) | 尾部取出 | insert(l, i, x) | 指定位置插入 |
remove(l, x) | 删掉某值 | find(l, x) | 找位置,没有得 -1 |
sort(l) | 排序 | reverse(l) | 倒序 |
slice(l, a, b) | 切 a 到 b | copy(l) | 复制一份 |
sum(l) | 求和 | count(l, x) | 数 x 出现几次 |
range(a, b) | [a, b) 数列 | pick(l) | 随机取一个 |
字典
keys(d) | 所有键 | values(d) | 所有值 |
has(d, k) | 有没有这个键 | clear(d) | 清空 |
数学
abs(n) | 绝对值 | round(n) | 四舍五入 |
floor(n) | 向下取整 | ceil(n) | 向上取整 |
sqrt(n) | 平方根 | min / max | 最小 / 最大 |
random() | 0~1 随机小数 | randfloat(a, b) | a~b 随机小数 |
shuffle(l) | 打乱列表 | chance(p) | p 概率得 yes |
文本与转换
upper(s) / lower(s) | 大小写 | split(s, sep) | 切开成列表 |
join(l, sep) | 列表拼成文本 | replace(s, a, b) | 替换 |
strip(s) | 去两端空白 | startswith / endswith | 开头 / 结尾判断 |
num(x) | 转数字 | text(x) | 转文本 |
tojson(v) | 转 JSON | fromjson(s) | JSON 解析 |
其他
clock() | 当前时间戳 | wait(秒) | 暂停一会儿 |