генерировать арифметический тест - PullRequest
0 голосов
/ 02 ноября 2018

Я написал код в php для генерации теста, но у него есть две проблемы: он не считает метку и говорит, что встретил не числовое значение. Я пробовал кастинг, функция is_numeric по-прежнему не работает. Я был на этой Q более недели, я знаю, что это может быть просто для вас. У кого-нибудь есть идея, чтобы помочь мне?

Это ошибки:

Предупреждение. В C: \ xampp \ htdocs \ TMA.php в строке 63 встречается нечисловое значение.
Предупреждение: нечисловое значение, обнаруженное в C: \ xampp \ htdocs \ TMA.php в строке 63
Предупреждение: нечисловое значение, встречающееся в C: \ xampp \ htdocs \ TMA.php в строке 67
Предупреждение: нечисловое значение, встречающееся в C: \ xampp \ htdocs \ TMA.php в строке 67
Предупреждение: нечисловое значение, обнаруженное в C: \ xampp \ htdocs \ TMA.php в строке 71
Предупреждение: нечисловое значение, обнаруженное в C: \ xampp \ htdocs \ TMA.php в строке 71
Предупреждение: нечисловое значение, встречающееся в C: \ xampp \ htdocs \ TMA.php в строке 75
Предупреждение: нечисловое значение, встречающееся в C: \ xampp \ htdocs \ TMA.php в строке 75
Предупреждение: деление на ноль в C: \ xampp \ htdocs \ TMA.php в строке 75

<?php
if(isset($_POST['start'])) {
    $_POST['add'] = "+";
    $_POST['sub'] = "-";
    $_POST['mul'] = "x";
    $_POST['div'] = "/";
    $num1 = rand(0, 100);
    $num2 = rand(0, 100);
    $num3 = rand(0, 100);
    $num4 = rand(0, 100);
    $num5 = rand(0, 10);
    $num6 = rand(0, 10);
    $num7 = rand(1, 100);
    $num8 = rand(1, 100);

    while($num1 % 10 + $num2 % 10 >= 10) {
        $num1 = rand(0, 100);
        $num2 = rand(0, 100);
    }

    while($num4 % 10 > $num3 % 10 || $num4 > $num3) {
        $num3 = rand(0, 100);
        $num4 = rand(0, 100);

    }

    while($num8 > $num7 || ($num7 % $num8 != 0)) {
        $num7 = rand(1, 100);
        $num8 = rand(1, 100);
    }

    $_POST['o1'] = $num1;
    $_POST['o2'] = $num2;
    $_POST['op1'] = $num3;
    $_POST['op2'] = $num4;
    $_POST['op3'] = $num5;
    $_POST['op4'] = $num6;
    $_POST['op5'] = $num7;
    $_POST['op6'] = $num8;
} else {
    $_POST['o1'] = "";
    $_POST['o2'] = "";
    $_POST['op1'] = "";
    $_POST['op2'] = "";
    $_POST['op3'] = "";
    $_POST['op4'] = "";
    $_POST['op5'] = "";
    $_POST['op6'] = "";
    $_POST['add'] = "";
    $_POST['sub'] = "";
    $_POST['mul'] = "";
    $_POST['div'] = "";

}

