用 cjpm run 跑通了第一个仓颉程序。它做的事很简单:打印 0 到 9 里的奇数。仓颉和 Python 的逻辑完全一样,差别全在写法上——范围写成 0..10(对应 Python 的 range(10)),而过滤条件从循环体里的 if 挪到了 for 头的 where。下面是两次跑通的过程,以及两种写法的逐项对比。
前置条件
- 装好仓颉 SDK,
cjpm命令可用 - Python 3,用来对照两种写法的差异
- 知道基本的
for循环和取模运算(%)
第一个程序
把代码存成项目根目录下的 main.cj:
main() { for (i in 0..10 where i % 2 == 1) { println(i) }}在项目根目录下敲 cjpm run,终端输出:
13579和 Python 写法的差异
同样的逻辑用 Python 写是这样:
for i in range(10): if i % 2 == 1: print(i)两段代码干的事完全一样,但结构差异一眼就能看出来:
| 对比项 | Python | 仓颉 |
|---|---|---|
| 遍历范围 | range(10) | 0..10 |
| 过滤条件位置 | 循环体里的 if | for 头里的 where |
| 读法 | 先遍历 0 到 9,再筛掉偶数 | 遍历 0 到 9 中满足 i % 2 == 1 的 |
0..10 对应 range(10),都是左闭右开。区别在过滤条件的位置:Python 的 if 缩进在循环体里,仓颉的 where 挂在 for 的括号里。后者把范围和条件压在一行,少一层缩进,意图更直接。
紧凑写法对比
Python 里想写得紧凑点可以用生成器表达式:
for i in (x for x in range(10) if x % 2 == 1): print(i)输出一样,但 (x for x in ...) 这层壳比 where 重。Python 日常还是写 if 居多,仓颉等于把这个常见模式收进了语法本身。
第一个程序就跑通了一个 for + where,最直接的感受是仓颉把 Python 里靠缩进和习惯表达的东西做成了关键字:where 进 for 头,少写一层 if,读起来反而更清楚。
我实际遇到的几个问题
仓颉的 0..10 是左闭右开吗?
是。0..10 对应 Python 的 range(10),包含 0 不包含 10,实际遍历的是 0 到 9。如果要包含右端点,要写成 0..=10(等价于 range(11)),例如 for (i in 0..=9) 会遍历到 9。
where 能等价于 Python 的 if 吗?
在遍历过滤这个场景下等价:两者都是「遍历时跳过不满足条件的元素」,逻辑上都是对每次迭代做一次判断。差别只在写法位置和多出来的那层缩进。where 后面要加多个条件,继续用 && 连就行,比如 for (i in input where i >= 48 && i <= 57)。
第一个程序要怎么跑起来?
把代码存成项目根目录下的 main.cj,然后在项目根目录执行 cjpm run。前提是仓颉 SDK 装好、cjpm 命令可用;这个例子没有外部依赖,直接跑就行。
如果内容对你有帮助,欢迎用微信或支付宝请我喝杯咖啡 ☕


评论
评论将由 AI 自动审核;需要人工确认的内容会在审核通过后显示。
正在加载评论……