【Rust自学】2.2. 猜数游戏Pt.2 生成随机数
2.2 猜数游戏Pt.2 生成随机数2.2.0 本篇知识点在本篇中你将学到:- 外部 crate 的搜索与下载- Cargo 依赖项管理- 基于语义化版本的升级规则-rand随机数生成器- ...2.2.1 游戏目标生成一个 1 到 100 间的随机数本篇会涉及提示玩家输入一个猜测猜完之后程序会提示猜测是太大了还是太小了如果猜测正确那么打印一个庆祝信息程序退出2.2.2 代码实现Step 1寻找外部库虽然 Rust 标准库内并没有提供与生成随机数相关的函数但 Rust 团队开发了具有这个功能的外部库。在 Rust 官方 crates 注册中心 中搜索rand就可以找到它。这个页面提供了非常详细的 crate 介绍。Rust 的 crate 一共分为两种-库 crateLibrary crate提供功能或逻辑模块的 crate。它没有main函数不能单独运行。通常用于与其他代码共享功能。rand这个 crate 就属于库 crate。-二进制 crateBinary crate可执行程序包含一个main函数编译后会生成可运行的二进制文件。用于构建独立、可运行的 Rust 应用程序。Step 2把这个外部 crate 写入 Cargo 依赖项接下来就需要把这个外部库写入 Cargo 依赖项有关 Cargo 的介绍在 1.3. Rust Cargo 基础知识 中已提及这里不再重复以供程序调用。打开项目中的Cargo.toml文件在dependencies下面添加依赖项格式为依赖项名 依赖项版本crate 页面的Install一栏下也有这种写法。这个程序需要rand这个依赖项并且使用0.8.5这个版本就应该写rand 0.8.5。如果这个依赖项还有自己的依赖项Cargo 就会在编译时自动下载它们。实际上0.8.5这种版本号写法是一种简写其完整写法为^0.8.5表示任何与0.8.5版本公共 API 兼容的版本都可以至少是0.8.5但低于0.9.0。比如某个依赖项的版本是1.2那就相当于^1.2.0意味着允许任意1.2.0且2.0.0的版本——因此可以解析到1.3.0等更高的1.x版本但不会升级到2.0.0或更高版本。Cargo 会把实际选中的精确版本记录在Cargo.lock中并在之后的构建中复用这些版本直到你更新依赖例如使用cargo update。如果某个依赖项的更新会破坏基于旧版本依赖项编写的代码那么重新构建后会发生什么呢答案在Cargo.lock文件中。在构建时Cargo 会检查是否已经存在Cargo.lock文件如果有就使用这个文件里指定的版本从而避免兼容性问题。如果想在当前标准下更新版本可以在终端中使用cargo update。具体步骤如下:- 复制 Cargo 项目所在路径打开终端输入cd Cargo_project_path- 输入cargo update这个命令会更新Cargo.lock向注册表查询仍然满足Cargo.toml中要求的最新依赖版本Cargo.toml里写下的版本要求本身不会改变。举个例子假如某个依赖项在Cargo.toml中声明的版本是1.2cargo update就可以把锁定的版本升级到不低于1.2.0的最新1.x.x但不会升级到2.0.0或更高版本同时Cargo.toml中写下的要求依然是1.2。Step 3在代码中使用这个依赖项在程序开头需要使用关键字use来导入依赖项:use rand::Rng;rand::Rng是一个trait。trait类似于其他语言中的接口如 Java 的接口或 C 的纯虚基类用于规定一组类型必须实现的函数和方法。rand::Rng定义了随机数生成器所需的一些方法。接下来在main中使用这个 trait 来生成随机数:let range_number rand::thread_rng().gen_range(1..101);PS在旧版本中应写为gen_range(1, 101)。let range_number声明了一个叫做range_number的不可变变量赋值rand::thread_rng()返回一个ThreadRng值它是一个随机数生成器。这个随机数生成器位于本地线程空间并通过操作系统获得种子。.gen_range(1..101)rand::thread_rng()上的一个方法它接收一个范围并在该范围内生成随机数。这里会生成从 1 开始、到但不包括 101 的数字。最后再打印出这个随机数println!的使用在 2.1 猜数游戏Pt.1 一次猜测 已作介绍这里不再重复:println!(The secret number is: {}, range_number);2.2.3 代码效果这是完整的代码:use std::io; use rand::Rng; fn main() { let range_number rand::thread_rng().gen_range(1..101); println!(Number Guessing Game); println!(Guess a number); let mut guess String::new(); io::stdin().read_line(mut guess).expect(Could not read the line); println!(The number you guessed is:{}, guess); println!(The secret number is: {}, range_number); }运行效果如下每次运行的神秘数字都会不同:Number Guessing Game Guess a number 10 The number you guessed is:10 The secret number is: 65

