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

华为仓颉编程语言实践体验

华为仓颉编程语言实践体验

目前华为仓颉编程语言因为其推出时间较短,生态系统不完善。官网资料权威,但比较庞大难懂。快速实验入门,是学习一门编程语言的法宝。网上靠谱的资料稀少,特此撰文介绍,帮助初学者减少挫折感,树立学习信心。

概述

我是在windows10中,使用目前最新的实验环境:CodeArts IDE for Cangjie 3.4.1和2025 年 7 月推出首个长期支持版本(LTS 1.0.0)。

华为仓颉编程语言简介和实验坏境搭建 可见https://blog.csdn.net/cnds123/article/details/149467143

CodeArts IDE for Cangjie新建工程(Project)步骤

CodeArts IDE 提供了一个 Cangjie 项目向导,帮助您更轻松地创建新项目并配置环境。使用步骤:

步骤1、 在主菜单中,选择文件 > 新建 > 工程(Project) 。

步骤2、 在打开的“新建工程”对话框中,从左侧列表选择“Cangjie”,填入项目参数。参见下图:

    (1)设置项目名称和路径。新建工程的名称默认为包名。

    (2)在“产物类型”的下拉框中选择“executable”、“static”、 “dynamic” 选项,生成不同的产物,使用默认executable即可。

步骤3、 单击“创建”按钮,将自动产生一段简单的示例代码。

步骤4、把 main.cj 内容替换为你的代码。注意保留顶端的package语句。CodeArts IDE for Cangjie的包机制通常与项目的目录结构存在隐性关联(类似 Java等语言),IDE 自动生成的 package 包名 (如package mydemo)对应项目中 demo 目录下的代码。

【CodeArts IDE for Cangjie其它常用操作简介

若想关闭CodeArts IDE for Cangjie已经启动的项目(Project),在主菜单中,选择文件 >关闭项目。

打开已关闭项目(Project),在主菜单中,选择文件 >打开项目

前面提到,新建工程(Project),在主菜单中,选择文件 > 新建 > 工程(Project)。

注:细心的读者可能发现中文这些菜单项用语有点不一致。项目、工程是一个意思,英文是Project。

顺便提示:快速缩进(Indent)和反缩进(Unindent)代码块的操作

与主流 IDE 类似

缩进代码块:

    先选中需要缩进的代码块(可通过鼠标拖动或快捷键 Shift+↑/↓ 选择)

    按下 Tab 键,选中的代码块会整体向右缩进一个层级

反缩进代码块:

    同样先选中需要反缩进的代码块

    按下 Shift+Tab 组合键,选中的代码块会整体向左减少一个缩进层级

特别提示:华为仓颉编程语言是大小写敏感的。

实验1、读入一个数,判断其奇偶性

新建一个名为Experiment_1 的工程,在主菜单中,选择文件 > 新建 > 工程(Project)

用下面的实验代码,替换原来自动生成的main.cj 内容

import std.convert.*
main() {print("请输入一个整数:")var str: String = readln()var n =  Int64.parse(str)// 判断奇偶if (n % 2 == 0) {println("${n} 是偶数")} else {println("${n} 是奇数")}return 0
}

参见下图:

图示中,在下部的“终端”部分,为“请输入一个整数”提供一个数值9,程序判断9是奇数。

上面的实验代码,问题在于如果用户输入非数字将出错中断运行,下面是(使用try异常处理)改进:

