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

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

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

概述

我是在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.pswp.cn/news/916170.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv11实战,使用YOLOv11训练自己的数据集和推理(附YOLOv11网络结构图)

2024年计算机视觉领域的颠覆性突破,YOLOv11以22%的参数量减少和0.3%的mAP提升重新定义实时目标检测的边界 本文将手把手带你完成YOLOv11的全流程实战,包含环境配置、数据准备、模型训练、推理部署及创新优化方案,并深度解析其网络架构设计思想。 一、YOLOv11核心创新解析 …

macOS xcode打包ios测试ipa应用包

可以参考&#xff1a; https://blog.csdn.net/sinat_34104446/article/details/133684756 过程中遇到很多稀奇古怪的报错&#xff0c;基本重启电脑即可解决。。。在我按照上面的步骤申请并导入新证书后&#xff0c;还遇到了一个问题&#xff1a;解决办法&#xff1a; https://b…

STM32基础知识学习笔记:ICODE、DCODE、DMA等常见名词的解释

基于AI生成内容。 ICODEICODE&#xff1a;指令总线&#xff08;Instruction Bus&#xff09; 主要用于处理 CPU 对程序指令的读取操作。它是 STM32 存储架构中重要的组成部分&#xff0c;与数据总线&#xff08;DCODE&#xff09;、系统总线&#xff08;System Bus&#xff09;…

谁将统治AI游戏时代?腾讯、网易、米哈游技术暗战

游戏行业的“产能天花板”正被AI技术轰然击穿。腾讯、网易、米哈游……所有的游戏厂商都在押注AI&#xff0c;腾讯混元发布混元游戏视觉生成平台&#xff0c;分钟级生成高精度游戏角色&#xff1b;网易《蛋仔派对》借AI实现UGC创作平民化&#xff1b;米哈游新作更以实时多模态对…

基于springboot的工商局商家管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

ABP VNext + Razor 邮件模板:动态、多租户隔离、可版本化的邮件与通知系统

&#x1f680; ABP VNext Razor 邮件模板&#xff1a;动态、多租户隔离、可版本化的邮件与通知系统 &#x1f4da; 目录&#x1f680; ABP VNext Razor 邮件模板&#xff1a;动态、多租户隔离、可版本化的邮件与通知系统&#x1f31f; 一、TL;DR&#x1f4c8; 二、系统流程图…

疯狂星期四第19天运营日记

网站运营第19天&#xff0c;点击观站&#xff1a; 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 今日访问量 今日访问量42&#xff0c;疯狂之后的冷静&#xff0c;落差太大~~ 今日搜索引擎收录情况 必应仍然是24条记录&#xff0c;无变化 百度0收…

康养休闲旅游服务虚拟仿真实训室:赋能人才培养的创新路径

在康养休闲旅游行业数字化转型与职业教育改革的双重驱动下&#xff0c;康养休闲旅游服务虚拟仿真实训室已成为连接课堂教学与岗位实践的关键枢纽。它通过虚拟仿真技术重构康养服务场景&#xff0c;为学生打造沉浸式实践平台&#xff0c;在人才培养模式创新中发挥着不可替代的作…

python办自动化--读取邮箱中特定的邮件,并下载特定的附件

系列文章目录 python办公自动化–数据可视化&#xff08;pandasmatplotlib&#xff09;–生成条形图和饼状图 python办公自动化–数据可视化&#xff08;pandasmatplotlib&#xff09;–生成折线图 python办公自动化–数据可视化&#xff08;pandas读取excel文件&#xff0c;m…

清理DNS缓存

Cloudflarehttps://1.1.1.1/purge-cacheGooglehttps://dns.google/cacheOpenDNShttps://cachecheck.opendns.comLinux DNS缓存sudo systemd-resolve --flush-caches 或 sudo /etc/init.d/nscd restartWindows DNS缓存ipconfig /flushdnsmacOS DNS缓存sudo dscacheutil -flushca…

用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)

