Skip to main content

Command Palette

Search for a command to run...

Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.4

Updated
2 min read
Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.4

Treść zadania:

Podaj:

• ile różnych liczb zapisano w pliku liczby.txt

• ile liczb powtarza się dokładnie dwa razy w pliku liczby.txt

• ile liczb powtarza się dokładnie trzy razy w pliku liczby.txt. Dla pliku przyklad.txt odpowiedzią jest 10 1 0.

Rozwiązanie:

Zadanie sprowadza się do kilku podstawowych operacji - użycia set do wydobycia niepowtarzających się liczb i następnie wyświetlenie ilości tych, które powtarzają się 2 i 3 razy.

with open("dane/liczby.txt", "r") as f:
    nums = [int(num) for num in f.readlines()]

unique_nums = set(nums)

# counted_nums = {num: nums.count(num) for num in unique_nums}
counted_nums = {}
for num in unique_nums:
    counted_nums[num] = nums.count(num)

W pętli, dla każdego unikalnego numeru, wstawiamy do dict'a jego ilość wystąpień w liście nums . W komentarzu powyżej użyłem odpowiednika jako dict comprehension - zarówno dla list jak i słowników, w wielu przypadkach potrafi skrócić kod o kilka linijek i zapisać operacje nieco zwięźlej :)

repeated_2_nums = [
    num for num, occurences in counted_nums.items() if occurences == 2
]
repeated_3_nums = [
    num for num, occurences in counted_nums.items() if occurences == 3
]

Tym razem używamy już list comprehension do stworzenia list, które zawierają w sobie cyfry występujące w słowniku counted_nums odpowiednio 2 i 3 razy. counted_nums.items() przekształca słownik na listę w postaci [(klucz, wartosc), (klucz, wartosc)] .

Cały program:

with open("dane/liczby.txt", "r") as f:
    nums = [int(num) for num in f.readlines()]

unique_nums = set(nums)

# counted_nums = {num: nums.count(num) for num in unique_nums}
counted_nums = {}
for num in unique_nums:
    counted_nums[num] = nums.count(num)

repeated_2_nums = [
    num for num, occurences in counted_nums.items() if occurences == 2
]
repeated_3_nums = [
    num for num, occurences in counted_nums.items() if occurences == 3
]

print(f"ilosc roznych liczb: {len(unique_nums)}")
print(f"powtarzaja sie dokladnie 2 razy: {len(repeated_2_nums)}")
print(f"powtarzaja sie dokladnie 3 razy: {len(repeated_3_nums)}")

Wynik:

85
13
1

Źródło: https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/

More from this blog

matura z infy

17 posts