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

PHP勾股定理三边输入验证功能实现咨询

解决勾股定理验证的问题

嘿,我看了你的代码,发现它现在是在自动计算斜边并输出,而不是验证用户输入的三个值是否符合勾股定理对吧?咱们来调整一下,实现你想要的功能——当输入直角边3、4和斜边5时输出good,否则输出false。

现有代码的问题

你当前的代码把用户输入的斜边值$schuin给覆盖了,用计算出来的斜边结果替换了它,这样根本没法验证用户输入的第三个值是否正确。而且也没做输入合法性的校验,比如用户输入非数字的话会出问题。

修正后的代码实现

下面是调整后的完整代码,我加了注释说明每一步的作用:

<form method="POST">
    <label>Rechthoek verticaal</label>
    <!-- 加上type="number"确保输入为数字,step="any"支持小数,required强制填写 -->
    <input name="vert" type="number" step="any" required>
    <label>Rechthoek horizontaal</label>
    <input name="hor" type="number" step="any" required>
    <label>Schijne zijde</label>
    <input name="schuin" type="number" step="any" required>
    <input type="submit" name="submit" value="验证答案">
</form>

<?php
if(isset($_POST['submit'])) {
    // 将输入转为浮点数,避免字符串运算导致的错误
    $vert = (float)$_POST['vert'];
    $hor = (float)$_POST['hor'];
    $userSchuin = (float)$_POST['schuin'];

    // 计算两个直角边的平方和
    $squaresSum = pow($vert, 2) + pow($hor, 2);
    // 计算用户输入斜边的平方
    $schuinSquare = pow($userSchuin, 2);

    // 浮点数比较不能直接用==,因为存在精度误差,所以用绝对值差判断
    if(abs($squaresSum - $schuinSquare) < 0.0001) {
        echo "good";
    } else {
        echo "false";
    }
}
?>

关键改进点

  • 输入校验:给输入框加上type="number"和required,确保用户只能输入数字且必须填写所有字段,减少无效输入的情况。
  • 保留用户输入:把用户输入的斜边存在$userSchuin变量里,不覆盖,这样才能和直角边的平方和做对比。
  • 浮点数精度处理:由于浮点数计算可能存在微小误差,比如3²+4²理论上是25,但实际计算可能是24.999999999999996,所以用绝对值差小于0.0001来判断是否相等,避免误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:55:11