Requirement¶
猜数游戏-目标 生成一个1到100间的随机数 提示玩家输入一个猜测 猜完之后,程序会提示猜测是太小了还是太大了如果猜测正确,那么打印出一个庆祝信息,程序退出
Solution¶
预备:创建项目¶
Text Only
cargo new guessing_name
Step1:第一次猜测¶
Rust
输出
use std::io; //io这个库在标准库里面,标准库就是std
fn main() {
println!("猜数游戏!");
println!("猜一个数!");
//guess需要是可变的,所以加上 &mut
let mut guess = String::new();
// 读取用户输入
io::stdin().read_line(&mut guess).expect("无法读取行");
println!("你猜测的数字是:{}", guess);
}
Bash
Comment:
fn main(){}是Rust第一个执行的函数
Rust中变量是不可变的,创建变量用let,如
> cargo run
Blocking waiting for file lock on build directory
Compiling my-project v0.1.0 (/home/runner/RustClass)
Finished dev [unoptimized + debuginfo] target(s) in 1.77s
Running `target/debug/my-project`
猜数游戏!
猜一个数!
75
你猜测的数字是:75
Rust
需要加上mut,让变量变成可变的
let guess = 22;
Rust
let mut guess = 22;
Step2:生成神秘数字¶
引入rand随机数依赖
Rust
输出
use rand::Rng;//随机数包
use std::io; //io这个库在标准库里面,标准库就是std
fn main() {
println!("猜数游戏!");
println!("猜一个数!");
let secret_number = rand::thread_rng().gen_range(1, 101);
println!("要猜测的数字是:{}", secret_number);
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("无法读取行");
println!("你猜测的数字是:{}", guess);
}
Bash
cargo run
Compiling my-project v0.1.0 (/home/runner/RustClass)
Finished dev [unoptimized + debuginfo] target(s) in 0.91s
Running `target/debug/my-project`
猜数游戏!
猜一个数!
要猜测的数字是:8
32
你猜测的数字是:32
Step3:比较猜测数字和神秘数字¶
Rust
use rand::Rng;//随机数包
use std::cmp::Ordering;//比较
use std::io; //io这个库在标准库里面,标准库就是std
fn main() {
println!("猜数有戏!");
println!("猜一个数!");
let secret_number = rand::thread_rng().gen_range(1, 101);
println!("猜测一个数字是:{}", secret_number);
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("无法读取行");
let guess: u32 = guess.trim().parse().expect("请输入数字");
println!("你猜测的数字是:{}", guess);
// if else
match guess.cmp(&secret_number) {
Ordering::Less => println!("太小了"),
Ordering::Greater => println!("太大了"),
Ordering::Equal => println!("你赢了"),
}
}
Step4:多次猜测¶
用loop实习多次猜测 猜对了break退出 类型转换,trim()去除空白格和换行等字符 完整版
Rust
输出
use rand::Rng; //随机数包
use std::cmp::Ordering; //比较
use std::io; //io这个库在标准库里面,标准库就是std
fn main() {
println!("猜数游戏!");
let secret_number = rand::thread_rng().gen_range(1, 101);
loop {
println!("猜一个数!");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("无法读取行");
//类型转换,trim()去除空白格和换行等字符
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
println!("你猜测的数字是:{}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("太小了"),
Ordering::Greater => println!("太大了"),
Ordering::Equal => {
println!("你赢了");
break;
}
}
}
}
Bash
cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.24s
Running `target/debug/my-project`
猜数游戏!
猜一个数!
50
你猜测的数字是:50
太大了
猜一个数!
25
你猜测的数字是:25
太大了
猜一个数!
12
你猜测的数字是:12
太大了
猜一个数!
6
你猜测的数字是:6
太大了
猜一个数!
3
你猜测的数字是:3
太小了
猜一个数!
4
你猜测的数字是:4
太小了
猜一个数!
5
你猜测的数字是:5
你赢了
Reference¶
[1] 软件工艺师. (2020年10月21日). Rust编程语言入门教程(Rust语言/Rust权威指南配套)【已完结】[视频]. Bilibili. https://www.bilibili.com/video/BV1hp4y1k7SV.