青少年編程與數學 02-019 Rust 編程基礎 02課題、開始編程

青少年編程與數學 02-019 Rust 編程基礎 02課題、開始編程

  • 一、游戲規則
  • 二、實現步驟
    • 1. 創建項目
    • 2. 編寫代碼
    • 3. 添加依賴
    • 4. 運行程序
  • 三、代碼解析
  • 四、println! 的用法
    • 基本用法
    • 使用占位符
    • 示例
    • 控制輸出寬度和精度
      • 示例
    • 輸出多個變量
      • 示例
    • 注意事項
    • 小結
  • 五、管理多個項目
    • 1. 創建 Workspace
    • 2. 創建成員項目
      • 使用命令行創建項目
      • 在 RustRover 中創建項目
    • 3. 配置 Cargo.toml
    • 4. 添加依賴
    • 5. 構建和運行項目
      • 構建所有項目
      • 構建單個項目
      • 運行項目
    • 6. 在 RustRover 中管理項目
      • 查看項目結構
      • 編輯代碼
      • 調試項目
    • 7. 提交到版本控制
      • 初始化 Git 倉庫
      • 添加文件并提交
    • 項目管理小結
  • 總結:學習要點

**摘要:**編寫一個猜數游戲是一個非常棒的方式來熟悉 Rust 編程語言。這個項目可以幫助你了解 Rust 的基本語法、控制流、輸入輸出以及隨機數生成等核心概念。這是一個簡單的猜數游戲的實現步驟和代碼示例。

**關鍵詞:**代碼示例、Hello, world!


一、游戲規則

  1. 程序隨機生成一個 1 到 100 之間的整數。
  2. 用戶嘗試猜測這個數字。
  3. 程序根據用戶的輸入給出提示:
    • 如果用戶猜的數字太小,提示“Too small!”。
    • 如果用戶猜的數字太大,提示“Too big!”。
    • 如果用戶猜對了,提示“Congratulations! You got it!”并結束程序。
  4. 用戶可以不斷猜測,直到猜對為止。

二、實現步驟

1. 創建項目

首先,通過命令行工具,使用 Cargo 創建一個新的 Rust 項目:

cargo new guess_number_game
cd guess_number_game

2. 編寫代碼

使用RustRover打開新建的項目目錄。

打開 src/main.rs 文件,并將以下代碼粘貼進去:

use std::io; // 引入標準庫中的 I/O 模塊
use rand::Rng; // 引入 rand 庫,用于生成隨機數fn main() {println!("Guess the number!");// 生成一個 1 到 100 之間的隨機數let secret_number = rand::rng().random_range(1..=100);println!("The secret number is: {}", secret_number); // 僅用于調試,實際游戲中應注釋掉loop {println!("Please input your guess:");// 創建一個可變字符串變量,用于存儲用戶輸入let mut guess = String::new();// 從標準輸入讀取一行文本io::stdin().read_line(&mut guess).expect("Failed to read line");// 將用戶輸入的字符串轉換為數字let guess: u32 = match guess.trim().parse() {Ok(num) => num,Err(_) => {println!("Please type a number!");continue;}};println!("You guessed: {}", guess);// 比較用戶輸入和隨機數match guess.cmp(&secret_number) {std::cmp::Ordering::Less => println!("Too small!"),std::cmp::Ordering::Greater => println!("Too big!"),std::cmp::Ordering::Equal => {println!("Congratulations! You got it!");break;}}}
}

3. 添加依賴

為了使用 rand 庫生成隨機數,需要在 Cargo.toml 文件中添加依賴(代碼粘貼時會彈窗詢問):

[dependencies]
rand = "0.9.0"  # 確保使用最新版本

4. 運行程序

打開RustRover中的終端,在項目目錄下運行以下命令:

cargo run

程序會啟動并提示用戶輸入猜測的數字,根據用戶的輸入給出相應的提示,直到猜對為止。

也可以點擊代碼中的運行按鈕或者RustRover窗口頂端的運行按鈕。

運行過程如下:

