R1O67V4HKLFEV
Żywy obraz w kolorze, przedstawiający mieszankę małych i wielkich liter w różnych czcionkach, starannie ułożonych w wyraźne słowa, z określonym fragmentem tekstu umieszczonym pod dużą, metalową lupą, znacznie powiększoną, aby odkryć skomplikowane detale, tekstury i style czcionek, na neutralnym tle, które pozwala literom i luce skupić uwagę, z wyrazami i literami wyświetlanymi w gamie jasnych, intensywnych kolorów, które kontrastują i uzupełniają się nawzajem, a lupa odbija światło, dodając scenie poczucie głębi i realizmu.

PY_I_P_W14_M16 Wyszukiwanie wzorca w tekście

Obraz wygenerowany przez sztuczną inteligencję leonardo.ai
Źródło: domena publiczna.
1
Polecenie 1

Przeanalizuj poniższy kod programu w Pythonie, który realizuje  wyszukiwanie wzorca w tekście metodą naiwną. Program zawiera dodatkowe instrukcje print(), które umożliwiają śledzenie działania programu krok po kroku.
Program pokazuje każde porównanie znaków i przesunięcie wzorca, co świetnie pomaga w zrozumieniu algorytmu.

Program wypisuje indeks początku wzorca w tekście lub komunikat o braku dopasowania.

Linia 1. kratka Wczytanie tekstu i wzorca. Linia 2. tekst znak równości cudzysłów ababcababc cudzysłów. Linia 3. wzorzec znak równości cudzysłów abc cudzysłów. Linia 5. n znak równości len otwórz nawias okrągły tekst zamknij nawias okrągły. Linia 6. m znak równości len otwórz nawias okrągły wzorzec zamknij nawias okrągły. Linia 8. znaleziono znak równości False. Linia 10. print otwórz nawias okrągły cudzysłów Tekst dwukropek cudzysłów przecinek tekst zamknij nawias okrągły. Linia 11. print otwórz nawias okrągły cudzysłów Wzorzec dwukropek cudzysłów przecinek wzorzec zamknij nawias okrągły. Linia 12. print otwórz nawias okrągły cudzysłów minus cudzysłów asterysk 40 zamknij nawias okrągły. Linia 14. kratka Przesuwanie wzorca po tekście. Linia 15. for i in range otwórz nawias okrągły n minus m plus 1 zamknij nawias okrągły dwukropek. Linia 16. print otwórz nawias okrągły f cudzysłów lewy ukośnik nSprawdzanie pozycji otwórz nawias klamrowy i zamknij nawias klamrowy dwukropek cudzysłów zamknij nawias okrągły. Linia 17. dopasowanie znak równości True. Linia 19. for j in range otwórz nawias okrągły m zamknij nawias okrągły dwukropek. Linia 20. print otwórz nawias okrągły f cudzysłów Porównanie dwukropek tekst otwórz nawias kwadratowy otwórz nawias klamrowy i plus j zamknij nawias klamrowy zamknij nawias kwadratowy znak równości apostrof otwórz nawias klamrowy tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof z wzorcem otwórz nawias kwadratowy otwórz nawias klamrowy j zamknij nawias klamrowy zamknij nawias kwadratowy znak równości apostrof otwórz nawias klamrowy wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof cudzysłów zamknij nawias okrągły. Linia 21. if tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy wykrzyknik znak równości wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek. Linia 22. dopasowanie znak równości False. Linia 23. print otwórz nawias okrągły cudzysłów Nie pasuje przecinek przesuwamy wzorzec o 1 miejsce cudzysłów zamknij nawias okrągły. Linia 24. break. Linia 25. else dwukropek. Linia 26. print otwórz nawias okrągły cudzysłów Znak pasuje cudzysłów zamknij nawias okrągły. Linia 28. if dopasowanie dwukropek. Linia 29. print otwórz nawias okrągły f cudzysłów lewy ukośnik n Pierwsze dopasowanie wzorca na pozycji dwukropek otwórz nawias klamrowy i zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 30. znaleziono znak równości True. Linia 31. break kratka kończymy po znalezieniu pierwszego dopasowania. Linia 33. if not znaleziono dwukropek. Linia 34. print otwórz nawias okrągły cudzysłów lewy ukośnik nBrak wzorca w tekście cudzysłów zamknij nawias okrągły.
1
Polecenie 2

