猜谜游戏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| 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("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 } } }
|
解释:这段代码是一个简单的猜数字游戏程序,使用 Go 语言编写。
首先,代码导入了一些需要使用的包,包括 "bufio"
、"fmt"
、"math/rand"
、"os"
、"strconv"
和 "strings"
,这些包提供了处理输入输出、生成随机数和字符串处理的功能。
接下来,在 main
函数中,定义了一个变量 maxNum
,它表示可猜测的最大数字。然后使用 rand.Seed(time.Now().UnixNano())
设置随机数生成器的种子,以确保每次程序运行时生成的随机数是不同的。然后使用 rand.Intn(maxNum)
生成一个介于 0 和 maxNum
之间的随机整数作为秘密数字。
然后程序提示用户输入猜测的数字,并使用 bufio.NewReader(os.Stdin)
创建一个读取标准输入的读取器。
之后进入一个无限循环,在循环中不断读取用户输入的猜测数字,直到猜测正确为止。循环开始时,调用 reader.ReadString('\n')
读取用户输入的完整一行字符串,包括换行符。然后使用 strings.Trim(input, "\r\n")
去除字符串开头和结尾处的回车符和换行符,并将修剪后的字符串赋值给 input
变量。
接下来,使用 strconv.Atoi(input)
将修剪后的字符串转换为整数类型,并将转换后的结果赋值给 guess
变量。如果转换出错,则输出错误信息并要求用户重新输入。
然后程序输出用户猜测的数字,并与秘密数字进行比较。如果猜测数字大于秘密数字,则输出提示信息告诉用户猜测数字太大;如果猜测数字小于秘密数字,则输出提示信息告诉用户猜测数字太小。如果猜测数字与秘密数字相等,则输出提示信息告诉用户猜测正确,并跳出循环。
整个过程会循环进行,直到用户猜测正确为止。