C:/RUST/CARGO/bin/cargo.exe run --color=always --package guess_number_game --bin guess_number_game --profile devFinished `dev` profile [unoptimized + debuginfo] target(s) in 0.02sRunning `target\debug\guess_number_game.exe`
Guess the number!
The secret number is: 9
Please input your guess:
88
You guessed: 88
Too big!
Please input your guess:
3
You guessed: 3
Too small!
Please input your guess:
9
You guessed: 9
Congratulations! You got it!進程已結束,退出代碼為 0

三、代碼解析

  1. 引入模塊和庫

    • use std::io;:引入標準庫中的 I/O 模塊,用于處理輸入輸出。
    • use rand::Rng;:引入 rand 庫的 Rng 特質,用于生成隨機數。
  2. 生成隨機數

    • let secret_number = rand::rng().random_range(1..=100);:使用 rand 庫生成一個 1 到 100 之間的隨機數。
  3. 讀取用戶輸入

    • let mut guess = String::new();:創建一個可變字符串變量,用于存儲用戶輸入。
    • io::stdin().read_line(&mut guess):從標準輸入讀取一行文本,并存儲到 guess 中。
  4. 處理用戶輸入

    • 使用 trim() 方法去除輸入字符串的首尾空白字符。
    • 使用 parse() 方法將字符串轉換為數字。如果轉換失敗(例如用戶輸入的不是數字),捕獲錯誤并提示用戶重新輸入。
  5. 比較和提示

    • 使用 cmp 方法比較用戶輸入的數字和隨機數,并根據比較結果給出相應的提示。

四、println! 的用法

println! 是 Rust 中一個非常常用的宏,用于在控制臺輸出內容并換行。以下是關于 println! 的詳細用法:

基本用法

println! 的基本語法如下:

println!("文本內容");
  • 在雙引號中直接寫上要輸出的文本內容即可。
  • 例如:
    println!("Hello, world!");
    
    輸出:
    Hello, world!
    

使用占位符

println! 支持使用占位符來動態插入變量的值。常見的占位符包括:

  • {}:用于插入任意類型的值,Rust 會自動調用 Display trait 來格式化輸出。
  • {:?}:用于插入任意類型的值,Rust 會調用 Debug trait 來格式化輸出,通常用于調試。
  • {:e}{:b}{:x} 等:用于以特定格式輸出數字,分別表示科學計數法、二進制和十六進制。

示例

let name = "Alice";
let age = 25;
println!("My name is {} and I am {} years old.", name, age);

輸出:

My name is Alice and I am 25 years old.

對于調試輸出:

let data = vec![1, 2, 3];
println!("{:?}", data);

輸出:

[1, 2, 3]

對于格式化數字:

let num = 255;
println!("Decimal: {}, Binary: {:b}, Hex: {:x}, Octal: {:o}", num, num, num, num);

輸出:

Decimal: 255, Binary: 11111111, Hex: ff, Octal: 377

控制輸出寬度和精度

println! 還可以通過指定寬度和精度來控制輸出格式:

  • {:width$}:指定輸出的最小寬度。
  • :.precision$:指定輸出的精度(對于浮點數)。

示例

let pi = 3.141592653589793;
println!("Pi with 3 decimal places: {:.3}", pi);
println!("Pi with width 10: {:10}", pi);

輸出:

Pi with 3 decimal places: 3.142
Pi with width 10:       3.141592653589793

輸出多個變量

可以一次性輸出多個變量,只需要在占位符后按順序傳入對應的變量即可。

示例

let a = 10;
let b = 20;
println!("a = {}, b = {}", a, b);

輸出:

a = 10, b = 20

注意事項

  1. 換行println! 會在輸出后自動換行。如果不想換行,可以使用 print! 宏。
    print!("This is a line");
    print!("This is still the same line");
    println!(); // 手動換行
    
    輸出:
    This is a lineThis is still the same line
    
  2. 調試用途:如果只是為了調試,可以使用 eprintln! 宏,它會將輸出重定向到標準錯誤輸出(stderr),而不是標準輸出(stdout)。
    eprintln!("This is a debug message");
    
  3. 類型限制:使用 {} 占位符時,變量必須實現了 Display trait;使用 {:?} 占位符時,變量必須實現了 Debug trait。

