我正在嘗試在GO中開發一個猜謎游戲,讓用戶嘗試三次正確猜出亂數。
它似乎最有效,我正在使用 for 回圈來計算剩余的生命數量。如果我猜對了數字,它會列印出我想要的內容:
“你猜到了!”
但問題是,例如,亂數是5。如果我猜到4,它會列印
“太低”
這是正確的,但是在第二次嘗試中,如果我猜6,它仍然會說
“太低”
或者,如果亂數是5,并且在第一次嘗試時我猜到6,它會列印
“太高”
如果我在第二次嘗試時猜4,它仍然會說
“太高”
我想我在某個地方陷入了 for 回圈,但我不知道如何在不將嘗試數重置為 3 的情況下退出它。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
secret := getRandomNumber()
fmt.Println(secret)
fmt.Println("Guess the number")
_guess := guessRandomNumber()
for i := 3; i > 0; i-- {
if _guess < secret {
fmt.Println("Too low")
fmt.Println("You have", i, "guesses left.")
} else if _guess < secret {
fmt.Println("Too low")
fmt.Println("You have", i, "guesses left.")
guessRandomNumber()
} else if _guess > secret {
fmt.Println("Too high")
fmt.Println("You have", i, "guesses left.")
guessRandomNumber()
}
if _guess == secret {
fmt.Println("You guessed it!")
i = 0
} else if _guess < secret {
fmt.Println("Too low")
fmt.Println("You have", i, "guesses left.")
guessRandomNumber()
} else if _guess > secret {
fmt.Println("Too high")
fmt.Println("You have", i, "guesses left.")
guessRandomNumber()
}
}
}
func getRandomNumber() int {
rand.Seed(time.Now().UnixNano())
return rand.Int() % 11
}
func guessRandomNumber() int {
var guess int
//fmt.Println("Guess again:")
fmt.Scanf("%d", &guess)
return guess
}
任何幫助將不勝感激。到目前為止,我真的很喜歡GO 。
uj5u.com熱心網友回復:
您沒有將函式的輸出分配guessRandomNumber()給_guess. 除此之外,您還使用了 extra if-else,這不是必需的。此外,您向用戶嘗試了 4 次而不是 3 次。您可以嘗試:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
secret := getRandomNumber()
fmt.Println(secret)
fmt.Println("Guess the number")
var _guess int
for i := 3; i > 0; i-- {
_guess = guessRandomNumber()
if _guess == secret {
fmt.Println("You guessed it!")
break
} else if _guess < secret {
fmt.Println("Too low")
fmt.Println("You have", i-1, "guesses left.")
} else {
fmt.Println("Too high")
fmt.Println("You have", i-1, "guesses left.")
}
if i != 1 {
fmt.Println("Guess Again:")
}
}
}
func getRandomNumber() int {
rand.Seed(time.Now().UnixNano())
return rand.Int() % 11
}
func guessRandomNumber() int {
var guess int
//fmt.Println("Guess Number:")
fmt.Scanf("%d", &guess)
return guess
}
https://onlinegdb.com/aOI-CG4S-
uj5u.com熱心網友回復:
我最終使用帶有 switch 陳述句的 for 回圈來解決這個問題。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
secret := getRandomNumber()
fmt.Println(secret)
fmt.Println("Guess the number")
_guess := guessRandomNumber()
guessCorrect := false
guessCount := 3
for guessCorrect == false && guessCount != 0 {
switch {
case _guess < secret:
fmt.Println("Too low,", guessCount, "guesses left.")
fmt.Scanf("%d", &_guess)
guessCount--
continue
case _guess > secret:
fmt.Println("Too high", guessCount, "guesses left.")
fmt.Scanf("%d", &_guess)
guessCount--
continue
default:
fmt.Println("You got it!")
guessCorrect = true
}
}
}
func getRandomNumber() int {
rand.Seed(time.Now().UnixNano())
return rand.Int() % 11
}
func guessRandomNumber() int {
var guess int
fmt.Scanf("%d", &guess)
return guess
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480964.html