Przeanalizuj sposób  wizualizacji algorytmu wyszukiwania wzorca w tekście metodą naiwną. Czy ten sposób wizualizacji ułatwił Ci zrozumienie działania algorytmu?

Wskazówki do testowania programu:

  • Można zmieniać tekst i wzorzec, by pokazać różne przypadki.

  • Funkcja time.sleep() umożliwia wstrzymanie działania programu na czas podany jako parametr.

  • Można usunąć time.sleep(), jeśli nie chcesz opóźnienia.

Linia 1. import time. Linia 3. kratka Tekst i wzorzec. Linia 4. tekst znak równości cudzysłów ababcababc cudzysłów. Linia 5. wzorzec znak równości cudzysłów abc cudzysłów. Linia 7. n znak równości len otwórz nawias okrągły tekst zamknij nawias okrągły. Linia 8. m znak równości len otwórz nawias okrągły wzorzec zamknij nawias okrągły. Linia 10. znaleziono znak równości False. Linia 12. print otwórz nawias okrągły cudzysłów Tekst dwukropek cudzysłów przecinek tekst zamknij nawias okrągły. Linia 13. print otwórz nawias okrągły cudzysłów Wzorzec dwukropek cudzysłów przecinek wzorzec zamknij nawias okrągły. Linia 14. print otwórz nawias okrągły cudzysłów minus cudzysłów asterysk 40 zamknij nawias okrągły. Linia 16. kratka Przesuwanie wzorca po tekście. Linia 17. for i in range otwórz nawias okrągły n minus m plus 1 zamknij nawias okrągły dwukropek. Linia 18. kratka Wyświetlenie przesunięcia wzorca. Linia 19. print otwórz nawias okrągły cudzysłów lewy ukośnik nPozycja dwukropek cudzysłów przecinek i zamknij nawias okrągły. Linia 20. print otwórz nawias okrągły tekst zamknij nawias okrągły. Linia 21. print otwórz nawias okrągły cudzysłów cudzysłów asterysk i plus wzorzec zamknij nawias okrągły kratka wizualne przesunięcie wzorca. Linia 23. dopasowanie znak równości True. Linia 24. for j in range otwórz nawias okrągły m zamknij nawias okrągły dwukropek. Linia 25. if tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy wykrzyknik znak równości wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek. Linia 26. dopasowanie znak równości False. Linia 27. print otwórz nawias okrągły f cudzysłów Niedopasowanie na pozycji otwórz nawias klamrowy i plus j zamknij nawias klamrowy dwukropek apostrof otwórz nawias klamrowy tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof ≠ apostrof otwórz nawias klamrowy wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof cudzysłów zamknij nawias okrągły. Linia 28. break. Linia 29. else dwukropek. Linia 30. print otwórz nawias okrągły f cudzysłów Dopasowanie dwukropek apostrof otwórz nawias klamrowy tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof znak równości znak równości apostrof otwórz nawias klamrowy wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof cudzysłów zamknij nawias okrągły. Linia 31. time kropka sleep otwórz nawias okrągły 0 kropka 3 zamknij nawias okrągły kratka małe opóźnienie dla efektu wizualnego. Linia 33. if dopasowanie dwukropek. Linia 34. print otwórz nawias okrągły f cudzysłów lewy ukośnik n🎉 Wzorzec znaleziono na pozycji dwukropek otwórz nawias klamrowy i zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 35. znaleziono znak równości True. Linia 36. break. Linia 37. else dwukropek. Linia 38. time kropka sleep otwórz nawias okrągły 0 kropka 5 zamknij nawias okrągły. Linia 40. if not znaleziono dwukropek. Linia 41. print otwórz nawias okrągły cudzysłów lewy ukośnik nBrak wzorca w tekście kropka cudzysłów zamknij nawias okrągły.
1
Polecenie 3