相关新闻

GPT-5.6常见问题排查:API调用错误、参数配置与解决方案

GPT-5.6常见问题排查:API调用错误、参数配置与解决方案

踩过的坑比学到的经验更值钱过去大半年我一直在研究多模型集成方案,从自研搭建到开源 UI 部署,再到第三方平台,踩了不少坑。最近在 kulaai(titiai.cn) 上找到了一个比较省心的方案,顺手把 GPT-5.6 使用中最…

2026/10/18 10:56:35 阅读更多 →
[AG-UI详解-05]如何构建一个兼容AG-UI协议的客户端

[AG-UI详解-05]如何构建一个兼容AG-UI协议的客户端

在AG-UI详解-04:如果构建一个兼容AG-UI协议的Agent中,我们通过在一个ASP.NET Core应用中注册了一个绑定指定IChatClient的路由终结点,使外界可以通过Web调用的方式以AG-UI协议调用对应的LLM。在这篇文章中,我们看看AG-UI客户端又该…

2026/10/18 10:57:51 阅读更多 →
GraphRAG技术深度解析:知识图谱驱动的检索增强生成

GraphRAG技术深度解析:知识图谱驱动的检索增强生成

GraphRAG技术深度解析:知识图谱驱动的检索增强生成 随着大语言模型在企业知识管理场景的深入应用,传统向量RAG在处理需要多跳推理、全局总结和关系分析的复杂查询时逐渐力不从心。GraphRAG(图检索增强生成)通过将知识库构建为知识…

2026/10/18 10:57:52 阅读更多 →

最新新闻

梯度消失全解析:从数学原理到ReLU、BN与残差连接的实战解决路径

梯度消失全解析:从数学原理到ReLU、BN与残差连接的实战解决路径

1. 从一个训练到一半就“躺平”的模型说起如果你亲手训练过一个稍微有点深度的神经网络,大概率见过这种让人抓狂的场景:前几个epoch损失还降得好好的,突然就卡在一个不上不下的数值,准确率死活上不去,再往后训练&#…

2026/10/18 15:01:54 阅读更多 →
LAMMPS (23 Jun 2022) + oneAPI 安装避坑:从环境变量到编译验证的完整清单

LAMMPS (23 Jun 2022) + oneAPI 安装避坑:从环境变量到编译验证的完整清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 15:01:54 阅读更多 →
MATLAB三维热力图绘制全指南:从数据组织到交互验证

MATLAB三维热力图绘制全指南:从数据组织到交互验证

简介:这份资源聚焦MATLAB三维数据可视化,面向需要绘制三维热力图的学生、科研人员与工程技术人员,帮助解决三维曲面数据难以直观呈现的问题。资源包共3个文件,包含1个m脚本、1个mat数据文件和1个png效果图,压缩包约219…

2026/10/18 15:01:54 阅读更多 →
2026 用 AI 工具分析空口包 WiFi 包:TaoToken 统一 Key 接入 tshark/Wireshark 抓包总结

2026 用 AI 工具分析空口包 WiFi 包:TaoToken 统一 Key 接入 tshark/Wireshark 抓包总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 15:01:54 阅读更多 →
Java SHA算法实战:选型、编码、文件校验与安全边界

Java SHA算法实战:选型、编码、文件校验与安全边界

说实话,看到“SHA加密算法”这个标题,我第一反应是:这又是一个被写烂的入门Demo。但实际在项目里接手过几个跟数据校验、安全存储相关的模块之后,我觉得“SHA”这一块值得聊的东西其实非常多——很多人止步于会用MessageDigest.ge…

2026/10/18 15:01:54 阅读更多 →
JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分 页面退出后 JsLeakWatcher 报出几十个对象,团队立刻把所有缓存清掉,结果二次进入变慢,告警却仍然存在。工具发现“对象仍可达”&…

2026/10/18 15:00:54 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →