Heyo 首页 教程 语法手册
docs / tutorial

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 / noage >= 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 到 bcopy(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)转 JSONfromjson(s)JSON 解析

其他

clock()当前时间戳wait(秒)暂停一会儿