Przeanalizuj kod programu wypisującego indeksy początków wszystkich wystąpień wzorca w tekście lub komunikat o braku wzorca. Sprawdź, jakie zmiany zostały wprowadzone w porównaniu z poprzednim kodem. Zwróć uwagę na zmienne logiczne. Zastanów się też, w jaki sposób są zapamiętywane kolejne indeksy wystąpienia wzorca w tekście.

Linia 1. import time. Linia 3. kratka Tekst i wzorzec. Linia 4. tekst znak równości cudzysłów ababcababc cudzysłów. Linia 5. wzorzec znak równości cudzysłów abc cudzysłów. Linia 7. n znak równości len otwórz nawias okrągły tekst zamknij nawias okrągły. Linia 8. m znak równości len otwórz nawias okrągły wzorzec zamknij nawias okrągły. Linia 9. pozycje znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy kratka lista pozycji dopasowań. Linia 11. print otwórz nawias okrągły cudzysłów Tekst dwukropek cudzysłów przecinek tekst zamknij nawias okrągły. Linia 12. print otwórz nawias okrągły cudzysłów Wzorzec dwukropek cudzysłów przecinek wzorzec zamknij nawias okrągły. Linia 13. print otwórz nawias okrągły cudzysłów minus cudzysłów asterysk 40 zamknij nawias okrągły. Linia 15. kratka Przesuwanie wzorca po tekście. Linia 16. for i in range otwórz nawias okrągły n minus m plus 1 zamknij nawias okrągły dwukropek. Linia 17. print otwórz nawias okrągły f cudzysłów lewy ukośnik nPozycja dwukropek otwórz nawias klamrowy i zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 18. print otwórz nawias okrągły tekst zamknij nawias okrągły. Linia 19. print otwórz nawias okrągły cudzysłów cudzysłów asterysk i plus wzorzec zamknij nawias okrągły. Linia 21. dopasowanie znak równości True. Linia 22. for j in range otwórz nawias okrągły m zamknij nawias okrągły dwukropek. Linia 23. if tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy wykrzyknik znak równości wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek. Linia 24. dopasowanie znak równości False. Linia 25. print otwórz nawias okrągły f cudzysłów Niedopasowanie na pozycji otwórz nawias klamrowy i plus j zamknij nawias klamrowy dwukropek apostrof otwórz nawias klamrowy tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof ≠ apostrof otwórz nawias klamrowy wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof cudzysłów zamknij nawias okrągły. Linia 26. break. Linia 27. else dwukropek. Linia 28. print otwórz nawias okrągły f cudzysłów Dopasowanie dwukropek apostrof otwórz nawias klamrowy tekst otwórz nawias kwadratowy i plus j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof znak równości znak równości apostrof otwórz nawias klamrowy wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias klamrowy apostrof cudzysłów zamknij nawias okrągły. Linia 29. time kropka sleep otwórz nawias okrągły 0 kropka 2 zamknij nawias okrągły. Linia 31. if dopasowanie dwukropek. Linia 32. print otwórz nawias okrągły f cudzysłów Wzorzec znaleziono na pozycji dwukropek otwórz nawias klamrowy i zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 33. pozycje kropka append otwórz nawias okrągły i zamknij nawias okrągły. Linia 34. else dwukropek. Linia 35. time kropka sleep otwórz nawias okrągły 0 kropka 3 zamknij nawias okrągły. Linia 37. kratka Podsumowanie. Linia 38. print otwórz nawias okrągły cudzysłów lewy ukośnik n cudzysłów plus cudzysłów minus cudzysłów asterysk 40 zamknij nawias okrągły. Linia 39. if pozycje dwukropek. Linia 40. print otwórz nawias okrągły cudzysłów Wzorzec znaleziono na pozycjach dwukropek cudzysłów przecinek pozycje zamknij nawias okrągły. Linia 41. else dwukropek. Linia 42. print otwórz nawias okrągły cudzysłów Brak wzorca w tekście kropka cudzysłów zamknij nawias okrągły.