为了账号安全,请及时绑定邮箱和手机立即绑定

GO 编程语言中的标准 unicode

GO 编程语言中的标准 unicode

Go
牛魔王的故事 2022-10-17 15:55:42
我有一个字符串,其中包含通过 unicode 从红桃 A 到红桃 10 的卡片(该练习需要使用字符串,因此没有数组或切片)给定一个数字 n,我必须从该字符串中提取 n 张卡片。如果使用 for-range 我得到的位数比我需要的少,我该怎么做?package mainimport (    "fmt"    "math/rand"    "strconv"    "strings"    "time")func main() {    var n int    var deck string    rand.Seed(int64(time.Now().Nanosecond()))    n = readNumber()    deck = deckGenerator()    drawCards(deck, n)}func readNumber() (n int) {    for n <= 0 || n >= 10 {        fmt.Print("Enter number between 1 and 9: ")        fmt.Scan(&n)    }    return n}func deckGenerator() (deck string) {    for i := 0; i < 10; i++ {        deck += strconv.Itoa('\U0001F0B1' + i)    }    return deck}func drawCards(deck string, n int) {    for i := 0; i < n; i++ {        cardPulledOut, deck2 := drawCard(deck)        fmt.Println("Pulled out the card", cardPulledOut, "- Cards left in the deck:", deck2)    }}func drawCard(deck string) (cardPulledOut rune, deck2 string) {    for true {        card := rune(('\U0001F0B1') + rand.Intn(10)) //random number between 0 and 9 inclusive        for _, v := range deck {            fmt.Println(v, card)            /*                output: (infinity loop)                ...                49 127156                53 127156                56 127156                ...            */            if v == card {                deck = strings.Replace(deck, string(card), "", 1)                return cardPulledOut, deck2            }        }    }    return}
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

您的人口函数有一个错误:


func deckGenerator() (deck string) {

    for i := 0; i < 10; i++ {

        // deck += strconv.Itoa('\U0001F0B1' + i) // converts integers to their string equivalent e.g. "127156"


        deck += string(rune('\U0001F0B1' + i))    // fix

    }

    return deck

}

https://go.dev/play/p/E3sVRZK4exh


查看完整回答
反对 回复 2022-10-17
?
哔哔one

TA贡献1854条经验 获得超8个赞

需要的人的正确代码:


package main


import (

    "fmt"

    "math/rand"

    "strings"

    "time"

)


func main() {

    var n int

    var deck string


    rand.Seed(int64(time.Now().Nanosecond()))


    n = readNumber()

    deck = deckGenerator()

    drawCards(deck, n)


}


func readNumber() (n int) {

    for n <= 0 || n >= 10 {

        fmt.Print("Enter number between 1 and 9: ")

        fmt.Scan(&n)

    }

    return n

}


func deckGenerator() (deck string) {

    for i := 0; i < 10; i++ {

        //deck += strconv.Itoa('\U0001F0B1' + i)

        deck += string(rune('\U0001F0B1' + i))

    }

    return deck

}


func drawCards(deck string, n int) {

    var cardPulledOut rune

    for i := 0; i < n; i++ {

        cardPulledOut, deck = drawCard(deck)

        fmt.Println("Pulled out the card", string(rune(cardPulledOut)), "- Cards left in the deck:", deck)

    }

}


func drawCard(deck string) (card rune, deck2 string) {

    for true {

        card = rune(('\U0001F0B1') + rand.Intn(10)) //random number between 0 and 9 inclusive


        for _, v := range deck {

            //fmt.Println(v, card)

            if v == card {

                deck2 = strings.Replace(deck, string(card), "", 1)

                return card, deck2

            }

        }

    }

    return

}


查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信