猜字游戏
作为GO语言的第一个小项目,猜字游戏是个不错的选择。
我们首先将该程序的必要代码写出。
如下,我们首先要实现生成一个0~100的随机数
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)
}
我们利用Go的库函数”math/rand“,”time“
首先介绍‘math/rand’
如同其他语言类似,这是一个包括生成随机数函数的库
maxNum := 100
rand.Seed(time.Now().UnixNano()) \\设置种子
rand.Intn(maxNum) \\定义范围
我们可以利用上述语句去进行生成0~100的随机数
在本地的VS code时,你可能会发现不去设置种子,而是直接尝试使用 rand.Intn 去生成也是可以成功运行
这是因为,在不去指定种子时,编译器会自动使用系统时间去作为种子,虽然可以运行,但是并不安全
如果设置一个固定的种子,那么每次运行便会生成一个固定的随机数
这里我们可以看见如果将种子设置为固定100,那么每次运行便生成固定随机数。
接下来,我们继续改进代码完成度
reader := bufio.NewReader(os.Stdin):创建一个 bufio.Reader 对象,用于从标准输入(通常是键盘)读取数据。
-
input, err := reader.ReadString('\n'):使用ReadString方法读取用户输入的一行文本,直到遇到换行符为止。这个方法返回读取的字符串和可能发生的错误。 -
if err!= nil {... }:检查是否在读取输入时发生了错误,如果有错误,打印错误信息并使用return语句提前结束函数的执行。 -
input = strings.Trim(input, "\r\n"):使用strings.Trim函数去除输入字符串两端的换行符和回车符。 -
guess, err := strconv.Atoi(input):使用strconv.Atoi函数将输入的字符串转换为整数,并将其赋值给guess。 -
if err!= nil {... }:检查是否在转换字符串为整数时发生了错误,如果有错误,打印错误信息并使用return语句提前结束函数的执行。如下
package main
import (
"fmt"
"math/rand"
"bufio"
"os"
"strings"
"strconv"
"time"
)
func main() {
maxNum := 100
rand.Seed(100)
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
return
}
input = strings.Trim(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)
}
如上,我们可以进行到一个80%的完成度代码
接下来,我们进行正确判断
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
}
我们通过这块代码进行一个大小判断
最后总结起来,完成我们的猜字游戏
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
}
}
}
如上,便是我们的第一个小项目,猜字游戏
谢谢!