Numerowanie wierszy do końca danych

Zadanie 19 z 19 · rozdział 11Trudność: 1 z 3napisysys.stdinformatowanie

Treść zadania

Wczytuj wiersze tekstu aż do końca danych wejściowych — nie wiadomo z góry, ile ich będzie. Wypisz wszystkie niepuste wiersze, poprzedzając każdy jego numerem w wejściu, a na końcu podaj, ile było wszystkich wierszy i ile niepustych.

Wiersz jest pusty, jeśli nie zawiera żadnych znaków albo zawiera same spacje. Puste wiersze nie są wypisywane, ale liczą się do numeracji.

Dane wejściowe

  • dowolna liczba wierszy tekstu (także zero)

Dane wyjściowe

  • Dla każdego niepustego wiersza jedna linia w formacie nr | wiersz, gdzie nr to numer wiersza w wejściu (od 1) wyrównany do prawej na szerokości 3 znaków, np. 1 | Ala, 12 | kot. Wiersz wypisz bez zmian (z ewentualnymi spacjami na początku).
  • Ostatnia linia: Wierszy: X, niepustych: Y.

Uwagi

  • Wszystkie wiersze aż do końca danych wczytasz za pomocą modułu sys: sys.stdin.read().splitlines() zwraca listę wierszy (bez znaków końca linii). Można też przejść po wierszach pętlą for wiersz in sys.stdin: — wtedy każdy wiersz kończy się znakiem "\n", który usuniesz przez wiersz.rstrip("\n").
  • Wpisując dane ręcznie w konsoli, koniec danych zasygnalizujesz skrótem Ctrl+D (Linux, macOS) albo Ctrl+Z i Enter (Windows).
  • Liczbę wyrównasz do prawej na szerokości 3 znaków w f-stringu: f"{nr:>3}".
  • Numerować wiersze pomoże enumerate(wiersze, start=1).

Przykład

Wejście
Ala ma kota

Kot ma Alę
Wyjście
  1 | Ala ma kota
  3 | Kot ma Alę
Wierszy: 3, niepustych: 2

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 11

Zadania w tym rozdziale ćwiczą podstawowe operacje na napisach: indeksowanie, wycinanie, zamianę znaków, dzielenie zdania na słowa i składanie napisów z części.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj napis:”.
  • Napis lub zdanie wczytuj jako całą linię — może zawierać spacje.
  • Słowo to fragment zdania oddzielony od innych spacjami. Znaki interpunkcyjne (np. . , ! ? ; : - ( ) ") stojące na początku lub końcu fragmentu nie należą do słowa (kota. → kota), a fragment złożony wyłącznie z interpunkcji (np. samotny myślnik -) nie jest słowem. W Pythonie słowa uzyskasz tak: podziel zdanie metodą split(), z każdego fragmentu usuń interpunkcję metodą strip(string.punctuation) i pomiń puste wyniki.
  • Gdy wynikiem jest lista, wypisz ją tak, jak robi to print(lista) w Pythonie, np. ['Ala', 'ma', 'kota']. Pusta lista to [].

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
jeden
Oczekiwane wyjście
  1 | jeden
Wierszy: 1, niepustych: 1

Test 2

Nie uruchomiono
Wejście
(brak)
Oczekiwane wyjście
Wierszy: 0, niepustych: 0

Test 3

Nie uruchomiono
Wejście
a


b
Oczekiwane wyjście
  1 | a
  4 | b
Wierszy: 4, niepustych: 2

Test 4

Nie uruchomiono
Wejście
w1
w2

w4
w5
w6
w7
w8
w9
w10
   
w12
Oczekiwane wyjście
  1 | w1
  2 | w2
  4 | w4
  5 | w5
  6 | w6
  7 | w7
  8 | w8
  9 | w9
 10 | w10
 12 | w12
Wierszy: 12, niepustych: 10

Test 5

Nie uruchomiono
Wejście
  wcięty wiersz
koniec
Oczekiwane wyjście
  1 |   wcięty wiersz
  2 | koniec
Wierszy: 2, niepustych: 2
Uruchom z własnymi danymi