Преброяване c помощта на списъци¶
Тук ще практикуваме използване на списъци и комбиниране на техниките, които сме научили досега.
Пример - най-малкото положително число
Даден е набор от числа. Отпечатайте най-малкото положително число от този пакет.
Тази задача е комбинация от задачите, които сме свършили досега. В първата част на заданието копираме положителните числа от низа в списъка, а във втората част прилагаме функцията min към списъка с положителни числа.
Споменахме, че функциите min, max, sum, len могат да се прилагат към различни колекции и това показахме с примери за диапазон и низ (с изключение на сумата от елементите на низ). Сега виждаме, че функцията min също приема списък като свой аргумент. По същия начин, както за функциите max, sum, len.
Пример - неуспехи
В една фабрика има 10 машини и те са представени с числа от 0 до 9. За всяка възникнала неизправност се записва номерът на неизправната машина. Даден е низ с тези номера, описващи провалите.
Напишете програма, която изброява колко пъти е функционирала всяка от машините, последвана от номерата на машините, които никога не са се повредили.
Първата част от заданието изисква да броим броя пъти, когато всяко число се появява във входните данни. За да разрешим тази част от задачата, създаваме списъка num_failures от 10 елемента (които първоначално са нула), в които всеки елемент съответства на една машина и отчита нейните неуспехи.
num_failures = [0] * 10
for machine in failures:
num_failures[machine] += 1
След това печатаме за всяка машина колко неизправности е имала. Ние използваме диапазона тук, защото искаме да отпечатаме поредния номер на машината и броя на отказите за всяка машина:
for i in range(10):
print('Machine', i, 'failed', num_failures[i], 'times.')
Втората част на заданието ни моли да отпечатаме номера на машината, които никога не са се провалили. Това са машини, чийто брой повреди е нула. Отново преминаваме през списъка num_failures и вмъкваме индекси на елементи, равни на нула в новия списък, наречен not_failed:
not_failed = []
for i in range(10):
if num_failures[i] == 0:
not_failed.append(i)
Накрая отпечатваме елементите от списъка not_failed.
print('Machines that did not break down:')
for machine in not_failed:
print(machine)
Ето как изглежда цялата програма:
Задача - футболни фенове
Футболни фенове от 8 държави идват на турнира в град X. Организаторите на турнири искат да знаят колко фенове идват от всяка страна.
Всяка страна е представена с число от 0 до 7. Посочените числа за всеки фен показват от коя страна идва той. Попълнете програмата по-долу, която изброява за всяка страна колко фенове идват от нея.
Заданието изисква всяко число от 0 до 7 да преброи колко пъти се появява това число сред дадените числа. Липсващата част в скрипта е много подобна на броенето на неуспехите в дадения пример.
Задача - повечето фенове
Това е продължение на предишната задача. Сега организаторите допълнително искат да знаят от коя страна идват повечето фенове.
Копирайте предишната програма и я приложете, така че в крайна сметка да отпечата номера на страната, от която идват повечето фенове.
Ако изпълните задачата правилно, програмата трябва да отпечата номер 3, тъй като този номер се появява най-често в данните.
Задача - Най-голямото отрицателно число
Даден е набор от числа. Отпечатайте най-големия отрицателен номер.
Задача - малки продажби
Даден е низ, който съдържа сумите на клиентските сметки в една търговска мрежа. Всички продажби под 500 се считат за малки продажби. Напишете програма, която изчислява общите приходи от всички малки продажби.
Има два начина за решаване на тази задача. Единият е да извлечете малки количества в отделен списък и да приложите функцията за сумиране към този списък. Друг начин е постепенното натрупване на сумата, както направихме в урока за броене и сумиране.