2016-11-16 1 views
-3

Я задал следующую проблему и попросил написать для нее алгоритм решения с использованием python.Выполнение некоторых логических ошибок с моим кодом

проблема: Напишите программу Python, чтобы определить учащегося с самым высоким средним уровнем. Каждый студент занимает промежуток времени и финал. Оценки должны быть оценены как от 0 до 100 включительно. Введите имя и классы каждого ученика и подсчитайте среднее число учащихся. Выведите имя учащегося с лучшим средним и средним.

Вот мой код:

def midTerm(): 
    midtermScore = int(input("What is the midterm Score: ")) 
    while (midtermScore <= 0 or midtermScore >= 100): 
     midtermScore = int(input("Please enter a number between 0 and 100: ")) 
    return midtermScore 
def final(): 
    finalScore = int(input("What is the final Score: ")) 
    while (finalScore < 0 or finalScore > 100): 
     finalScore = int(input("Please enter a number between 0 and 100: ")) 
    return finalScore 

total = 0 
highest = 0 
numStudents = int (input("How Many Students are there? ")) 
while numStudents < 0 or numStudents > 100: 
    numStudents = int (input("Please enter a number between 0 and 100? ")) 
for i in range (1, numStudents+1): 
    students = (input("Enter Student's Name Please: ")) 
    score = (midTerm()+ final()) 
    total += score 
avg = total/numStudents 
if (highest < avg): 
    highest = avg 
    winner = students 
print ("The Student with the higgest average is: ", winner, "With the highest average of: ", avg) 

Проблема Я бегу в это последняя часть. Программа не печатает имя человека с наивысшим средним значением, но имя человека, которое было введено в последний раз. Я очень смущен тем, как идти дальше отсюда. Не могли бы вы помочь? Заранее благодарю за любую помощь.

+2

Посмотрите на строку: 'students = (input (« Введите имя студента Please: »))' - вы переписываете его каждый раз через цикл. У вас тоже проблема с параметром numStudents. Это также было бы хорошим временем, когда кто-либо научился [debug python] (https://pymotw.com/2/pdb/), так как от быстрого взгляда есть несколько логических ошибок, которые в конечном итоге дадут вам неправильные результаты , – birryree

+1

Вы назначаете «победитель = ученики», поэтому смотрите на значение студентов, и ему присваивается «students = (input (« Введите имя студента Please: »))' вы никогда не назначаете правильного ученика, что приводит к логической ошибке. – kyle

+0

Здесь может быть хороший вопрос, но ваш вопрос не подходит. Просмотрите http://stackoverflow.com/help/how-to-ask. –

ответ

1

Вы не за горами. Посмотри здесь:

for i in range (1, numStudents+1): 
    students = (input("Enter Student's Name Please: ")) 
    score = (midTerm()+ final()) 
    total += score 
avg = total/numStudents 
if (highest < avg): 
    highest = avg 
    winner = students 

Кроме того, ошибки отступа (надеюсь, просто неуклюжее копирование оклейка) Вы на самом деле не вычисления среднего балла каждого студента в любом месте. Попробуйте что-то вроде этого:

for i in range (numStudents): 
    student_name = (input("Enter Student's Name Please: ")) 
    student_avg = (midTerm() + final())/2 # 2 scores, summed and divided by 2 is their average score 
    if (highest < student_avg): 
     highest = student_avg 
     winner = student_name # save student name for later 

print ("The Student with the higgest average is: ", winner, "With the highest average of: ", highest) 

Похоже, вы изначально пытаются вычислить общее среднее класса, который не то, что описываемое постановки задачи. Надеюсь это поможет!

+0

Большое вам спасибо за то, что нашли время, чтобы помочь решить проблему. Я попытался изо всех сил ответить на это сам, прежде чем публиковать, но у меня не осталось выбора. Конечно, я python noob, и я все еще учусь. Ваш ответ был лучше, чем некоторые из комментариев выше (на самом деле комментарии выше препятствуют людям задавать вопросы). Еще раз спасибо! – Doug

+1

Несомненно, я думал, что ревностное downvoting было немного суровым, но у SO есть стандарты, чтобы придерживаться. Мы все были noobs однажды, ИМО достойный вопрос с неопределенным названием по-прежнему остается достойным вопросом. Несмотря ни на что, добро пожаловать в SO! – Will

Смежные вопросы