尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【Rust自学】2.2. 猜数游戏Pt.2 生成随机数

【Rust自学】2.2. 猜数游戏Pt.2 生成随机数
📅 发布时间:2026/7/23 19:00:03

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 一共分为两种:
-库 crate(Library crate):提供功能或逻辑模块的 crate。它没有main函数,不能单独运行。通常用于与其他代码共享功能。rand这个 crate 就属于库 crate。
-二进制 crate(Binary 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.2,cargo 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

相关新闻

  • 中国叠层母线排市场运行数据分析及未来需求预测报告2026年版
  • AI原生应用中的上下文窗口优化与压缩技术
  • 【Rust自学】12.7. 使用环境变量

最新新闻

  • 深入解析TMS570LS09x/07x安全MCU:从ARM Cortex-R4F架构到功能安全实战
  • 无锡钻戒回收注意事项,别被虚高报价白白套路 - 日常比对手册
  • AI Agent自动化工作流设计:企业智能助手如何落地
  • AI办公不是替代人,而是淘汰不会用AI的人:3类岗位正在消失,4类新角色年薪涨62%
  • 嵌入式系统参数动态更新利器:TI MCU POM模块原理与实战
  • 上海管道疏通避坑指南 虹口区快达师傅上门快不坑(2026年7月) - 余生黄金回收

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号