You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP猜数字游戏Bug:无法触发猜数提示功能

PHP猜数字游戏运行异常修复

问题现象

开发的PHP猜数字游戏仅输出初始引导语:I'm going to think of numbers between 1 and 10 (inclusive). Do you think you can guess correctly?,无法显示"Make your guess..."的输入提示,也无法完成10轮游戏的需求。

项目需求

PHP数字猜谜游戏
"在这个项目中,你需要创建一个数字猜谜游戏。程序会生成1到10之间的随机数。你要运行游戏10次,并向用户展示他们的猜谜能力相关信息。"

问题代码

$play_count = 0;
$correct_guesses = 0;
$guess_high = 0;
$guess_low = 0;
echo "I'm going to think of numbers between 1 and 10 (inclusive). Do you think you can guess correctly?
";

function guessNumber()
{
  global $play_count,$correct_guesses,$guess_high,$guess_low;
 
  $play_count++;
  $num =  rand(1,10);

  echo "
Make your $guess...
";
  $guess = intval(readline(">>"));
  //$guess = intval($guess);

  echo "Round: $play_count 
 my number: $num, 
Your guess: $guess";
    
  if ($guess === $num) {
    $correct_guesses++;
  }

  if ($guess > $num) {
    $guess_high++;
  }

  if ($guess < $num){
    $guess_low++;
  }

  echo guessNumber(10);
  echo guessNumber(12);

  $percent_correct = $correct_guesses/$play_count * 100;

  echo "
After $play_count rounds, here are some facts about your guessing:
You guessed the number correctly $percent_correct% of the time.
" ;

  if ($guess_high > $guess_low){
    echo "When you guessed wrong, you tended to guess high.";
  } else  {
    echo "When you guessed wrong, you tended to guess low." ;
  }
}

问题分析与修复点

  1. 函数未触发执行:仅定义了guessNumber()函数,但没有调用它,程序只执行开头的echo语句就结束了。
  2. 递归调用错误:函数内部重复调用guessNumber(10)和guessNumber(12),会导致无限递归,且函数本身无参数接收逻辑,传参完全无效。
  3. 变量错误:提示语里的$guess变量此时未定义,应改为固定文本Make your guess...。
  4. 轮次逻辑错误:需求是运行10次游戏,需用循环控制轮次,而非递归调用函数。

修复后的完整代码

$play_count = 0;
$correct_guesses = 0;
$guess_high = 0;
$guess_low = 0;
echo "I'm going to think of numbers between 1 and 10 (inclusive). Do you think you can guess correctly?\n";

// 循环执行10轮游戏
for ($i = 0; $i < 10; $i++) {
    $play_count++;
    $num = rand(1, 10);

    echo "\nMake your guess...\n";
    $guess = intval(readline(">> "));

    echo "Round: $play_count\nMy number: $num\nYour guess: $guess\n";
    
    if ($guess === $num) {
        $correct_guesses++;
        echo "You guessed correctly!\n";
    } elseif ($guess > $num) {
        $guess_high++;
        echo "Your guess was too high!\n";
    } else {
        $guess_low++;
        echo "Your guess was too low!\n";
    }
}

// 计算并输出统计信息
$percent_correct = round(($correct_guesses / $play_count) * 100, 2);

echo "\nAfter $play_count rounds, here are some facts about your guessing:\n";
echo "You guessed the number correctly $percent_correct% of the time.\n";

if ($guess_high > $guess_low) {
    echo "When you guessed wrong, you tended to guess high.\n";
} elseif ($guess_low > $guess_high) {
    echo "When you guessed wrong, you tended to guess low.\n";
} else {
    echo "When you guessed wrong, you had an even split between high and low guesses.\n";
}

修复说明

  • 用for循环控制10轮游戏,替代错误的递归调用
  • 修正提示语中的变量错误,改为正确的文本提示
  • 增加每轮游戏的结果反馈(猜对/猜高/猜低)
  • 优化统计信息输出,增加平局判断逻辑
  • 移除不必要的全局变量和无效函数调用

内容的提问来源于stack exchange,提问作者deda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:40:55