第4篇:条件判断——让程序做选择
**作者:**中文编程倡导者—— 李金雨
联系方式:wbtm2718@qq.com
**目标读者:**编程入门(零基础)
核心理念:使用华为仓颉原生中文编程,体验真正的国产编程语言
一、开篇引入
1.1 生活中的"选择"
生活中处处都有"如果…那么…":
- 如果下雨,那么带伞
- 如果到18岁,那么可以考驾照
- 如果成绩>=60,那么及格
- 如果登录了,那么显示用户名
1.2 程序中的"选择"
程序也需要根据不同情况做出选择:
- 用户输入密码正确 → 进入系统
- 用户输入密码错误 → 提示重新输入
- 成绩>=60 → 显示"及格"
- 成绩<60 → 显示"不及格"
1.3 关于条件语句语法的思考
在学习条件判断之前,我们再聊聊仓颉的语法设计。
仓颉的条件语句是:
if (条件) { // 代码 }这个设计其实挺好的,if是国际上通用的关键字,大家都认识。
但是,如果我们真的要做一款"纯中文"的编程语言,是不是可以考虑:
// 设想中的纯中文语法 如果 (条件) { // 代码 } 否则如果 (另一个条件) { // 代码 } 否则 { // 代码 }或者像易语言那样:
// 设想中的中文语法 如果 (成绩 >= 90) { 显示("优秀") } 否则如果 (成绩 >= 60) { 显示("及格") } 否则 { 显示("不及格") }当然,使用if、else等国际通用关键字也有好处:
- 与国际接轨,学会仓颉后学其他语言容易
- 关键字简短,输入方便
- 代码看起来更"专业"
所以,这是一个权衡的问题。仓颉选择了国际化路线,我们也可以接受!
1.4 本课目标
今天我们要学习:
if语句——单条件判断if-else语句——二选一if-else if-else语句——多选一- 嵌套条件判断
- 做一个智能评分系统
二、概念讲解
2.1 if语句——最简单的判断
基本语法
if (条件) { // 条件为true时执行的代码 }生活例子
如果 (外面在下雨) { 带伞出门 }代码示例
main() { let 成绩: Int64 = 85 if (成绩 >= 60) { println("恭喜你,及格了!") } println("程序结束") }执行流程:
- 检查
成绩 >= 60是否为true - 如果是true,执行
println("恭喜你,及格了!") - 继续执行后面的代码
println("程序结束")
2.2 if-else语句——二选一
基本语法
if (条件) { // 条件为true时执行 } else { // 条件为false时执行 }生活例子
如果 (我有带伞) { 走路去上学 } 否则 { 坐公交车去上学 }代码示例
main() { let 成绩: Int64 = 55 if (成绩 >= 60) { println("恭喜你,及格了!") } else { println("很遗憾,不及格,要加油哦!") } }2.3 if-else if-else语句——多选一
基本语法
if (条件1) { // 条件1为true时执行 } else if (条件2) { // 条件2为true时执行 } else if (条件3) { // 条件3为true时执行 } else { // 以上条件都不满足时执行 }代码示例:成绩等级评定
main() { let 成绩: Int64 = 85 if (成绩 >= 90) { println("等级:优秀(A)") println("评价:太棒了!") } else if (成绩 >= 80) { println("等级:良好(B)") println("评价:很不错!") } else if (成绩 >= 70) { println("等级:中等(C)") println("评价:还可以!") } else if (成绩 >= 60) { println("等级:及格(D)") println("评价:勉强过关!") } else { println("等级:不及格(F)") println("评价:需要努力!") } }2.4 嵌套条件判断
什么是嵌套?
条件判断里面还有条件判断,就像俄罗斯套娃。
代码示例:会员等级判断
main() { let 消费金额: Float64 = 1500.0 let 注册时长: Int64 = 2 // 年 let 是否VIP: Bool = true if (是否VIP) { println("您是VIP会员") if (消费金额 >= 10000) { println("等级:钻石会员") } else if (消费金额 >= 5000) { println("等级:白金会员") } else if (消费金额 >= 1000) { println("等级:黄金会员") } else { println("等级:普通VIP") } } else { println("您是普通用户") if (注册时长 >= 1) { println("可以升级为VIP") } else { println("再使用一段时间可以升级为VIP") } } }2.5 条件表达式(三目运算符)
基本语法
let 结果 = 条件 ? 值1 : 值2如果条件为true,结果是值1;否则结果是值2。
代码示例
main() { let 成绩: Int64 = 75 // 判断及格与否 let 状态: String = 成绩 >= 60 ? "及格" : "不及格" println("状态:${状态}") // 判断年龄阶段 let 年龄: Int64 = 25 let 阶段: String = 年龄 < 18 ? "未成年" : "成年" println("阶段:${阶段}") }再次吐槽语法设计:
这里的?:三目运算符是国际通用的,但如果我们用中文设计,可能会是:
// 设想中的中文语法 let 状态 = 如果 (成绩 >= 60) 那么 "及格" 否则 "不及格"这样读起来就像是完整的中文句子,更符合我们的语言习惯!
三、动手实践
3.1 基础练习:智能评分系统
// 智能评分系统 main() { println("=== 智能评分系统 ===") println("") // 定义成绩 let 语文: Int64 = 88 let 数学: Int64 = 92 let 英语: Int64 = 85 println("语文:${语文}分") println("数学:${数学}分") println("英语:${英语}分") println("") // 计算总分和平均分 let 总分: Int64 = 语文 + 数学 + 英语 let 平均分: Float64 = Float64(总分) / 3.0 println("总分:${总分}分") println("平均分:${平均分}分") println("") // 判断总分等级 println("【总分评价】") if (总分 >= 270) { println("评价:优秀!") println("奖励:免作业一周") } else if (总分 >= 240) { println("评价:良好!") println("奖励:免作业一天") } else if (总分 >= 210) { println("评价:中等") println("奖励:口头表扬") } else if (总分 >= 180) { println("评价:及格") println("建议:需要努力") } else { println("评价:不及格") println("建议:请家长") } println("") // 判断是否有偏科 println("【偏科分析】") let 最高分: Int64 = max(语文, max(数学, 英语)) let 最低分: Int64 = min(语文, min(数学, 英语)) let 分差: Int64 = 最高分 - 最低分 if (分差 > 20) { println("警告:偏科严重!") println("最高分与最低分相差${分差}分") if (语文 == 最低分) { println("建议:加强语文学习") } if (数学 == 最低分) { println("建议:加强数学学习") } if (英语 == 最低分) { println("建议:加强英语学习") } } else { println("很好:各科发展均衡") } println("") // 判断是否可以评优 println("【评优资格】") let 全部及格: Bool = 语文 >= 60 && 数学 >= 60 && 英语 >= 60 let 有优秀: Bool = 语文 >= 90 || 数学 >= 90 || 英语 >= 90 if (全部及格 && 有优秀) { println("可以参评:三好学生") } else if (全部及格) { println("可以参评:进步学生") } else { println("暂不符合评优条件") } } // 辅助函数 func max(a: Int64, b: Int64): Int64 { if (a > b) { return a } else { return b } } func min(a: Int64, b: Int64): Int64 { if (a < b) { return a } else { return b } }3.2 进阶练习:智能日历
// 智能日历 main() { println("=== 智能日历 ===") println("") // 定义日期 let 年: Int64 = 2024 let 月: Int64 = 6 let 日: Int64 = 15 println("日期:${年}年${月}月${日}日") println("") // 判断季节 println("【季节判断】") if (月 >= 3 && 月 <= 5) { println("季节:春季") println("建议:踏青赏花") } else if (月 >= 6 && 月 <= 8) { println("季节:夏季") println("建议:注意防暑") } else if (月 >= 9 && 月 <= 11) { println("季节:秋季") println("建议:秋高气爽,适合运动") } else { println("季节:冬季") println("建议:注意保暖") } println("") // 判断节假日 println("【节假日判断】") if (月 == 1 && 日 == 1) { println("节日:元旦") } else if (月 == 5 && 日 == 1) { println("节日:劳动节") } else if (月 == 6 && 日 == 1) { println("节日:儿童节") } else if (月 == 10 && 日 == 1) { println("节日:国庆节") } else if (月 == 12 && 日 == 25) { println("节日:圣诞节") } else { println("普通日期") } println("") // 判断是否为周末(简化版) println("【周末判断】") // 假设2024年6月15日是星期六 let 是周末: Bool = true if (是周末) { println("今天是周末,好好休息!") } else { println("今天是工作日,认真学习!") } }3.3 挑战练习:猜拳游戏
// 猜拳游戏(人机对战) import std.random.* main() { println("=== 猜拳游戏 ===") println("规则:0-石头,1-剪刀,2-布") println("") // 电脑随机出拳 let 电脑出拳: Int64 = randomInt(0, 3) // 0, 1, 2 // 玩家出拳(这里模拟玩家出石头) let 玩家出拳: Int64 = 0 // 玩家出石头 // 显示双方出拳 println("你出:${出拳名称(玩家出拳)}") println("电脑出:${出拳名称(电脑出拳)}") println("") // 判断胜负 if (玩家出拳 == 电脑出拳) { println("结果:平局!") } else if ((玩家出拳 == 0 && 电脑出拳 == 1) || // 石头胜剪刀 (玩家出拳 == 1 && 电脑出拳 == 2) || // 剪刀胜布 (玩家出拳 == 2 && 电脑出拳 == 0)) { // 布胜石头 println("结果:你赢了!") } else { println("结果:你输了!") } } func 出拳名称(出拳: Int64): String { if (出拳 == 0) { return "石头" } else if (出拳 == 1) { return "剪刀" } else { return "布" } }四、知识总结
4.1 核心概念回顾
- if语句:单条件判断
- if-else语句:二选一
- if-else if-else语句:多选一
- 嵌套条件:条件里面还有条件
- 三目运算符:简洁的条件表达式
4.2 关于语法设计的总结
仓颉的条件语句设计采用了国际通用的if-else关键字,这是一个比较务实的选择:
优点:
- 与国际接轨,易于学习其他语言
- 关键字简短,输入方便
- 代码可读性好
如果我们设计纯中文编程语言:
// 设想中的纯中文语法 如果 (成绩 >= 90) { 显示("优秀") } 否则如果 (成绩 >= 60) { 显示("及格") } 否则 { 显示("不及格") }这样的语法更符合中文习惯,但可能不利于国际化。
仓颉的选择是合理的:在保留中文标识符优势的同时,使用国际通用的控制流关键字,兼顾了本土化和国际化。
4.3 关键代码速查
// 单条件 if (条件) { // 代码 } // 二选一 if (条件) { // 条件为true } else { // 条件为false } // 多选一 if (条件1) { // 条件1为true } else if (条件2) { // 条件2为true } else { // 都不满足 } // 三目运算符 let 结果 = 条件 ? 值1 : 值24.4 常见错误提醒
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 条件不生效 | 用了=而不是== | 比较用==,赋值用= |
| 所有条件都执行 | 用了多个if而不是else if | 用else if连接 |
| 逻辑错误 | 条件写错 | 检查条件表达式 |
| 嵌套太深 | 条件太多 | 考虑简化逻辑 |
五、课后作业
5.1 巩固练习(必做)
练习1:身体质量指数(BMI)计算器
输入身高和体重,计算BMI并给出健康建议:
- BMI < 18.5:偏瘦
- 18.5 <= BMI < 24:正常
- 24 <= BMI < 28:偏胖
- BMI >= 28:肥胖
练习2:出租车计费系统
计费规则:
- 起步价:10元(3公里内)
- 3-10公里:2元/公里
- 10公里以上:3元/公里
- 夜间(23:00-5:00):加价20%
练习3:日期有效性检查
输入年、月、日,判断是否为有效日期:
- 月份是否在1-12之间
- 日期是否在合理范围内(考虑闰年)
5.2 创意编程(选做)
创意1:简易计算器
实现支持加减乘除的计算器,可以连续运算。
创意2:猜数字游戏
程序随机生成1-100的数字,用户猜数字,程序提示"大了"或"小了",记录猜测次数。
创意3:24点游戏
输入4个数字,判断是否能通过加减乘除得到24。
5.3 下篇预习
下一篇,我们将学习重复做——循环语句,让程序能够重复执行任务。预习问题:
- 怎么让程序重复执行10次?
- 怎么遍历一个列表中的所有元素?
- 怎么实现"当条件满足时一直做"?
恭喜你完成了第4篇的学习!🎉
现在你已经掌握了条件判断,可以让程序根据不同情况做出选择了。虽然if-else是国际通用的关键字,但配合中文变量名,代码依然清晰易读!
下节课,我们将学习循环语句,让程序能够重复执行任务!