欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言實(shí)現(xiàn)猜謎小游戲

 更新時(shí)間:2023年01月28日 11:12:12   作者:Java星辰  
這篇文章主要為大家介紹了Go語(yǔ)言實(shí)現(xiàn)猜謎小游戲示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

本文是介紹用Go實(shí)現(xiàn)一個(gè)猜謎小游戲,就是程序先生成一個(gè)隨機(jī)數(shù)num,然后讓用戶來(lái)猜生成的數(shù)是多少,如果猜的數(shù)比num小就提示用戶猜測(cè)的數(shù)據(jù)小于num,如果猜的數(shù)比num大就提示用戶測(cè)試的數(shù)據(jù)大于num,如果猜測(cè)的數(shù)據(jù)剛好是num就提示用戶猜對(duì)了。

技術(shù)點(diǎn)

在本文中將會(huì)使用到以下技術(shù)點(diǎn):隨機(jī)數(shù)、隨機(jī)數(shù)種子、獲取當(dāng)前時(shí)間戳、兩種讀取終端輸入方式等。

隨機(jī)數(shù)

Go生成隨機(jī)數(shù)需要引入math/rand包,Intn(n int)函數(shù)可以生成一個(gè)0~n的非負(fù)隨機(jī)整數(shù)數(shù),包含0不包含n也就是[0,n)。

import (
    "fmt"
    "math/rand"
)
func main() {
    fmt.Println(rand.Intn(100))
}

經(jīng)過(guò)多次運(yùn)行,我們發(fā)現(xiàn)產(chǎn)生的數(shù)并不是隨機(jī)的,每次都一樣。

隨機(jī)數(shù)種子

Go中的隨機(jī)數(shù)是通過(guò)rand.Seed(種子值seedNum)設(shè)置種子值,在同一個(gè)種子下每次產(chǎn)生的隨機(jī)數(shù)順序是一樣的。

為了保證種子值的隨機(jī)性,一般采用系統(tǒng)時(shí)間的毫秒值作為種子值,因?yàn)橄到y(tǒng)時(shí)間的毫秒值是一直變動(dòng)的。

time.Now().UnixMilli()可以系統(tǒng)當(dāng)前的毫秒時(shí)間戳。

time.Now().Unix()可以系統(tǒng)當(dāng)前的秒時(shí)間戳。

time.Now().UnixMicro()可以系統(tǒng)當(dāng)前的微秒時(shí)間戳。

time.Now().UnixNano()可以系統(tǒng)當(dāng)前的納秒時(shí)間戳。

import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Intn(100))
}

再次運(yùn)行代碼,可以發(fā)現(xiàn)每次運(yùn)行的隨機(jī)數(shù)都是不同的了。

接收用戶輸入

Reader

os.Stdin指向標(biāo)準(zhǔn)輸入文件/dev/stdinos.Stdinos包的一個(gè)變量。它是os包的NewFile函數(shù)的返回值。

bufio包中都是IO操作的方法,創(chuàng)建Reader對(duì)象,就可以讀取數(shù)據(jù)了。

reader := bufio.NewReader(os.Stdin)

設(shè)置按行讀取:

input, err := reader.ReadString('\n')

按行讀取得到的結(jié)果是包含換行符的,要把換行符給截取去掉:

input = strings.Trim(input, "\r\n")

再把得到的字符串轉(zhuǎn)換為數(shù)字:

guess, err := strconv.Atoi(input)

Scanf

Scanf函數(shù)也可以從os.Stdin中讀取數(shù)據(jù)。

var guess int
fmt.Scanf("%d", &guess)
fmt.Println(guess)

完整代碼

因?yàn)橛脩舨灰欢ㄒ淮尉筒轮袛?shù)據(jù),我們可以使用for循環(huán),當(dāng)用戶猜不中時(shí),可以讓用戶再繼續(xù)猜直到猜中。

下面來(lái)看下完整的代碼。

使用Reader

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

使用Scanf

func main() {
    maxNum := 100
    rand.Seed(time.Now().UnixNano())
    secretNumber := rand.Intn(maxNum)
    fmt.Println("Please input your guess")
    var guess int
    for {
        fmt.Scanf("%d", &guess)
        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
        }
    }
}

來(lái)運(yùn)行一下代碼看下最終效果:

總結(jié)

本文介紹了使用Go語(yǔ)言來(lái)實(shí)現(xiàn)類一個(gè)猜字小游戲,在文中介紹了隨機(jī)數(shù)、隨機(jī)數(shù)種子以及如何從終端讀取數(shù)據(jù)的兩種方法。

對(duì)比從終端獲取用戶輸入的兩種方法,我們可以看到使用Scanf比使用bufio中的Reader方便了很多,大大簡(jiǎn)化了代碼。

剛剛接觸Go難免有些錯(cuò)誤與不足之處,如有發(fā)現(xiàn)歡迎指出。

以上就是Go語(yǔ)言實(shí)現(xiàn)猜謎小游戲的詳細(xì)內(nèi)容,更多關(guān)于Go實(shí)現(xiàn)猜謎小游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go框架三件套Gorm?Kitex?Hertz基本用法與常見(jiàn)API講解

    Go框架三件套Gorm?Kitex?Hertz基本用法與常見(jiàn)API講解

    這篇文章主要為大家介紹了Go框架三件套Gorm?Kitex?Hertz的基本用法與常見(jiàn)API講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-02-02
  • golang return省略用法說(shuō)明

    golang return省略用法說(shuō)明

    這篇文章主要介紹了golang return省略用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang?流水線設(shè)計(jì)模式實(shí)踐示例詳解

    Golang?流水線設(shè)計(jì)模式實(shí)踐示例詳解

    這篇文章主要為大家介紹了Golang?流水線設(shè)計(jì)模式實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go并發(fā)編程實(shí)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)

    Go并發(fā)編程實(shí)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)

    本文主要介紹了Go并發(fā)編程實(shí)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • graphql---go http請(qǐng)求使用詳解

    graphql---go http請(qǐng)求使用詳解

    這篇文章主要介紹了graphql---go http請(qǐng)求使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang中生成隨機(jī)字符串并復(fù)制到粘貼板的方法

    Golang中生成隨機(jī)字符串并復(fù)制到粘貼板的方法

    這篇文章主要介紹了Golang中生成隨機(jī)字符串并復(fù)制到粘貼板的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • golang多次讀取http request body的問(wèn)題分析

    golang多次讀取http request body的問(wèn)題分析

    這篇文章主要給大家分析了golang多次讀取http request body的問(wèn)題,文中通過(guò)代碼示例和圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Golang日志操作庫(kù)zap的使用詳解

    Golang日志操作庫(kù)zap的使用詳解

    zap?是?uber?開(kāi)源的一個(gè)高性能,結(jié)構(gòu)化,分級(jí)記錄的日志記錄包,本文主要為大家詳細(xì)介紹了zap的具體使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解

    Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解

    這篇文章主要為大家介紹了Go?io/fs.FileMode文件系統(tǒng)基本操作和權(quán)限管理深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Golang標(biāo)準(zhǔn)庫(kù)unsafe源碼解讀

    Golang標(biāo)準(zhǔn)庫(kù)unsafe源碼解讀

    這篇文章主要為大家介紹了Golang標(biāo)準(zhǔn)庫(kù)unsafe源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論