Преброяване и сумиране

Често срещан случай е, че се интересуваме само от някои данни от колекция. Тук ще практикуваме как да броим и, ако е необходимо, да сумираме числа, които ни интересуват или изпълняват някакво условие.

Преброяване

Общата форма на програма (алгоритъм), чрез която броим елементите на колекция, които отговарят на дадено условие, изглежда така: .. code:

num = 0
for x in collection:
    if (x meets the condition):
        num += 1
print(num)

x + = a увеличава стойността на променливата x с a. Това всъщност е съкратена форма на израза x = x + a, която присвоява стойността x + a на променливата x.

x - = a намалява стойността на променливата x с a. Това е съкратена форма на израза x = x - a, който присвоява стойността x - a на променливата x.

В нашия пример, операторът num += 1 увеличава стойността на променливата br с 1.

Примери и задачи

Пример - среща:

Ръководителят на екипа предложи два варианта за времето на срещата, която ще се проведе утре. Всеки член на екипа написа в таблица кой термин би бил по-подходящ за него / нея (1 за първия мандат, 2 за втория). Тази информация беше прехвърлена на първия ред на следната програма.

Попълнете програмата - скрипт, така че предвид данните за гласуване на членовете на екипа, тя отпечатва колко са гласували за първия и колко за втория.

Например, можем да преброим броя на членовете на екипа, гласували за първия вариант, и да изчислим останалите в края.

Друг начин е да се броят гласовете както за първия, така и за втория.

или, ако приемем, че данните са „чисти“, т.е. няма стойности, различни от 1 и 2:

В случай, че информацията не е известна предварително, но трябва да бъде въведена, можем да напишем програма като тази:

В началото на тази програма зареждаме броя на гласовете n, след което използваме for цикъл, за да повторим зареждането и преброяването на един глас n пъти.

Задача - писмен тест:

Няколко души преминаха теста за владеене на трафика, което е предпоставка за полагане на практическата част от изпита. Тестът се счита за положен, ако броят на грешните отговори е по-малък или равен на 3.

В началото на скрипта са дадени резултатите от теста на една група кандидати (брой грешни отговори за всеки човек, който е взел теста). Допълнете го, като посочите колко кандидати са преминали теста.

Задача - басейн

За група деца се подготвя посещение на басейна. Всеки по-нисък от 160 сантиметра може да влезе само в по-малкия басейн. Организаторът се интересува колко деца са под 160 сантиметра, за да планират групите.

Детските височини са дадени в началото на програмата. Изпълнете програмата, за да отпечатате броя на децата под 160 сантиметра.

Задача - влажност

В ботаническа градина се измерва влагата на почвата веднъж на ден за редки и чувствителни видове. Влажността се изразява в числа от 0 до 1, а условията за развитие на растенията се считат за добри, когато влажността е между 0,3 и 0,7 (включително граници).

Стойностите на влажността (измерени за период от време) са дадени в началото на скрипта. Завършете скрипта, като отпечатате броя на дните, когато влажността не беше добра.

Сумиране

В една голяма група практически проблеми стигаме до резултата, като постепенно го изграждаме (натрупваме), докато преминаваме през данните. Например, ако се нуждаем от сумата от някои числа, можем да стигнем до нея по този общ начин:

total = 0
for num in collection:
    total += num
print(total)

Когато изчисляваме сумата от всички елементи на колекция, получаваме същия резултат, като извикваме функцията sum:

print(sum(collection))

Ще използваме постепенно формиране на резултатите, когато имаме нужда само от някои елементи от колекцията, тоест от тези, които отговарят на даденото условие. В този случай алгоритъмът за изчисляване на сумата обикновено изглежда така:

total = 0
for num in collection:
    if (num meets the condition):
        total += num
print(total)

За да се получи средната стойност на данните, които отговарят на дадено условие, е необходимо да се преброят и сумират такива данни и след това да се раздели тяхната сума на техния брой. В общия случай изглежда така:

total = 0
counter = 0
for num in collection:
    if (num meets the condition):
        total += num
        counter += 1
print(total / counter)

Обърнете внимание, че в Python сумата и средната стойност на избраните елементи от колекцията могат да бъдат получени по по-кратък и по-ефективен начин. Избрахме горния метод, защото изглежда почти същото, както в другите езици за програмиране.

Примери и задачи

Пример - резултат от IQ тест :

Дадени са резултатите от IQ тест за група хора. Резултат от -1 означава, че лицето не е взело теста. Завършете програмата, като отпечатате средната стойност, получена на теста.

Можем да напишем програмата така:

Задача - дежурна:

В компания X от време на време всички служители остават дежурни. Нормата за предишния период е 20 часа в дежурство. Всеки допълнителен час (над 20 часа) при дежурство се заплаща допълнително. Броят дежурни часове за всеки служител е посочен, а директорът иска да знае общия брой часове на дежурство над нормата.

Завършете програмата, като изчислите и отпечатате общия брой извънредни часове в дежурство.

Ако решите задачата правилно, трябва да получите оценка 25 за дадените данни, тъй като \((21-20)+(23-20)+(34-20)+(25-20)+(22-20)=25\).

Задача - среден добив:

В една овощна градина след третата година се следи добивът на слива на дърво. Дърветата с добиви под 3 килограма се считат за повредени или болни и ще бъдат извадени.

Дава се добивът на всички дървета в овощната градина. Завършете програмата, като изчислите и отпечатате средния добив на здрави дървета (с добиви от 3 килограма или повече).

Трябва да получите резултат от приблизително 14.757 за дадените данни.