$mark = 0;
if(isset($_POST['Mark'])) {

    if(($_POST['o1'] + $_POST['o2'] == ($_POST['ans2'])

           $mark = $mark + 2.5;
        else
            $mark = 0;
    if(($_POST['op1'] - $_POST['op2']) == $_POST['ans2'])
        $mark = $mark + 2.5;
    else
        $mark = 0;
    if(($_POST['op3'] * ($_POST['op4']) == ($_POST['ans3'])
            $mark = $mark + 2.5;
        else
            $mark = 0;
    if(($_POST['op5'] / $_POST['op6']) == $_POST['ans4'])
        $mark = $mark + 2.5;
    else
        $mark = 0;

}
?>
<html>
<head>
    <title>Simple Math Quiz</title>
    <head>
<body>
<h3>Your mark is <?php echo $mark; ?></h3>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <legend><strong><h1 'text-align:center '>Welcome To the math Quiz</h1> </strong></legend>
    </br>
    <label><strong>First Question :</strong></label></br>
    <input type="text" name="o1" value="<?php echo $_POST['o1']; ?>"/> <input type="text" name="add" width="10" value="<?php echo $_POST['add']; ?>"/> <input type="text" name="o2"
                                                                                                                                                              value="<?php echo $_POST['o2']; ?>"/>
    </br>
    <p>Answer :</p>
    <input type="text" name="ans"/>
    </br>
    </br>
    <label><strong>Second Question :</strong></label></br>
    <input type="text" name="op1" value="<?php echo $_POST['op1']; ?>"/> <input type="text" name="sub" value="<?php echo $_POST['sub']; ?>"/> <input type="text" name="op2"
                                                                                                                                                     value="<?php echo $_POST['op2']; ?>"/>
    </br>
    <p>Answer :</p>
    <input type="text" name="ans2"/>
    </br>
    </br>
    <label><strong>Third Question :</strong></label></br>
    <input type="text" name="op3" value="<?php echo $_POST['op3']; ?>"/> <input type="text" name="mul" value="<?php echo $_POST['mul']; ?>"/> <input type="text" name="op4"
                                                                                                                                                     value="<?php echo $_POST['op4']; ?>"/>
    </br>
    <p>Answer :</p>
    <input type="text" name="ans3"/>
    </br>
    </br>
    <label><strong>Fourth Question :</strong></label></br>
    <input type="text" name="op5" value="<?php echo $_POST['op5']; ?>"/> <input type="text" name="div" value="<?php echo $_POST['div']; ?>"/> <input type="text" name="op6"
                                                                                                                                                     value="<?php echo $_POST['op6']; ?>"/>
    </br>
    <p>Answer :</p>
    <input type="text" name="ans4"/>
    </br>
    </br>
    <button type="submit" name="Mark">Mark</button>
    <button type="submit" name="start">Start</button>
</form>
</body>
</html>

1 Ответ

0 голосов
/ 02 ноября 2018

Мое решение может быть не самым лучшим кодом, так как в нем не хватает многих вещей, таких как проверка полей и т. Д., Но для чисто образовательных целей это довольно легко понять.

В исходном коде было несколько проблем: форматирование, дополнительные скобки, именование переменных, несколько странная организация if else statements, знак терял свое значение

Именование переменных в целом должно быть лучше и уникальнее, поскольку это облегчает отслеживание их в коде, но опять же для образовательных целей я не сделал слишком уникальным.

Форматирование в целом может быть другим, но опять же, в целом, сохранение коротких строк кода является хорошей практикой.

Дополнительные скобки на самом деле происходят от небольшого форматирования и от приоритета оператора PHP. руководство по приоритету оператора PHP можно найти Здесь . Использование этого руководства позволит вам несколько избавиться от лишних браслетов.

Я немного усовершенствовал организацию операторов if, чтобы сделать логику более понятной. Я не видел необходимости в двух отдельных операторах if и сделал вместо него одно if, else if, else, которое реализует ту же логику, что и исходные.

Чтобы решить проблему потери значения метки, я добавил скрытое поле ДОПОЛНИТЕЛЬНО , чтобы сохранить текущее значение метки. Я также должен был добавить дополнительные $_POST по той же причине. Это краткосрочное решение sutibale для образовательных целей, но оно должно работать

Я также добавил несколько базовых параметров проверки. isset($_POST['op1']) проверяет, было ли заполнено поле ответа op1. is_numeric($_POST['op1']) проверяет, что значение, указанное в op1, действительно является числом.

Я исправил основные проблемы, описанные выше, и создал работоспособный пример решения. Тем не менее, решение оставляет некоторые важные вещи, которые новичку может быть трудно найти.

Код для моего решения:

<?php

if(isset($_POST['start']))
{
    $mark=0;

    $_POST['add']="+";
    $_POST['sub']="-";
    $_POST['mul']="x";
    $_POST['div']="/";
    $num1=rand(0,100);
    $num2=rand(0,100);
    $num3=rand(0,100);
    $num4=rand(0,100);
    $num5=rand(0,10);
    $num6=rand(0,10);
    $num7=rand(1,100);
    $num8=rand(1,100);

    while($num1%10+$num2%10>=10)
    {
        $num1=rand(0,100);
        $num2=rand(0,100);
    }
    while($num4%10>$num3%10 || $num4>$num3)
    {
        $num3=rand(0,100);
        $num4=rand(0,100);
    }  
    while($num8>$num7 || ($num7%$num8!=0))
    {
        $num7=rand(1,100);
        $num8=rand(1,100);
    }
    $_POST['op1']=$num1;
    $_POST['op2']=$num2;
    $_POST['op3']=$num3;
    $_POST['op4']=$num4;
    $_POST['op5']=$num5;
    $_POST['op6']=$num6;
    $_POST['op7']=$num7;
    $_POST['op8']=$num8;
    $_POST['mark']=0;
}
else if(isset($_POST['Mark']))
{   
    $mark=(float)$_POST['mark'];
    if(
        (isset($_POST['op1']) && is_numeric($_POST['op1']))
        && (isset($_POST['op2']) && is_numeric($_POST['op2']))
        && (isset($_POST['op3']) && is_numeric($_POST['op3']))
        && (isset($_POST['op4']) && is_numeric($_POST['op4']))
        && (isset($_POST['op5']) && is_numeric($_POST['op5']))
        && (isset($_POST['op6']) && is_numeric($_POST['op6']))
        && (isset($_POST['op7']) && is_numeric($_POST['op7']))
        && (isset($_POST['op8']) && is_numeric($_POST['op8']))
        && (isset($_POST['ans1']) && is_numeric($_POST['ans1']))
        && (isset($_POST['ans2']) && is_numeric($_POST['ans2']))
        && (isset($_POST['ans3']) && is_numeric($_POST['ans3']))
        && (isset($_POST['ans4']) && is_numeric($_POST['ans4'])))
    {
        if(($_POST['op1']+$_POST['op2'])==$_POST['ans1'])
           $mark=$mark+2.5;
        else
            $mark=0;
        if(($_POST['op3']-$_POST['op4'])==$_POST['ans2'])
            $mark=$mark+2.5;
        else
            $mark=0;
        if(($_POST['op3']*$_POST['op4'])==$_POST['ans3'])
            $mark=$mark+2.5;
        else
            $mark=0;
        if(($_POST['op5']/$_POST['op6'])==$_POST['ans4'])
            $mark=$mark+2.5;
        else
            $mark=0;

    }
    $_POST['mark']=$mark;
}
else 
{
    $_POST['op1']="";
    $_POST['op2']="";
    $_POST['op3']="";
    $_POST['op4']="";
    $_POST['op5']="";
    $_POST['op6']="";
    $_POST['op7']="";
    $_POST['op8']="";
    $_POST['add']="";
    $_POST['sub']="";
    $_POST['mul']="";
    $_POST['div']="";
    $_POST['mark']=0;
}
?>

<html>
    <head>
        <title>Simple Math Quiz</title>
    <head>
    <body>
        <h3>Your mark is <?php  echo $_POST['mark'];?></h3>
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
            <legend><strong><h1 'text-align:center '>Welcome To the math Quiz</h1> </strong></legend>
            </br>
            <label><strong>First Question :</strong></label>
            </br>
            <input type="text" name="op1" value="<?php  echo $_POST['op1']; ?>"/>
            <input type="text" name="add" width="10" value="<?php echo $_POST['add']; ?>"/>
            <input type="text" name="op2" value="<?php  echo $_POST['op2']; ?>"/>
            </br>
            <p>Answer :</p>
            <input type="text" name="ans1" />
            </br>
            </br>
            <label><strong>Second Question :</strong></label></br>
            <input type="text" name="op3" value="<?php  echo $_POST['op3']; ?>"/>
            <input type="text" name="sub" value="<?php  echo $_POST['sub']; ?>"/>
            <input type="text" name="op4" value="<?php  echo $_POST['op4']; ?>"/>
            </br>
            <p>Answer :</p>
            <input type="text" name="ans2" />
            </br>
            </br>
            <label><strong>Third Question :</strong></label></br>
            <input type="text" name="op5" value="<?php  echo $_POST['op5']; ?>"/>
            <input type="text" name="mul" value="<?php  echo $_POST['mul']; ?>"/>
            <input type="text" name="op6" value="<?php  echo $_POST['op6']; ?>"/>
            </br>
            <p>Answer :</p>
            <input type="text" name="ans3" />
            </br>
            </br>
            <label><strong>Fourth Question :</strong></label></br>
            <input type="text" name="op7" value="<?php  echo $_POST['op7']; ?>"/>
            <input type="text" name="div" value="<?php  echo$_POST['div']; ?>"/>
            <input type="text" name="op8" value="<?php  echo $_POST['op8']; ?>"/>
            </br>
            <p>Answer :</p>
            <input type="text" name="ans4" />
            </br>
            </br>
            <input type="hidden" name="mark" value="<?php  echo $_POST['mark']; ?>" />
            <button type="submit" id="Mark" name="Mark">Mark</button>
            <button type="submit" name="start">Start</button>
        </form>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...