Sortowanie listy miast

Zadanie 5 z 9 · rozdział 22Trudność: 1 z 3classsortobiekty

Treść zadania

Klasa Miasto ma atrybuty:

  • nazwa (napis),
  • liczba_mieszkancow (liczba naturalna).

Uzupełnij metodę __repr__, tak aby obiekt był wypisywany w postaci Miasto("NAZWA", LICZBA), np. Miasto("Berlin", 3800000). Dzięki temu print(lista_miast) wypisze całą listę w czytelnej postaci.

Wczytaj listę miast, a następnie:

a) posortuj miasta alfabetycznie według nazwy,
b) posortuj miasta rosnąco według liczby mieszkańców (miasta o tej samej liczbie mieszkańców zachowują kolejność z wejścia).

Dane wejściowe

  • 1. linia: liczba miast $N$
  • kolejne $N$ linii: nazwa miasta (bez spacji) i liczba mieszkańców, oddzielone spacją

Dane wyjściowe

  • 1. linia: lista miast posortowana według podpunktu a)
  • 2. linia: lista miast posortowana według podpunktu b)

Każdą listę wypisz przez print(lista) — w formacie [Miasto("NAZWA", LICZBA), Miasto("NAZWA", LICZBA), …].

Ograniczenia

  • $1 \le N \le 20$
  • Nazwy miast są różne.

Przykład

Wejście
3
Paris 2150000
Berlin 3800000
New_York 8400000
Wyjście
[Miasto("Berlin", 3800000), Miasto("New_York", 8400000), Miasto("Paris", 2150000)]
[Miasto("Paris", 2150000), Miasto("Berlin", 3800000), Miasto("New_York", 8400000)]

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 22

Zadania w tym rozdziale pokazują, jak sortować w praktyce: napisy, słowa, pary, obiekty — często według własnego kryterium. Tutaj wolno (a nawet warto) korzystać z wbudowanych narzędzi Pythona: sorted(), list.sort() i parametru key=.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Jeśli wejściem jest napis — wczytaj całą linię (łącznie ze spacjami).
  • Jeśli wejściem jest lista — najpierw podana jest liczba elementów $N$, a potem elementy (w jednej linii albo w kolejnych liniach — zależnie od zadania).
  • Napisy porównujemy tak jak Python, czyli według kodów znaków Unicode: wielkie litery są „mniejsze” od małych ('Z' < 'a'), a polskie litery są „większe” od wszystkich liter alfabetu łacińskiego ('z' < 'ą').
  • Sortowanie w Pythonie (sorted(), list.sort()) jest stabilne: elementy równe według kryterium sortowania zachowują kolejność z wejścia. Korzystają z tego zadania, w których mogą wystąpić remisy.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
1
Krakow 800000
Oczekiwane wyjście
[Miasto("Krakow", 800000)]
[Miasto("Krakow", 800000)]

Test 2

Nie uruchomiono
Wejście
2
Warszawa 1800000
Gdansk 470000
Oczekiwane wyjście
[Miasto("Gdansk", 470000), Miasto("Warszawa", 1800000)]
[Miasto("Gdansk", 470000), Miasto("Warszawa", 1800000)]

Test 3

Nie uruchomiono
Wejście
4
Torun 200000
Opole 127000
Radom 200000
Elk 61000
Oczekiwane wyjście
[Miasto("Elk", 61000), Miasto("Opole", 127000), Miasto("Radom", 200000), Miasto("Torun", 200000)]
[Miasto("Elk", 61000), Miasto("Opole", 127000), Miasto("Torun", 200000), Miasto("Radom", 200000)]

Test 4

Nie uruchomiono
Wejście
3
zakopane 27000
Zabrze 170000
Augustow 30000
Oczekiwane wyjście
[Miasto("Augustow", 30000), Miasto("Zabrze", 170000), Miasto("zakopane", 27000)]
[Miasto("zakopane", 27000), Miasto("Augustow", 30000), Miasto("Zabrze", 170000)]

Test 5

Nie uruchomiono
Wejście
3
Lodz 650000
Kielce 190000
Bialystok 290000
Oczekiwane wyjście
[Miasto("Bialystok", 290000), Miasto("Kielce", 190000), Miasto("Lodz", 650000)]
[Miasto("Kielce", 190000), Miasto("Bialystok", 290000), Miasto("Lodz", 650000)]
Uruchom z własnymi danymi