当前位置: 首页 > news >正文

第3篇:数据的运算——让数据动起来 仓颉 中文编程

第3篇:数据的运算——让数据动起来

**作者:**中文编程倡导者—— 李金雨
联系方式:wbtm2718@qq.com
**目标读者:**编程入门(零基础)
核心理念:使用华为仓颉原生中文编程,体验真正的国产编程语言


一、开篇引入

1.1 生活中的运算

生活中处处都有运算:

  • 买菜:3斤苹果 × 5元/斤 = 15元
  • 分糖果:10颗糖 ÷ 5个人 = 2颗/人
  • 比较身高:小明比小红高多少?
  • 判断年龄:年满18岁才能考驾照

1.2 程序中的运算

计算机最擅长的就是计算!我们可以让程序帮我们:

  • 快速计算复杂的数学题
  • 自动判断条件
  • 批量处理数据

1.3 关于运算符位置的思考

在开始学习运算之前,我们再聊聊仓颉的语法设计。

上一篇我们讨论了类型后置的问题(let 年龄: Int64),这一篇我们来看看运算符。

好消息是:仓颉的运算符设计还是比较符合习惯的:

let 和 = 甲 + 乙 // 甲加乙,符合习惯 let 差 = 甲 - 乙 // 甲减乙,符合习惯 let 积 = 甲 * 乙 // 甲乘乙,符合习惯 let 商 = 甲 / 乙 // 甲除以乙,符合习惯

这些中缀运算符(运算符在两个操作数中间)是全世界通用的,不管是中国人还是外国人,都是这样写的。这一点仓颉做得很好!

但是,在一些函数调用上,还是有改进空间。比如:

// 目前的写法 let 最大值 = max(甲, 乙) // 函数名在前 // 如果像中文一样 let 最大值 = 甲和乙的最大值 // 这样更符合中文习惯

当然,这在编程语言中很难实现,所以我们还是接受函数名在前的写法吧!

1.4 本课目标

今天我们要学习:

  1. 算术运算符(加减乘除)
  2. 比较运算符(大于小于等于)
  3. 逻辑运算符(并且、或者、非)
  4. 赋值运算符
  5. 做一个智能计算器

二、概念讲解

2.1 算术运算符——加减乘除

