青少年编程与数学 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.mzph.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 &…