用 Python 写你的第一个爬虫&#xff1a;小白也能轻松搞定数据抓取&#xff08;超详细包含最新所有Python爬虫库的教程&#xff09; 摘要 本文是一篇面向爬虫爱好者的超详细 Python 爬虫入门教程&#xff0c;涵盖了从基础到进阶的所有关键技术点&#xff1a;使用 Requests 与…

openmv识别数字

Lenet是一种卷积识别网络,可以用来识别打印的&#xff0c;或者是手写的数字利用NCC的模板匹配算法来进行数字识别&#xff0c;模板匹配需要我们事先保存需要匹配的数字以及字母的模板图片,模板匹配对于模板的大小和角度&#xff0c;有一定的要求如果数字的大小和角度有所变换&a…

一款功能全面的文体场所预约小程序

大家好👋 ,我是 阿问学长!专注于分享优质开源项目解析、计算机学习资料推荐,并为同学们提供毕业设计项目指导支持,欢迎关注交流!🚀 项目概述 随着全民健身的普及,各地新建了大批体育、健身、文化娱乐场所,中小学校园的运动设施也开始对市民开放。为了合理安排主办…

PyTorch中实现早停机制(EarlyStopping)附代码

1. 核心目的 当模型在验证集上的性能不再提升时&#xff0c;提前终止训练防止过拟合&#xff0c;节省计算资源 2. 实现方法 监控验证集指标&#xff08;如损失、准确率&#xff09;&#xff0c;设置耐心值&#xff08;Patience&#xff09; 3. 代码&#xff1a; class EarlySto…

Nacos-服务注册,服务发现(一)

nacos快速入手 Nacos是Spring Cloud Alibaba的组件, Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服 务发现规范. 因此使⽤Nacos和使⽤Eureka对于微服务来说&#xff0c;并没有太⼤区别. 主要差异在于&#xff1a; Eureka需要⾃⼰搭建⼀个服务, Nacos不⽤⾃⼰搭…

单片机(STM32-ADC模数转换器)

一、基础知识1. 模拟信号&#xff08;Analog Signal&#xff09;定义&#xff1a;模拟信号是连续变化的信号&#xff0c;可以取任意数值。特点&#xff1a;幅值和时间都是连续的&#xff0c;没有“跳变”。举例&#xff1a;声音&#xff08;麦克风采集到的电压&#xff09;温度…

side.cpp - OpenExo

side.cpp构造函数源代码run_side - 核心read_data()源代码FSR压力传感器读取与赋值步态事件检测&#xff1a;落地&#xff08;ground_strike&#xff09;步态周期自适应&#xff1a;期望步长更新Toe-Off/Toe-On事件检测与站立/摆动窗口更新步态百分比进度估算FSR阈值动态读取&a…

基于Java+MySQL实现(Web)文件共享管理系统(仿照百度文库)

文件共享管理系统的设计与实现摘要&#xff1a;本文件共享管理系统解决了用户在搜索文件不需要下载文件到本地硬盘后才能查看文件的详细内容的弊端&#xff1b;解决用户在搜索关键字不明确条件下无法搜索到自己需要的文件弊端&#xff1b;解决了系统用户并发量增加后服务器宕机…

go语言基础教程:1. Go 下载安装和设置

1. Go 下载安装和设置1. 安装Go 官网下载安装即可&#xff0c;注意要记住安装的位置&#xff0c;例如D:\Go cmd输入go 或者go env 会输出各种信息&#xff0c;代表安装成功 2. hello go &#xff08;1&#xff09;编写 hello.go go是以文件夹为最小单位管理程序的&#xff0c…

使用相机不同曝光时间测试灯光闪烁频率及Ai解释

1.背景坐地铁上&#xff0c;拨弄着手机拍照中的专业模式&#xff0c;偶然发现拍出了条纹&#xff0c;怀疑是灯光的缘故&#xff0c;但是随后在家里的LED等下就拍不出类似的效果了。好奇心❤让我又尝试多了解了一点和不断尝试&#xff0c;发现不同的曝光时间可以拍出不同明显程度…