基本运算符
运算符含义例子结果
+5 + 38
-5 - 32
*5 * 315
/5 / 31(整数除法)
%取余5 % 32
代码示例
main() { let 甲: Int64 = 10 let 乙: Int64 = 3 println("${甲} + ${乙} = ${甲 + 乙}") // 10 + 3 = 13 println("${甲} - ${乙} = ${甲 - 乙}") // 10 - 3 = 7 println("${甲} * ${乙} = ${甲 * 乙}") // 10 * 3 = 30 println("${甲} / ${乙} = ${甲 / 乙}") // 10 / 3 = 3 println("${甲} % ${乙} = ${甲 % 乙}") // 10 % 3 = 1 }
注意整数除法

在计算机中,10 / 3不等于3.333...,而是等于3(只保留整数部分)。

如果想要小数结果,需要这样写:

let 结果: Float64 = Float64(10) / Float64(3) // 结果是3.333...

吐槽一下:这里又涉及到类型转换的问题。如果仓颉能像JavaScript那样自动类型转换,或者像C#那样有更简洁的语法,就更好了!

2.2 比较运算符——比大小

基本比较符
运算符含义例子结果
==等于5 == 5true
!=不等于5 != 3true
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 5true
<=小于等于3 <= 5true
代码示例
main() { let 小明的成绩: Int64 = 85 let 小红的成绩: Int64 = 92 println("小明的成绩:${小明的成绩}") println("小红的成绩:${小红的成绩}") println("") // 比较成绩 println("小明和小红成绩相等:${小明的成绩 == 小红的成绩}") println("小明成绩比小红高:${小明的成绩 > 小红的成绩}") println("小明成绩比小红低:${小明的成绩 < 小红的成绩}") println("小明及格了:${小明的成绩 >= 60}") }

2.3 逻辑运算符——并且、或者、非

逻辑运算符表
运算符含义例子结果
&&并且(AND)true && truetrue
||或者(OR)true || falsetrue
!非(NOT)!truefalse
生活中的逻辑

并且(&&):两个条件都要满足

  • 买手机:有钱并且有货才能买到
  • 考试优秀:语文>=90并且数学>=90

或者(||):满足一个条件就行

  • 周末活动:去公园或者看电影
  • 免费入场:儿童或者老人

非(!):反过来

  • 不是学生
  • 没有及格
代码示例
main() { let 有身份证: Bool = true let 年满18岁: Bool = true let 有驾照: Bool = false // 可以考驾照吗?(需要身份证并且年满18岁) let 可以考驾照: Bool = 有身份证 && 年满18岁 println("可以考驾照:${可以考驾照}") // 可以开车吗?(有驾照或者年满18岁有身份证) let 可以开车: Bool = 有驾照 || (年满18岁 && 有身份证) println("可以开车:${可以开车}") // 没有驾照 println("没有驾照:${!有驾照}") }

2.4 赋值运算符——快捷赋值

基本赋值
let 分数: Int64 = 100 // 把100赋给分数
复合赋值
运算符含义等价于
+=加后赋值a = a + b
-=减后赋值a = a - b
*=乘后赋值a = a * b
/=除后赋值a = a / b
%=取余后赋值a = a % b
代码示例
main() { var 分数: Int64 = 100 println("初始分数:${分数}") 分数 += 10 // 分数 = 分数 + 10 println("加10分后:${分数}") 分数 -= 5 // 分数 = 分数 - 5 println("扣5分后:${分数}") 分数 *= 2 // 分数 = 分数 * 2 println("翻倍后:${分数}") 分数 /= 2 // 分数 = 分数 / 2 println("减半后:${分数}") }

注意:使用复合赋值时,变量必须用var声明(可变),不能用let(不可变)。


三、动手实践

3.1 基础练习:简易计算器

// 简易计算器 main() { println("=== 简易计算器 ===") // 定义两个数 let 甲: Float64 = 15.5 let 乙: Float64 = 4.5 println("第一个数:${甲}") println("第二个数:${乙}") println("") // 各种运算 println("加法:${甲} + ${乙} = ${甲 + 乙}") println("减法:${甲} - ${乙} = ${甲 - 乙}") println("乘法:${甲} × ${乙} = ${甲 * 乙}") println("除法:${甲} ÷ ${乙} = ${甲 / 乙}") // 判断关系 println("") println("${甲} > ${乙}:${甲 > 乙}") println("${甲} == ${乙}:${甲 == 乙}") println("${甲} != ${乙}:${甲 != 乙}") }

3.2 进阶练习:成绩分析器

// 成绩分析器 main() { println("=== 成绩分析器 ===") // 三个学生的成绩 let 小明: Int64 = 85 let 小红: Int64 = 92 let 小刚: Int64 = 78 println("小明:${小明}分") println("小红:${小红}分") println("小刚:${小刚}分") println("") // 计算平均分 let 总分: Int64 = 小明 + 小红 + 小刚 let 平均分: Float64 = Float64(总分) / 3.0 println("平均分:${平均分}分") println("") // 找出最高分和最低分 var 最高分: Int64 = 小明 if (小红 > 最高分) { 最高分 = 小红 } if (小刚 > 最高分) { 最高分 = 小刚 } var 最低分: Int64 = 小明 if (小红 < 最低分) { 最低分 = 小红 } if (小刚 < 最低分) { 最低分 = 小刚 } println("最高分:${最高分}分") println("最低分:${最低分}分") println("") // 统计及格人数(>=60分) var 及格人数: Int64 = 0 if (小明 >= 60) { 及格人数 += 1 } if (小红 >= 60) { 及格人数 += 1 } if (小刚 >= 60) { 及格人数 += 1 } println("及格人数:${及格人数}人") // 统计优秀人数(>=90分) var 优秀人数: Int64 = 0 if (小红 >= 90) { 优秀人数 += 1 } // 其他人都没达到90分 println("优秀人数:${优秀人数}人") }

3.3 挑战练习:智能判断系统

// 智能判断系统 main() { println("=== 智能判断系统 ===") println("") // 场景1:判断是否可以看电影 let 年龄: Int64 = 16 let 有家长陪同: Bool = true let 电影分级: String = "PG-13" // 13岁以上可以观看 println("【电影院入场判断】") println("年龄:${年龄}岁") println("有家长陪同:${有家长陪同}") println("电影分级:${电影分级}") // PG-13电影:13岁以上可以单独看,13岁以下需要家长陪同 let 可以入场: Bool = (年龄 >= 13) || (有家长陪同) println("可以入场:${可以入场}") println("") // 场景2:判断是否可以免费乘车 let 是儿童: Bool = false // 6岁以下 let 是老人: Bool = false // 65岁以上 let 是学生: Bool = true let 有学生证: Bool = true println("【公交免费判断】") println("是儿童:${是儿童}") println("是老人:${是老人}") println("是学生:${是学生}") println("有学生证:${有学生证}") // 免费条件:儿童或老人,或学生有学生证 let 可以免费: Bool = 是儿童 || 是老人 || (是学生 && 有学生证) println("可以免费乘车:${可以免费}") println("") // 场景3:判断是否可以参加竞赛 let 数学成绩: Int64 = 88 let 英语成绩: Int64 = 92 let 有竞赛经验: Bool = false println("【竞赛资格判断】") println("数学成绩:${数学成绩}") println("英语成绩:${英语成绩}") println("有竞赛经验:${有竞赛经验}") // 参加条件:数学和英语都>=85,或者有竞赛经验 let 可以参加: Bool = (数学成绩 >= 85 && 英语成绩 >= 85) || 有竞赛经验 println("可以参加竞赛:${可以参加}") }

四、知识总结

4.1 核心概念回顾

  1. 算术运算符+-*/%
  2. 比较运算符==!=><>=<=
  3. 逻辑运算符&&(并且)、||(或者)、!(非)
  4. 赋值运算符=+=-=*=/=%=

4.2 关于语法设计的再思考

这一篇我们学习的运算符设计,仓颉做得还是不错的:

做得好的地方:

  • 中缀运算符符合国际惯例(a + b
  • 逻辑运算符使用符号(&&||)简洁明了
  • 比较运算符直观易懂

可以改进的地方:

如果仓颉能支持更中文化的运算符,就更好了:

// 设想中的中文运算符(仅供娱乐) let 和 = 甲 加 乙 let 差 = 甲 减 乙 let 并且 = 条件一 且 条件二 let 或者 = 条件一 或 条件二

当然,这在实际编程语言中不太现实,因为:

  1. 输入中文标点比较麻烦
  2. 与国际标准不兼容
  3. 代码会显得太长

所以,我们还是 happily 使用符号运算符吧!

4.3 关键代码速查

// 算术运算 let 和 = 甲 + 乙 let 差 = 甲 - 乙 let 积 = 甲 * 乙 let 商 = 甲 / 乙 let 余数 = 甲 % 乙 // 比较运算 let 相等 = 甲 == 乙 let 不等 = 甲 != 乙 let 大于 = 甲 > 乙 let 小于 = 甲 < 乙 // 逻辑运算 let 并且 = 条件一 && 条件二 let 或者 = 条件一 || 条件二 let 非 = !条件 // 复合赋值 var 数 = 10 数 += 5 // 数 = 15 数 -= 3 // 数 = 12 数 *= 2 // 数 = 24 数 /= 4 // 数 = 6

4.4 常见错误提醒

错误现象原因解决方法
整数除法没小数两个整数相除转换为Float64再除
逻辑判断错误运算符优先级使用括号明确优先级
赋值给let变量let不可变改用var声明
类型不匹配运算数类型不同统一类型后再运算

五、课后作业

5.1 巩固练习(必做)

练习1:BMI计算器

输入身高(米)和体重(公斤),计算BMI并判断体重状态。

练习2:闰年判断

输入年份,判断是否是闰年:

  • 能被4整除但不能被100整除,或者能被400整除

练习3:三角形判断

输入三条边长,判断:

  • 能否构成三角形(任意两边之和大于第三边)
  • 是什么类型的三角形(等边、等腰、直角、普通)

5.2 创意编程(选做)

创意1:简易计算器

实现一个支持加减乘除的计算器,可以连续运算。

创意2:猜数字游戏

程序随机生成一个1-100的数字,用户猜数字,程序提示"大了"或"小了"。

创意3:24点游戏

输入4个数字,判断是否能通过加减乘除得到24。

5.3 下篇预习

下一篇,我们将学习如果…那么——条件判断,让程序能够根据不同情况执行不同的代码。预习问题:

  1. 怎么让程序判断成绩是否及格?
  2. 怎么实现多条件判断?
  3. 怎么让程序选择执行不同的代码?

恭喜你完成了第3篇的学习!🎉

现在你已经掌握了仓颉的各种运算符。虽然运算符本身设计得不错,但在实际使用中,我们还是要注意类型转换的问题——这又让我们想到了类型后置的语法设计…

下节课,我们将学习条件判断,让程序变得更智能!

http://www.jsqmd.com/news/750053/

相关文章:

  • 3步解锁数字音乐自由:QMCDecode全面解析
  • 无锡黄金回收避坑指南:选福正美,不扣点不熔金 - 福正美黄金回收
  • 终极本地Cookie导出指南:Get cookies.txt LOCALLY完全教程
  • DownKyi哔哩下载姬:B站视频下载与处理的完整解决方案
  • 2026 南通上门黄金变现,福正美黄金奢饰品回收排名靠前 - 福正美黄金回收
  • Dell G15终极散热控制指南:如何用开源工具告别过热烦恼[特殊字符]
  • 深入/sys/kernel/debug:揭秘Linux内核动态打印(dynamic_debug)的工作原理与实现
  • 如何快速掌握Python通达信数据获取:面向量化新手的完整指南
  • 深度解析roop-unleashed:无训练AI人脸交换框架的架构创新与实战指南
  • 为什么4.8元付费降AI比免费工具效果好:付费免费技术差距极致数据反差深度解读
  • 完全掌握手柄映射:3步让任何游戏支持手柄操控的终极方案
  • 唤醒沉睡的Surface RT:3步解锁ARM设备的远程桌面潜能 [特殊字符]
  • Android性能优化实战:用Systrace揪出BufferQueue卡顿的元凶(附完整分析流程)
  • 避坑指南:STM32F051的ADC用TIM1触发时,DMA数据错位或采不到?
  • Python 爬虫进阶技巧:连接池复用减少网络开销
  • 3分钟零基础教程:DoL-Lyra整合包打造个性化游戏体验
  • 2026年广州广告公司制作TOP7权威排行榜,实战榜单为你全景解析! - 品牌推荐官方
  • 2026年成都资质代办指南:权威榜单推荐TOP7周到资质代办公司 - 品牌推荐官方
  • 从零部署Lumos:构建本地AI知识库的完整指南
  • 自己写的论文ai率检测时40%怎么办?2026年最近降AI率工具,一键降到个位数!
  • 魔兽争霸3优化终极指南:如何用WarcraftHelper彻底解决卡顿和限制问题
  • 开源AI协作平台Weam部署指南:整合LLM、智能体与RAG的团队解决方案
  • Legacy iOS Kit深度解析:iOS逆向工程与设备降级技术实现方案
  • 智能升级:利用快马AI模型为n8n工作流注入自动摘要与情感分析能力
  • WarcraftHelper:3大痛点5分钟解决,让魔兽争霸III在现代电脑上焕发新生
  • 数学建模竞赛‘安全区’实操指南:从查重工具选择到论文降重技巧(附避坑清单)
  • 微信防撤回插件WeChatIntercept:让重要消息不再消失的终极指南
  • 备孕期补叶酸对胎儿发育作用实测
  • 利用快马平台快速构建n8n邮件自动化处理原型
  • XUnity AutoTranslator:打破语言壁垒,让Unity游戏说你的语言