Как найти частоту оценок каждой оценки от 0 до общего количества оценок в кортеже - PullRequest
0 голосов
/ 18 июня 2019

Педагог находится в процессе составления нескольких отчетов на основе оценок, набранных учащимися своего класса в ходе оценки проекта.Предположим, что оценки ее 10 учеников доступны в кортеже.Оценок не хватает 25.

Напишите программу на python для реализации следующих функций: find_more_than_average (): найдите и верните процент студентов, набравших больше среднего балла в классе

sort_marks (): сортировка оценок в порядке возрастания от 0 до 25. Сортированные значения должны быть заполнены в списке и возвращены

generate_frequency (): найти, сколько учеников набрали одинаковые оценки.Например, сколько набрало 0, сколько набрало 1, сколько набрало 3 ... сколько набрало 25. Результат должен быть заполнен в списке и возвращен.

я получил среднее значение иотсортированные части правильные. но для частоты, если элемент повторяется дважды, я получил частоту как 1

list_of_marks=(12,18,25,24,2,5,18,20,20,21)

def find_more_than_average():
    sumi=0
    count=0
    sumi=sum(list_of_marks)
    avg=sumi/len(list_of_marks)
    for i in list_of_marks:
        if(i>avg):
            count=count+1
    morethanavg=(count/len(list_of_marks))*100
    return morethanavg


    #Remove pass and write your logic here

def sort_marks():
    return sorted(list_of_marks)
    #Remove pass and write your logic here

def generate_frequency():
    #Remove pass and write your logic here
    gener=[]
    for i in range(0,26):
        if i in list_of_marks:
            gener.append(1)
        else:
            gener.append(0)
    return gener


print(find_more_than_average())
print(generate_frequency())
print(sort_marks())

ожидаемый - [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 1, 0, 0, 1, 1] фактический- [0, 0, 1, 0, 0, 1,0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1]

1 Ответ

0 голосов
/ 18 июня 2019

Когда вы делаете:

if i in list_of_marks:
   gener.append(1)
else:
   gener.append(0)

, должно быть ясно, что вы никогда не сможете получить значение, отличное от 0 или 1. Но вы хотите, чтобы число этих значений не было просто 1, указывающим, что значение находится всписок.Один из вариантов состоит в том, чтобы сначала создать список нулей, затем пройти по меткам и добавить один к индексу, соответствующему метке:

def generate_frequency():
    gener = [0] * 26
    for m in list_of_marks:
        gener[m] += 1
    return gener

Теперь, когда вы увидите 20 дважды, вы увеличите generator[20] в два раза срезультат:

[0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 1, 0, 0, 1, 1]
...