go语言——猜数字小游戏
🎃🎃🎃用go语言做一个小游戏——计算机生成一个随机数,用户输入猜测的数字,根据数字的大小,提示“Your guess is bigger than the secret number. ”或“Your guess is smaller than the secret number.”,直到用户输入正确,退出游戏。
一、生成随机数字
go语言中使用math.rand产生随机数,下面这条语句生成了一个小于maxNum的随机数secretNumber。
secretNumber := rand.Intn(maxNum)
重复运行会发现随机生成的数字一直是81。这是我们需要设置随机数种子,加上下面这行代码,可以保证每次随机都是随机的。
rand.Seed(time.Now().UnixNano())
二、得到用户输入的数字
>要考虑用户可以输入非数字
这里用到了一个包bufio—— bufio实现了缓冲I/O。包装了io.reader或writer对象,创建了另一个对象,该对象也是实现了接口,为文本io提供了缓冲……
NewReader——返回一个buffer为默认大小的reader。
stdin——Stdin、Stdout 和 Stderr 是指向标准输入、标准输出和标准错误文件描述符的打开文件。
ReadString——读取直到输入中第一次出现 delim,返回一个字符串,其中包含最多和包括分隔符的数据。如果 ReadString 在找到分隔符之前遇到错误,它将返回错误之前读取的数据和错误本身(通常是 io.EOF)。ReadString 返回 err != nil 当且仅当返回的数据不以 delim 结尾时。对于简单的用途,扫描仪可能更方便。
Trim——返回字符串 s 的切片,其中删除了切割集中包含的所有前面和尾部 Unicode 代码点。
strconv——包 strconv 实现了与基本数据类型的字符串表示之间的转换。
数值转换——最常见的数字转换是 Atoi(字符串到 int)和 Itoa(int 到字符串)。
i, err := strconv.Atoi(“-42”)
s := strconv.Itoa(-42)
//将标准输入读到reader中reader := bufio.NewReader(os.Stdin)//将回车之前的值读入inputinput, err := reader.ReadString('\n')if err != nil {fmt.Println("An error occured while reading input. Please try again", err)return}//去掉input字符串后面的换行和回车input = strings.Trim(input, "\r\n")//将字符串转成int类型guess, err := strconv.Atoi(input)if err != nil {fmt.Println("Invalid input. Please enter an integer value")return}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!")
}
四、循环
go中的没有while循环,使用for循环代替了while循环。
对输入内容进行循环,当输入的数字等于生成的随机数,就break。
完整的代码如下:
package mainimport ("bufio""fmt""math/rand""os""strconv""strings""time"
)func main() {maxNum := 100rand.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.Trim(input, "\r\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}}
}
截图:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
