華為倉頡編程語言實踐體驗

華為倉頡編程語言實踐體驗

目前華為倉頡編程語言因為其推出時間較短,生態系統不完善。官網資料權威,但比較龐大難懂。快速實驗入門,是學習一門編程語言的法寶。網上靠譜的資料稀少,特此撰文介紹,幫助初學者減少挫折感,樹立學習信心。

概述

我是在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
英文地址,請注明出處:http://en.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;發現不同的曝光時間可以拍出不同明顯程度…