我正在制作一個亂數猜測程式,用戶嘗試猜測 1 到 100 之間的數字,同時接收它們是更高還是更低。其中一項規定是必須有一個函式可以在用戶輸入 Q 或 q 時退出程式,所以我將回圈格式化為:
$RandomNumber = Get-Random -Minimum 1 -Maximum 101
write-output $RandomNumber
$GuessNumber = 0
While ($RandomNumber -ne $Guess)
{
$Guess = Read-Host -Prompt 'Guess a number between 1 and 100 Or enter Q to quit'
if ($Guess -eq 'q' -or 'Q')
{
Write-output "Thank you for playing"
BREAK
}
if ($Guess -gt 100 -or $Guess -le 1)
{
Write-Output 'Invalid Input please enter a number between 1 and 100'
}
if ($Guess -le $RandomNumber)
{
Write-output 'Your number is lower than the hidden number please guess again'
$GuessNumber = $GuessNumber 1
}
if ($Guess -gt $RandomNumber)
{
Write-output 'Your number is higher than the hidden number please guess again'
$GuessNumber = $GuessNumber 1
}
if ($Guess -eq $RandomNumber)
{
$GuessNumber = $GuessNumber 1
Write-output 'Congratulations you guessed the number in' $GuessNumber 'tries'
}
}
我遇到的問題是即使輸入等于 10,例如它仍然輸出“謝謝你玩”,這意味著如果回圈已經生效。我不確定為什么會發生這種情況,因為我是 powershell 新手,并且發生這種情況的原因會有所幫助
uj5u.com熱心網友回復:
代替
if ($Guess -eq 'q' -or 'Q')
和
if ($Guess -eq 'q' -or $Guess -eq 'Q')
uj5u.com熱心網友回復:
您的錯誤部分來自-or 'Q'評估為$true always:
$false -or 'somestring' # => True
而且還值得注意的是,-eq不區分大小寫('q' -eq 'Q'is $true)。
另一個錯誤來自將字串與整數進行比較。在這種情況下,輸出Read-Host是:System.String
'50' -gt 100 # => True
'50' -lt 100 # => False
另一方面,您可以使用switch陳述句使您的代碼更具可讀性。對于輸入驗證,您可以使用遞回腳本塊來確保其始終正確(介于 1 和 100或Q之間)。要打破外while回圈,您可以使用標記break的.
$RandomNumber = Get-Random -Minimum 1 -Maximum 101
$validation = {
$choice = Read-Host 'Guess a number between 1 and 100 Or enter Q to quit'
if($choice -notmatch '^([1-9][0-9]?|100|q)$') {
Write-Warning 'Invalid Input, try again.'
return & $validation
}
$choice
}
$attempts = 0
:outer while($true) {
$choice = & $validation
if($choice -eq 'q') {
# End the Game
'Thanks for Playing'
break
}
$attempts
switch([int]$choice) {
{$_ -gt $RandomNumber} {
"$_ was greater than hidden number"
break
}
{$_ -lt $RandomNumber} {
"$_ was lower than hidden number"
break
}
default {
"You guessed right after $attempts tries, Congratulations!"
break outer
}
}
}
uj5u.com熱心網友回復:
條件不對。$Guess -eq 'q' -or 'Q'總是回傳 true,它應該是$Guess -eq 'q' -or $Guess -eq 'Q'.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/424465.html
上一篇:如何制作從最小到最大的回圈?
下一篇:回圈列出具有NA的檔案名