小結

println! 是 Rust 中非常方便的輸出工具,通過占位符和格式化選項,可以靈活地輸出各種內容。掌握它的用法可以幫助你更好地調試和展示程序的運行結果。

五、管理多個項目

在 RustRover 中使用 Cargo Workspaces 來同時管理多個項目是一種高效的方式,可以讓你更好地組織和維護多個相關的 Rust 項目。以下是詳細的步驟,幫助你在 RustRover 中設置和使用 Cargo Workspaces:

1. 創建 Workspace

  1. 創建根目錄:首先,創建一個根目錄來存放你的 Workspace。例如,創建一個名為 my_workspace 的文件夾。
  2. 初始化 Workspace:在該目錄下創建一個 Cargo.toml 文件,配置為 Workspace。內容如下:
    [workspace]
    members = ["project1","project2",# 添加更多項目
    ]
    

2. 創建成員項目

在 Workspace 中,每個成員項目都是一個獨立的 Rust 項目。你可以在 RustRover 中創建這些項目,或者通過命令行創建后再導入到 RustRover。

使用命令行創建項目

my_workspace 目錄下,運行以下命令來創建成員項目:

cargo new project1
cargo new project2

在 RustRover 中創建項目

  1. 打開 RustRover,選擇 File -> Open,打開 my_workspace 文件夾。
  2. my_workspace 文件夾中,右鍵點擊空白處,選擇 New -> Cargo Crate
  3. 輸入項目名稱(如 project1),選擇項目類型(如 BinaryLibrary),然后點擊 Create

3. 配置 Cargo.toml

確保 my_workspace/Cargo.toml 文件中的 members 字段包含了所有成員項目的路徑。例如:

[workspace]
members = ["project1","project2",
]

4. 添加依賴

在每個成員項目的 Cargo.toml 文件中,可以獨立添加依賴。例如,在 project1/Cargo.toml 中添加依賴:

[dependencies]
serde = "1.0"

5. 構建和運行項目

在 RustRover 中,你可以直接構建和運行 Workspace 中的成員項目。

構建所有項目

在 RustRover 的終端中,運行以下命令來構建所有成員項目:

cargo build

構建單個項目

如果你想只構建某個特定的項目,可以使用以下命令:

cargo build -p project1

運行項目

運行某個成員項目時,使用以下命令:

cargo run -p project1

6. 在 RustRover 中管理項目

RustRover 提供了強大的項目管理功能,可以幫助你更方便地操作和維護 Workspace。

查看項目結構

在 RustRover 的項目視圖中,你可以清晰地看到 Workspace 的結構,包括所有成員項目。

編輯代碼

在 RustRover 中直接編輯代碼,并利用其智能提示、代碼格式化等功能來提高開發效率。

調試項目

RustRover 支持調試功能,你可以在成員項目中設置斷點、單步執行等,方便調試代碼。

7. 提交到版本控制

建議將整個 Workspace 提交到版本控制系統(如 Git),以便更好地管理代碼版本。

初始化 Git 倉庫

my_workspace 目錄下,運行以下命令初始化 Git 倉庫:

git init

添加文件并提交

git add .
git commit -m "Initial commit"

項目管理小結

通過上述步驟,你可以在 RustRover 中使用 Cargo Workspaces 來同時管理多個項目。這種方式不僅可以讓項目結構更加清晰,還可以方便地共享依賴和代碼,提高開發效率。

總結:學習要點

通過這個項目,你可以學習到以下 Rust 的核心概念:

  1. 變量和可變性:如何聲明和使用變量,以及如何處理可變性。
  2. 輸入輸出:如何從標準輸入讀取數據,并向標準輸出打印信息。
  3. 錯誤處理:如何處理可能出現的錯誤(例如用戶輸入非數字)。
  4. 控制流:如何使用 loopifmatch 等控制流語句。
  5. 外部庫的使用:如何引入和使用外部庫(如 rand)。

