我有一個字串,通過 unicode 包含從紅心 A 到 10 紅心的卡片(練習需要使用字串,所以沒有陣列或切片)給定一個數字 n,我必須從這個字串中提取 n 張卡片。如果使用 for-range 得到的位比我需要的少,我該怎么做?
package main
import (
"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
}
uj5u.com熱心網友回復:
您的人口功能有一個錯誤:
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
uj5u.com熱心網友回復:
需要的人的正確代碼:
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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370920.html
下一篇:計算字串列中的出現次數
