Не могу найти, как заставить php-файл вычислять среднее значение из полученного текстового файла, который содержит больше, чем просто числа - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть текстовый документ с набором имен и чисел, которые выглядят как так называемые grades.txt:

Carolyn:Pittman:93
Audrey:Ford:98
Debra:Prince:82
Jeff:Beldsoe:73
Jovante:Price:99
Pat:Clarke:91
Darla:Floyd:82
Charlene:Character:71
Kanji:Grant:83
Langston:Hughes:95

Я пытаюсь вычислить среднее значение этих оценок и вывести среднее значение.

Вот код:

 <html>
<head><title>Grades Results</title></head>

<body>

<?php
    // create a variable for scores 

    $grade = 0;
    $average = ($grade+$grade+$grade+$grade+$grade+$grade+$grade+$grade+$grade+$grade)/10;
    $highestGrade = 0;

    // open grades.txt data file
    $gradesFile = fopen("grades.txt", "r");
    // read first line
    $nextPerson = fgets($gradesFile); // Carolyn:Pittman:93

    while(!feof($gradesFile)){
        list($firstName, $lastName, $grade) = explode(":", $nextPerson);
        print("<p>$firstName</p>");
        print("<p>$lastName:</p>");
        print("<p>$grade</p>");


        $grade = intval($grade);
        // determine if ticket price was highest so far
        if ($grade > $highestGrade){
            $highestGrade = $grade;
            // print("<p>Highest grade $highestGrade </p>");
        } // end if
        // read next line
        $nextPerson = fgets($gradesFile);
    } // end while

    fclose($gradesFile);

    // print the highest price 
    print("<p>The average grade is $average </p>");
    print ("<p>Highest grade was $highestGrade </p>");

?>

</body>
</html>

Могу я ошибиться в формуле?

1 Ответ

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

Вы рассчитываете среднее значение, прежде чем читать файл. Когда вы присваиваете $average, $grade содержит 0, так что вы просто усредняете 10 значений 0, что составляет 0.

Вам необходимо вычислить общее количество в течение цикла, который читает файл, а в конце цикла вычислить среднее значение путем деления на количество прочитанных строк.

$total = 0;
$count = 0;

while($nextPerson = fgets($gradesFile)){
    list($firstName, $lastName, $grade) = explode(":", $nextPerson);
    print("<p>$firstName</p>");
    print("<p>$lastName:</p>");
    print("<p>$grade</p>");


    $grade = intval($grade);
    // determine if ticket price was highest so far
    if ($grade > $highestGrade){
        $highestGrade = $grade;
        // print("<p>Highest grade $highestGrade </p>");
    } // end if

    $total += $grade;
    $count++;
} // end while

if ($count > 0) {
    $average = $total / $count;
} else {
    $average = 0;
}
...