Podmień napisy z listy A na napisy z listy B

Zadanie 10 z 13 · rozdział 23Trudność: 2 z 3regexstringzamiana

Treść zadania

Wczytaj tekst wielowierszowy oraz dwie listy słów tej samej długości: A i B. Zastąp w tekście każde wystąpienie słowa A[i] słowem B[i] (ten sam indeks).

  • Zamieniaj tylko całe słowa (zob. konwencje rozdziału), np. słowo kot nie zmienia się wewnątrz kota ani kot_1. Wielkość liter ma znaczenie.
  • Wszystkie zamiany wykonaj jednocześnie, na podstawie oryginalnego tekstu — wstawione słowo nie jest już ponownie zamieniane. Dla A = kot pies i B = pies kot tekst kot i pies zmienia się w pies i kot.

Dane wejściowe

  • 1. linia: n — liczba wierszy tekstu
  • kolejne n linii: tekst
  • następna linia: słowa listy A oddzielone spacjami
  • ostatnia linia: słowa listy B oddzielone spacjami (tyle samo co w A)

Dane wyjściowe

Tekst po zamianach (tyle samo wierszy co na wejściu).

Ograniczenia

  • $1 \le n \le 100$
  • Listy mają co najmniej jedno słowo, słowa w liście A się nie powtarzają, a każde słowo składa się tylko z liter i cyfr.

Uwagi

  • Zbuduj jeden wzorzec z alternatywą, np. \b(kot|Ala)\b, i użyj re.sub() z funkcją, która dla dopasowanego słowa zwraca jego zamiennik ze słownika.

Przykład

Wejście
1
Ala ma kota, a kot ma Alę.
kot Ala
pies Ola
Wyjście
Ola ma kota, a pies ma Alę.

Słowa kota i Alę się nie zmieniają — to inne słowa niż kot i Ala.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 23

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin) i wypisywaniu wyniku na standardowe wyjście (stdout). Rozwiązuj je za pomocą wyrażeń regularnych (moduł re).
Każde zadanie jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Każda wartość wejściowa znajduje się w osobnej linii — wczytuj je dokładnie w podanej kolejności.
  • Tekst wielowierszowy jest poprzedzony linią z liczbą jego wierszy n — wczytaj go, wywołując input() n razy.
  • Dla wartości logicznych wypisuj dokładnie Prawda lub Fałsz.
  • Wielkość liter ma znaczenie, chyba że zadanie mówi inaczej.
  • Słowo to najdłuższy ciąg znaków dopasowywanych przez \w, czyli liter (także polskich), cyfr i znaku podkreślenia _. Każdy inny znak — spacja, interpunkcja, myślnik — rozdziela słowa, np. biało-czerwona to dwa słowa: biało i czerwona. Granicę słowa w wyrażeniu regularnym oznacza \b.
  • Program nie wypisuje komunikatów typu „Podaj tekst:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.

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
dog cat doge
dog cat
wolf tiger
Oczekiwane wyjście
wolf tiger doge

Test 2

Nie uruchomiono
Wejście
1
kot goni psa, a pies goni kota
kot pies
pies kot
Oczekiwane wyjście
pies goni psa, a kot goni kota

Test 3

Nie uruchomiono
Wejście
2
Ala ma kota.
Kota ma Ala!
Ala kota
Ola psa
Oczekiwane wyjście
Ola ma psa.
Kota ma Ola!

Test 4

Nie uruchomiono
Wejście
1
biało-czerwona flaga
czerwona
zielona
Oczekiwane wyjście
biało-zielona flaga

Test 5

Nie uruchomiono
Wejście
1
a b c
a b
b c
Oczekiwane wyjście
b c c

Test 6

Nie uruchomiono
Wejście
1
kot_1 kot
kot
pies
Oczekiwane wyjście
kot_1 pies

Test 7

Nie uruchomiono
Wejście
2
nic do zamiany
tutaj
xyz
abc
Oczekiwane wyjście
nic do zamiany
tutaj
Uruchom z własnymi danymi