Go语言基础练习 (猜数字)

38 阅读2分钟

Go语言学习篇(猜数字)

--掌握一门语言最快的方法就是多写

package main
import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"strings"
	"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")
	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
		}
	}
}

以上是ai练中学的代码

bufio:用于缓冲输入输出操作。

fmt:用于格式化输入输出。

math/rand:用于生成随机数。

os:提供与操作系统交互的功能。

strconv:用于字符串与基本数据类型之间的转换。

strings:用于字符串处理。

time:用于时间相关的功能。

定义一个变量 maxNum,将其值设为 100,用于限制随机数的范围

使用当前时间的纳秒数作为随机数种子,以确保每次运行程序时生成不同的随机数。

生成一个从 0 到 maxNum-1(即 0 到 99)之间的随机整数,并将其赋值给 secretNumber,这是玩家需要猜测的数字。

使用 bufio.NewReader 创建一个读取器,以便从标准输入读取用户输入。

使用无限循环来不断提示用户输入,直到猜对数字为止。

如果读取输入时发生错误,输出错误信息,并继续下一次循环。

去除输入字符串中的换行符和回车符,以便后续处理。

如果输入不是有效的整数,输出错误提示并继续循环。

我将输入过程进行简化 直接读入整数与生成的随机数进行对比

前一段代码使用了 bufio.NewReader 来读取用户输入,这种方法可以处理更复杂的输入情况,比如整行输入。**

使用了 fmt.Scan(&number),这是一个更简单的方式,直接将用户输入的内容读入到 number 变量中。fmt.Scan 适用于读取单个值,但不如 bufio 灵活。

逻辑更加简洁,直接处理输入,无需额外的字符串处理。

前一段代码中,输入错误不会结束程序,而是继续循环。

新代码中,输入错误会导致程序终止。

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var number int
    maxnum := 100
    rand.Seed(time.Now().UnixNano())
    secretNum := rand.Intn(maxnum)
    //fmt.Println("secretNum is ", secretNum)

    for {
       fmt.Println("请输入你猜的数字:")
       //read := bufio.NewReader(os.Stdin)
       _, err := fmt.Scan(&number)
       if err != nil {
          fmt.Println("输入有误!", err)
          return
       }
       if number > secretNum {
          fmt.Println("猜大了!")
       } else if number < secretNum {
          fmt.Println("猜小了!")
       } else {
          fmt.Println("恭喜!猜对了!")
          break
       }

    }
}