第4篇:条件判断——让程序做选择

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


一、开篇引入

1.1 生活中的"选择"

生活中处处都有"如果…那么…":

  • 如果下雨,那么带伞
  • 如果到18岁,那么可以考驾照
  • 如果成绩>=60,那么及格
  • 如果登录了,那么显示用户名

1.2 程序中的"选择"

程序也需要根据不同情况做出选择:

  • 用户输入密码正确 → 进入系统
  • 用户输入密码错误 → 提示重新输入
  • 成绩>=60 → 显示"及格"
  • 成绩<60 → 显示"不及格"

1.3 关于条件语句语法的思考

在学习条件判断之前,我们再聊聊仓颉的语法设计。

仓颉的条件语句是:

if (条件) {
    // 代码
}

这个设计其实挺好的,if是国际上通用的关键字,大家都认识。

但是,如果我们真的要做一款"纯中文"的编程语言,是不是可以考虑:

// 设想中的纯中文语法
如果 (条件) {
    // 代码
} 否则如果 (另一个条件) {
    // 代码
} 否则 {
    // 代码
}

或者像易语言那样:

// 设想中的中文语法
如果 (成绩 >= 90) {
    显示("优秀")
} 否则如果 (成绩 >= 60) {
    显示("及格")
} 否则 {
    显示("不及格")
}

当然,使用ifelse等国际通用关键字也有好处:

  1. 与国际接轨,学会仓颉后学其他语言容易
  2. 关键字简短,输入方便
  3. 代码看起来更"专业"

所以,这是一个权衡的问题。仓颉选择了国际化路线,我们也可以接受!

1.4 本课目标

今天我们要学习:

  1. if语句——单条件判断
  2. if-else语句——二选一
  3. if-else if-else语句——多选一
  4. 嵌套条件判断
  5. 做一个智能评分系统

二、概念讲解

2.1 if语句——最简单的判断

基本语法
if (条件) {
    // 条件为true时执行的代码
}
生活例子
如果 (外面在下雨) {
    带伞出门
}
代码示例
main() {
    let 成绩: Int64 = 85
    
    if (成绩 >= 60) {
        println("恭喜你,及格了!")
    }
    
    println("程序结束")
}

执行流程:

  1. 检查成绩 >= 60是否为true
  2. 如果是true,执行println("恭喜你,及格了!")
  3. 继续执行后面的代码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 核心概念回顾

  1. if语句:单条件判断
  2. if-else语句:二选一
  3. if-else if-else语句:多选一
  4. 嵌套条件:条件里面还有条件
  5. 三目运算符:简洁的条件表达式

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 : 值2

4.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 下篇预习

下一篇,我们将学习重复做——循环语句,让程序能够重复执行任务。预习问题:

  1. 怎么让程序重复执行10次?
  2. 怎么遍历一个列表中的所有元素?
  3. 怎么实现"当条件满足时一直做"?

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

现在你已经掌握了条件判断,可以让程序根据不同情况做出选择了。虽然if-else是国际通用的关键字,但配合中文变量名,代码依然清晰易读!

下节课,我们将学习循环语句,让程序能够重复执行任务!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