青少年編程與數學 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 到 100 之間的整數。
- 用戶嘗試猜測這個數字。
- 程序根據用戶的輸入給出提示:
- 如果用戶猜的數字太小,提示“Too small!”。
- 如果用戶猜的數字太大,提示“Too big!”。
- 如果用戶猜對了,提示“Congratulations! You got it!”并結束程序。
- 用戶可以不斷猜測,直到猜對為止。
二、實現步驟
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
三、代碼解析
-
引入模塊和庫:
use std::io;
:引入標準庫中的 I/O 模塊,用于處理輸入輸出。use rand::Rng;
:引入rand
庫的Rng
特質,用于生成隨機數。
-
生成隨機數:
let secret_number = rand::rng().random_range(1..=100);
:使用rand
庫生成一個 1 到 100 之間的隨機數。
-
讀取用戶輸入:
let mut guess = String::new();
:創建一個可變字符串變量,用于存儲用戶輸入。io::stdin().read_line(&mut guess)
:從標準輸入讀取一行文本,并存儲到guess
中。
-
處理用戶輸入:
- 使用
trim()
方法去除輸入字符串的首尾空白字符。 - 使用
parse()
方法將字符串轉換為數字。如果轉換失敗(例如用戶輸入的不是數字),捕獲錯誤并提示用戶重新輸入。
- 使用
-
比較和提示:
- 使用
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
注意事項
- 換行:
println!
會在輸出后自動換行。如果不想換行,可以使用print!
宏。
輸出:print!("This is a line"); print!("This is still the same line"); println!(); // 手動換行
This is a lineThis is still the same line
- 調試用途:如果只是為了調試,可以使用
eprintln!
宏,它會將輸出重定向到標準錯誤輸出(stderr),而不是標準輸出(stdout)。eprintln!("This is a debug message");
- 類型限制:使用
{}
占位符時,變量必須實現了Display
trait;使用{:?}
占位符時,變量必須實現了Debug
trait。
小結
println!
是 Rust 中非常方便的輸出工具,通過占位符和格式化選項,可以靈活地輸出各種內容。掌握它的用法可以幫助你更好地調試和展示程序的運行結果。
五、管理多個項目
在 RustRover 中使用 Cargo Workspaces 來同時管理多個項目是一種高效的方式,可以讓你更好地組織和維護多個相關的 Rust 項目。以下是詳細的步驟,幫助你在 RustRover 中設置和使用 Cargo Workspaces:
1. 創建 Workspace
- 創建根目錄:首先,創建一個根目錄來存放你的 Workspace。例如,創建一個名為
my_workspace
的文件夾。 - 初始化 Workspace:在該目錄下創建一個
Cargo.toml
文件,配置為 Workspace。內容如下:[workspace] members = ["project1","project2",# 添加更多項目 ]
2. 創建成員項目
在 Workspace 中,每個成員項目都是一個獨立的 Rust 項目。你可以在 RustRover 中創建這些項目,或者通過命令行創建后再導入到 RustRover。
使用命令行創建項目
在 my_workspace
目錄下,運行以下命令來創建成員項目:
cargo new project1
cargo new project2
在 RustRover 中創建項目
- 打開 RustRover,選擇
File -> Open
,打開my_workspace
文件夾。 - 在
my_workspace
文件夾中,右鍵點擊空白處,選擇New -> Cargo Crate
。 - 輸入項目名稱(如
project1
),選擇項目類型(如Binary
或Library
),然后點擊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 的核心概念:
- 變量和可變性:如何聲明和使用變量,以及如何處理可變性。
- 輸入輸出:如何從標準輸入讀取數據,并向標準輸出打印信息。
- 錯誤處理:如何處理可能出現的錯誤(例如用戶輸入非數字)。
- 控制流:如何使用
loop
、if
和match
等控制流語句。 - 外部庫的使用:如何引入和使用外部庫(如
rand
)。
這個猜數游戲是一個很好的起點,幫助你熟悉 Rust 的基本語法和開發流程。你可以在此基礎上進一步擴展功能,例如限制猜測次數、記錄猜測次數等。
注意一個問題呀,就是你如果從來沒有學過編程,請繞路吧!
至此,前端JavaScript,后端PRG(Python、Rust、Go),就是我推薦的編程語言啦。