:dep rand = { rand = "0.9.0" }
:dep evcxr_input
use rand::Rng;
use std::cmp::Ordering;
use std::{thread, time};
let secret_number = rand::thread_rng().gen_range(1..6);
loop {
// the bookと違う点②
let mut guess = evcxr_input::get_string("数字を予想し入力してください"); // Rustの変数は不変が原則なので可変にしたい場合はmutを明示
let guess: u32 = match guess.trim().parse() { // 標準入力から受け取ったのはstring型なのでu32型に変換
Ok(num) => num, // 型変換が成功ならguessに格納
Err(_) => continue, // 型変換が失敗ならloop振出しに
};
println!("予想: {}", guess);
// the bookと違う点③
thread::sleep(time::Duration::from_millis(1000));
match guess.cmp(&secret_number) { // guessとsecret_numberの比較
Ordering::Less => println!("小さ過ぎます!"), // guess < secret_numberの場合
Ordering::Greater => println!("大き過ぎます!"), // guess > secret_numberの場合
Ordering::Equal => { // guess = secret_numberの場合
println!("正解です!");
break;
}
}
// the bookと違う点③
thread::sleep(time::Duration::from_millis(1000));
}
:dep 変数名 = { ライブラリ名 = "バージョン" }
でインストールすることができます。下記2行はそれぞれライブラリのインストールをしています。:dep rand = { rand = "0.9.0" } // 擬似乱数を生成するのに必要なライブラリ
:dep evcxr_input // Jupyter Notebook上で標準入力を使用するのに必要なライブラリ
std::io
ライブラリを使いますが、変則的にJupyter Notebookを使用しているため入力欄が現れません。そこで代替としてevcxr_input
を用います。let mut guess = evcxr_input::get_string("数字を予想し入力してください");
println!
での標準出力前に次の入力が始まってしまうためです。thread::sleep(time::Duration::from_millis(1000));