由于是猜数,我们肯定需要先有可以猜的数。所以我们需要生成一个随机数。
package main
import (
"fmt"
"math/rand"
)
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
虽然是产生了随机数,但是每一次生成的数字都是一样的。这是因为我们生成随机数的种子没有改变,需要让种子发生变化才能使每次生成的随机数不同,可以使用一直在不断变化的时间作为我们的种子。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
// 使用一直在不断变化的时间作为我们的种子
rand.Seed(time.Now().UnixNano())
// 设置种子之后产生一个最大为100的整形
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
接下来使用fmt.Scanf实现输入我们猜的数字。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
var guess int
// 输入我们猜的数字
_, err := fmt.Scanf("%d", &guess)
// Go语言中处理错误的方法
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
return
}
fmt.Println("You guess is", guess)
}
实现完整的猜数逻辑。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
var guess int
_, err := fmt.Scanf("%d", &guess)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
return
}
fmt.Println("You guess is", guess)
// 通过 if-else 来看你是否猜对,若没猜对告诉你猜大了还是猜小了
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct, you Legend!")
}
}
最后,加入for循环,项目实现完成。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
// 作弊模式
// fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
// 通过一个 for 循环实现一直猜数,直到猜中
for {
var guess int
_, err := fmt.Scanf("%d", &guess)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct, you Legend!")
break
}
}
}