import std.convert.*
import std.io.*main(){print("请输入一个整数:")while (true) {var str: String = readln()if (str.isEmpty()) {print("输入为空,请重新输入一个整数:")continue}// 使用 try-catch 捕获 parse 可能抛出的异常try {var n =  Int64.parse(str)if( n % 2 == 0) {println("${n} 是偶数")} else {println("${n} 是奇数")}break} catch(e:IllegalArgumentException){print("输入非法,请输入一个有效的整数:")}}return 0
}

实验2、生成1~100整数的代码

新建一个名为Experiment_2 的工程,实验过程参见实验1,下面仅给出实验代码:

import std.random.*main() {// 先拿到 Int8 范围内的随机数let n: Int8 = Random().nextInt8()// 映射到 1~100:// 1. n % 100 得到 0~99// 2. +1 得到 1~100let number: Int8 = (n % 100 + 100) % 100 + 1     // 两次 %100 保证非负println(number)
}

实验3、猜数游戏

一个使用仓颉编程语言编写的猜数字(100 以内)游戏程序。

新建一个名为Experiment_3 的工程,实验过程参见实验1,下面仅给出实验代码:

import std.convert.*
import std.io.*
import std.random.*main() {// 输出游戏欢迎信息println("欢迎来到猜数字游戏!")println("我已经想好了一个1到100之间的整数。")println("请你猜一猜这个数字是多少?")// 先拿到 Int8 范围内的随机数let n: Int8 = Random().nextInt8()// 映射到 1~100let target: Int8 = (n % 100 + 100) % 100 + 1     // 两次 %100 保证非负// 注释掉调试输出,正式游戏不显示答案// println(target)var guess: Int8 = 0  // 声明猜测变量,扩大作用域while (true) {// 提示用户输入猜测的数字,合并重复提示print("请输入你的猜测(1-100):")var str: String = readln()if (str.isEmpty()) {println("输入为空,请重新输入一个整数:")continue}// 使用 try-catch 捕获 parse 可能抛出的异常try {guess =  Int8.parse(str)// 检查范围if (guess >= 1 && guess <= 100) {break  // 输入有效,退出输入循环} else {println("请输入1到100之间的数字:")}} catch(e:IllegalArgumentException){println("输入非法,请输入一个有效的整数:")}}// 主游戏循环,每次猜测后重新获取输入while (true) {if (guess < target) {println("猜小了!再试试更大的数字。")} else if (guess > target) {println("猜大了!再试试更小的数字。")} else {println("恭喜你猜对了!")break}// 重新获取用户输入print("请再次输入你的猜测(1-100):")var str: String = readln()try {guess = Int8.parse(str)} catch(e:IllegalArgumentException) {println("输入非法,已自动使用上一次猜测值,请输入有效整数:")}}        println("游戏结束,谢谢参与!")
}

改进

添加有猜测计数,记录你几次才对的,源码如下:

package demo2import std.convert.*
import std.io.*
import std.random.*main() {// 输出游戏欢迎信息println("欢迎来到猜数字游戏!")println("我已经想好了一个1到100之间的整数。")println("请你猜一猜这个数字是多少?")// 生成1~100的随机数let n: Int8 = Random().nextInt8()let target: Int8 = (n % 100 + 100) % 100 + 1     // 映射到1~100var guess: Int8 = 0  var guessCount: Int = 0  // 新增:猜测次数计数器// 第一次输入并验证while (true) {print("请输入你的猜测(1-100):")var str: String = readln()if (str.isEmpty()) {println("输入为空,请重新输入一个整数:")continue}try {guess =  Int8.parse(str)if (guess >= 1 && guess <= 100) {guessCount += 1  // 新增:有效猜测,计数+1break} else {println("请输入1到100之间的数字:")}} catch(e:IllegalArgumentException){println("输入非法,请输入一个有效的整数:")}}// 主游戏循环while (true) {if (guess < target) {println("猜小了!再试试更大的数字。")} else if (guess > target) {println("猜大了!再试试更小的数字。")} else {// 新增:显示猜测次数println("恭喜你猜对了!")println("你一共猜了 ${guessCount} 次")break}// 重新输入并计数print("请再次输入你的猜测(1-100):")var str: String = readln()try {guess = Int8.parse(str)if (guess >= 1 && guess <= 100) {guessCount += 1  // 新增:有效猜测,计数+1} else {println("请输入1到100之间的数字,本次输入不计数:")}} catch(e:IllegalArgumentException) {println("输入非法,本次输入不计数,请输入有效整数:")}}        println("游戏结束,谢谢参与!")
}

http://www.dtcms.com/a/294607.html

相关文章:

  • 基于Springboot的中药商城管理系统/基于javaweb的中药材销售系统
  • 海外短剧系统开发:技术架构与市场机遇深度解析
  • 华为7月23日机考真题
  • 华为高频算法题:最长连续递增子序列(Longest Continuous Increasing Subsequence)
  • 【JVM】从 JVM 整体说明 JVM 运行的完整流程
  • Redis MCP 安装与配置完整指南
  • 83、设置有人DTU设备USR-M100采集传感器数据,然后上传阿里云服务
  • 卷积神经网络:模型评估标准
  • Qt容器类:QList、QMap等的高效使用
  • 2025年7月份实时最新获取地图边界数据方法,省市区县街道多级联动【文末附实时geoJson数据下载】
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十一课——车牌识别的FPGA实现(3)车牌字符分割预处理
  • 从零开始学习Dify-Excel数据可视化(四)
  • PHP面向对象高级应用:依赖注入、服务容器与PSR标准实现
  • STL学习(四、队列和堆栈)
  • CSP-J系列【2023】P9751 [CSP-J 2023] 旅游巴士题解
  • 变频器实习DAY12
  • 接入海康设备mark全是false解决方案
  • Elasticsearch整合:Repository+RestClient双模式查询优化
  • 【杂谈】-代理协议:重塑AI协作新生态,开启智能互联新时代
  • 开闭原则在C++中的实现
  • InfluxDB HTTP API 接口调用详解(二)
  • [HarmonyOS] 鸿蒙LiteOS-A内核深度解析 —— 面向 IoT 与智能终端的“小而强大”内核
  • 算法第27天|贪心算法:合并区间 、单调递增的数字
  • 面试实战,问题七,Object类中包含哪些常用方法及其作用,怎么回答
  • biji 1
  • 开源 Arkts 鸿蒙应用 开发(十)通讯--Http数据传输
  • RAG深入理解和简易实现
  • Linux基础服务(Crontab和NFS)
  • 解决报错:ModuleNotFoundError: No module named ‘_pafprocess‘
  • 测试左移方法论