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
}
}
}