这是我参加【第三届青训营-后端场】笔记创作活动的第一篇笔记
猜字游戏:程序随机生成一个100以内的数字,然后输入端输入猜测的数字,如果比目标数字小,提示小于目标数字,重新输入,如果大于目标数字,提示大于目标数字,重新输入,直到成功猜到目标数字。
(1)首先是生成随机数,go语言生成随机数与Java略有不同,在使用rand方法生成随机数前需要生成随机数种子,否则每次生成的数字都会是同一个。
rand.Seed(time.Now().UnixNano())
然后就可以使用rand.Intn()方法生成随机数
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)
}
(2)第二步,定义输入
reader := bufio.NewReader(os.Stdin)
bufio实现了有缓冲的io流,os.Stdin是golang的标准输入
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
return
}
以换行符为分割,读取字符串,即一行一行的读取
提一下nil
nil是什么
nil 是一个预定义常量,用来表示特定几个类型的变量的零值。
一般的预定义常量都是有类型的,那么 nil 的类型是什么呢?
nil本身是没有类型的,且nil并不是关键字,是一个标识符,意思是无,零值。go语言中变量如果声明后没有赋值,就会有默认零值,下面是每种类型对应的默认零值:
bool -> false
numbers -> 0
string -> ""
pointers -> nil
slices -> nil
maps -> nil
channels -> nil
functions -> nil
interfaces -> nil
所以我们经常将 nil 赋值给 error 类型,并且以此来判断是否有错误,那是因为 error 是个接口,而接口的零值就是 nil,如果不等于默认零值,就是出现了错误
(3)将读取到的输出中的“\n”去掉,windows中则是“\r\n”
input = strings.TrimSuffix(input, "\r\n")
将字符串转为数字
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
return
}
fmt.Println("You guess is", guess)
(4)逻辑判断
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!")
}
(5)加上循环,此时只能输入一次,需要实现可以多次输入
所以全部代码为:
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")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
continue
}
input = strings.TrimSuffix(input, "\n")
guess, err := strconv.Atoi(input)
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
}
}
}
此时功能就全部实现了