這個猜數游戲是一個很好的起點,幫助你熟悉 Rust 的基本語法和開發流程。你可以在此基礎上進一步擴展功能,例如限制猜測次數、記錄猜測次數等。

注意一個問題呀,就是你如果從來沒有學過編程,請繞路吧!

至此,前端JavaScript,后端PRG(Python、Rust、Go),就是我推薦的編程語言啦。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905066.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

拒絕flash插件打劫!如何在vscode上玩4399小游戲

現在電腦上玩4399都需要flash插件了 這也導致了很多人無法玩到小時候的游戲 今天介紹一款插件 功能強大 即安即玩 首先打開vscode 點開小方框(拓展)搜索4399 認準4399 on vscode點擊安裝 安裝完畢后 按下 Ctrl Shift P , 輸入 4399 on VSCode 或…

RHCSA Linux系統 Web頁面 論壇 網盤的搭建

Web 服務搭建 [rootlocalhost ~]#yum install httpd -y [rootlocalhost ~]#cd /var/www/htm1/ [rootalocalhost html]#echo 江停嚴峫 >index.html [rootlocalhost html]#setenforce 0 #將 SELinux 模式設置為寬容模式,不強制執行安全策略 [rootlocalhost h…

力扣刷題——二分查找總結

我們可以總結出二分查找的通用做法和常見變種。二分查找是一種在有序數組中高效查找元素的算法,時間復雜度為 O (log n)。 二分查找的通用模板 二分查找的核心思想是將搜索范圍不斷縮小一半,直到找到目標元素或確定其不存在。以下是通用模板&#xff1…

開源數字人框架 AWESOME-DIGITAL-HUMAN 技術解析與應用指南

一、項目概述 AWESOME-DIGITAL-HUMAN 是一個基于 Live2D 技術的開源數字人框架,它集成了語音識別(ASR)、大語言模型(LLM)、語音合成(TTS)和 Agent 模塊化擴展能力,支持快速部署和自…

互聯網大廠Java求職面試:基于RAG的智能問答系統設計與實現-2

互聯網大廠Java求職面試:基于RAG的智能問答系統設計與實現-2 面試背景 鄭薪苦是一名Java開發者,擁有豐富的項目經驗,但在面試中總喜歡用奇葩比喻解釋技術問題。今天他面對的是某大廠技術總監張總,面試主題為“基于RAG的智能問答…

(二)Linux下基本指令 2

【知識預告】 16. date 指令 17. cal 指令 18. find 指令 19. which指令 20. whereis 指令 21. alias 指令 22. grep 指令 23. zip/unzip 指令 24. tar 指令 25. bc 指令 26. uname ?r 指令 27. 重要的?個熱鍵 28. 關機 16 date 指令 指定格式顯?時間:date %Y-…

命令行解釋器中shell、bash和zsh的區別

命令行解釋器(Command Line Interpreter)是一個程序,它的主要作用是接收用戶輸入的命令,并執行相應的操作。它充當了用戶與操作系統內核之間的橋梁。 一、什么是 Shell? Shell 是一個通用術語,指的是 命令…

二、transformers基礎組件之Tokenizer

在使用神經網絡處理自然語言處理任務時,我們首先需要對數據進行預處理,將數據從字符串轉換為神經網絡可以接受的格式,一般會分為如下幾步: - Step1 分詞:使用分詞器對文本數據進行分詞(字、字詞);- Step2 構建詞典:根據數據集分詞的結果,構建…

鏡像和容器的管理

一、鏡像的管理 獲取鏡像并生成相關容器 # 拉取鏡像 docker pull alpine # 默認是latest,也就是最新版本,也可指定版本(在鏡像名后邊加“:版本號”) # 或者 # 從主機中導入鏡像到docker中 docker image load -i /test#生成容器 …

設計模式簡述(十九)橋梁模式

橋梁模式 描述基本組件使用 描述 橋梁模式是一種相對簡單的模式,通常以組合替代繼承的方式實現。 從設計原則來講,可以說是單一職責的一種體現。 將原本在一個類中的功能,按更細的粒度拆分到不同的類中,然后各自獨立發展。 基本…

