最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言實現(xiàn)猜謎小游戲

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

前言

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

技術點

在本文中將會使用到以下技術點:隨機數(shù)、隨機數(shù)種子、獲取當前時間戳、兩種讀取終端輸入方式等。

隨機數(shù)

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

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

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

隨機數(shù)種子

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

為了保證種子值的隨機性,一般采用系統(tǒng)時間的毫秒值作為種子值,因為系統(tǒng)時間的毫秒值是一直變動的。

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

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

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

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

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

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

接收用戶輸入

Reader

os.Stdin指向標準輸入文件/dev/stdin,os.Stdinos包的一個變量。它是os包的NewFile函數(shù)的返回值。

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

reader := bufio.NewReader(os.Stdin)

設置按行讀?。?/p>

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

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

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

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

guess, err := strconv.Atoi(input)

Scanf

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

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

完整代碼

因為用戶不一定一次就猜中數(shù)據(jù),我們可以使用for循環(huán),當用戶猜不中時,可以讓用戶再繼續(xù)猜直到猜中。

下面來看下完整的代碼。

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

來運行一下代碼看下最終效果:

總結

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

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

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

以上就是Go語言實現(xiàn)猜謎小游戲的詳細內容,更多關于Go實現(xiàn)猜謎小游戲的資料請關注腳本之家其它相關文章!

相關文章

  • Golang實現(xiàn)單元測試中的接口層

    Golang實現(xiàn)單元測試中的接口層

    接口層主要負責的就是請求的處理,最常見的就是?HTTP?請求的處理。這篇文章主要為大家介紹了Golang如何實現(xiàn)單元測試中的接口層,需要的可以參考一下
    2023-03-03
  • Golang HTTP 服務平滑重啟及升級的思路

    Golang HTTP 服務平滑重啟及升級的思路

    Golang HTTP服務在上線時,需要重新編譯可執(zhí)行文件,關閉正在運行的進程,然后再啟動新的運行進程。這篇文章主要介紹了Golang HTTP 服務平滑重啟及升級,需要的朋友可以參考下
    2020-04-04
  • Go語言學習之context包的用法詳解

    Go語言學習之context包的用法詳解

    日常Go開發(fā)中,Context包是用的最多的一個了,幾乎所有函數(shù)的第一個參數(shù)都是ctx,那么我們?yōu)槭裁匆獋鬟fContext呢,Context又有哪些用法,底層實現(xiàn)是如何呢?相信你也一定會有探索的欲望,那么就跟著本篇文章,一起來學習吧
    2022-10-10
  • Golang CSP并發(fā)機制及使用模型

    Golang CSP并發(fā)機制及使用模型

    這篇文章主要為大家介紹了Golang CSP并發(fā)機制及使用模型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • golang的空標識符理解

    golang的空標識符理解

    今天小編就為大家分享一篇關于golang的空標識符理解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Golang使用Gin創(chuàng)建Restful API的實現(xiàn)

    Golang使用Gin創(chuàng)建Restful API的實現(xiàn)

    本文主要介紹了Golang使用Gin創(chuàng)建Restful API的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Go語言實現(xiàn)并發(fā)控制的常見方式詳解

    Go語言實現(xiàn)并發(fā)控制的常見方式詳解

    這篇文章主要為大家詳細介紹了Go語言實現(xiàn)并發(fā)控制的幾種常見方式,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-03-03
  • Go語言原子操作atomic的使用

    Go語言原子操作atomic的使用

    本文介紹了Go語言原子操作的使用方法,原子操作是一種無鎖的技術,可通過CPU指令實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 詳解Go語言中結構體與JSON間的轉換

    詳解Go語言中結構體與JSON間的轉換

    這篇文章主要為大家詳細介紹了Go語言中結構體與JSON間的轉換,文中的示例代碼講解詳細,對學習Go語言有一定的幫助,需要的可以參考一下
    2022-12-12
  • GoFrame框架使用避坑指南和實踐干貨

    GoFrame框架使用避坑指南和實踐干貨

    這篇文章主要為大家介紹了GoFrame框架使用避坑指南和實踐干貨,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論

沙湾县| 郎溪县| 大荔县| 墨脱县| 云南省| 固原市| 方城县| 永济市| 隆子县| 赣州市| 托里县| 章丘市| 边坝县| 萝北县| 罗江县| 建平县| 大英县| 民和| 镇原县| 忻城县| 汶上县| 永济市| 当阳市| 娱乐| 虹口区| 临泉县| 田阳县| 安平县| 安丘市| 临朐县| 海阳市| 偃师市| 尉犁县| 图木舒克市| 无锡市| 天长市| 黑龙江省| 日照市| 高青县| 鹤岗市| 竹北市|