ImportError: DLL load failed: 找不到指定的程序。

查看其他博客說是缺少libssl-1_1-x64.dll 和 libcrypto-1_1-x64.dll 然后去下載放到博客說的目錄下 沒有用 解決不了一點 OpenSSL for Windows 64位 完整安裝包 在這里 項目地址: https://gitcode.com/open-source-toolkit/eb627 注意事項 此安裝包僅適用于64位Windows系…

電池單元和電極性能

電芯設計中的挑戰 對于電池制造商來說,提高電池能量和功率密度至關重要。在高功率密度和長循環壽命之間取得平衡是電池設計中的關鍵挑戰,通常需要仔細優化材料、電極結構和熱管理系統。另一個關鍵挑戰是通過優化重量體積比來降低電池單元的總體成本。 工…

數據加密與隱私保護:讓你的信息固若金湯

數據加密與隱私保護:讓你的信息固若金湯 大家好,我是 Echo_Wish,今天聊聊一個 人人都關心、但很多人沒做好 的話題——數據加密與隱私保護的最佳實踐。 為什么要重視數據安全? 現在是數字化時代,從個人照片、銀行卡信息到企業機密,數據泄露的風險無處不在。你可能覺得自…

【高數上冊筆記篇02】:數列與函數極限

【參考資料】 同濟大學《高等數學》教材樊順厚老師B站《高等數學精講》系列課程 (注:本筆記為個人數學復習資料,旨在通過系統化整理替代厚重教材,便于隨時查閱與鞏固知識要點) 僅用于個人數學復習,因為課…

C++(8):類型限定符

目錄 1. const:定義常量 2. volatile:易變性修飾 3. restrict(C非標準) 4. mutable:突破常量性 5. static:靜態存儲 6. register(已棄用) 分類修正說明 1. const:…

Nginx yum 安裝

一、環境準備 一臺裝有 CentOS 7.9 的虛擬機 二、安裝 安裝 yum install -y nginx -y:所有的安裝選項都選擇 yes。 啟動 nginx systemctl enable nginx --now enable:設置 nginx 為開機啟動。--now:馬上啟動 nginx。 查看 nginx 服務狀態…

【5分鐘學Docker】Docker快速使用

目錄 1. 概述 2. 基本操作 2.1. 鏡像操作 2.2. 容器操作 2.3. 運行操作 2.4. 鏡像保存 2.5. 鏡像分享 3. 高級操作 4. 掛載 4.1. 目錄掛載 4.2. 卷映射 1. 概述 Docker 鏡像有鏡像名稱和TAG 2. 基本操作 2.1. 鏡像操作 查看鏡像 docker images docker image ls …

5000字總結 HTML5 中的音頻和視頻,關羽標簽、屬性、API 和最佳實踐

HTML5 音頻與視頻開發完全指南&#xff1a;標簽、屬性、API 與最佳實踐 一、引言&#xff1a;HTML5 媒體時代的到來 在 HTML5 之前&#xff0c;網頁中的音頻和視頻播放依賴 Flash、Silverlight 等第三方插件&#xff0c;存在兼容性差、性能瓶頸和安全隱患。HTML5 引入的 <…

【C語言】(9)—指針3

文章目錄 一、字符指針的深入理解二、數組指針詳解三、二維數組傳參的本質四、函數指針及其應用五、函數指針數組與轉移表 一、字符指針的深入理解 1.1 字符指針的基本使用 字符指針(char*)是指向字符類型數據的指針&#xff0c;它有兩種常見的使用方式&#xff1a; // 方式一…

MDK調試技巧

1、自動生成反匯編 fromelf -c -o "$LL.txt" "#L" 解釋&#xff1a; 1、fromelf 是 ARM Compiler 工具鏈中的一個命令行工具&#xff0c;從fromelf這個名字上我們就能看到它是用來處理elf文件的&#xff0c;elf 全稱 Executable and Linking Format &…