Rozdział 8 · Zabawa literami i słowami
Debugowanie problemów z łańcuchami
Struny często wyglądają poprawnie dla oka, ale pękają przez jeden niewidzialny znak. Naucz się znajdować i naprawiać takie błędy.
Struny są źródłem szczególnie podstępnych błędów: często wyglądają prosto na oko, oraz Złamać się przez jeden niewidzialny symbol. Przyjrzyjmy się najczęstszym sytuacjom.
Przestrzenie niewidzialne
nevidimye_probely.py
password = „sekret” #random miejsce na końcu!
print(password == „tajemnica”) # False — i nie da się tego rozpoznać na oko.
print(repr(password)) # 'sekret' – repr() daje przestrzeń
repr() jest twoim głównym narzędziem
Widzieliśmy już repr() w sekcji 8.2 – pokazuje on łańcuch znaków „taki, jaki jest”
Zapomniany cudzysłow
zabytaya_kavychka.py
# text = "Witaj świecie! # Zapomniałem cytatu końcowego
# SyntaxError: unterminated string literal
Niepoprawne maskowanie
nepravilnoe_ekranirovanie.py
#path=„C:\new_folder”
print("C:\new_folder")
# C:
# ew_folder wcale nie jest tym, czego chcieli
print(r"C:\new_folder") # C:\new_folder — raw-łańcuch znaków (rozdział 8.3) rozwiązuje problem
Łączenie łańcuch znaków z liczbą
stroka_plyus_chislo.py
score = 95
# print(„Wynik: ”
print(„Wynik: ” + str(score)) # poprawiono — jawna konwersja
print(f"Wynik: {score}") # jeszcze lepiej — f-łańcuch znaków samo przekształca
find() vs index() gdy nie ma podciągu
find_vs_index_oshibka.py
text = "Python"
print(text.find("java")) # -1 – Cicho zwraca -1, łatwo pominąć w kodzie
# text.index(„java”
Częsty błąd — zapomnieć, że find() w przypadku braku podciągu
zwraca -1, nie False lub
None. Sprawdzam jak if text.find("java"):
nie będzie działać poprawnie, ponieważ -1 jest prawda w logiczności
Sprawdzone! Dokładnie — żeby porównać wprost: if text.find("java") != -1:.
input() „naprawdę”
input_ne_chislo.py
age = input(„Wiek? ”) # nawet jeśli wpisane zostanie "28", to łańcuch znaków "28"
# print(age + 1) # TypeError — zapomniano int()
print(int(age) + 1) # poprawna
Końcowa ściąga do debugowania stringów
| Objaw | Przyczyna | Jak to naprawić |
|---|---|---|
Porównanie == niespodziewanie False | niewidzialną przestrzeń lub inny przypadek | repr(), .strip(), .lower() |
SyntaxError: unterminated string | zapomniany znak zamykający cudzysłów | sprawdzić parzystość cudzysłowów |
| Tekst „zepsuty” | losowe \n w ścieżce/tekście | raw-łańcuch znaków r"..." |
TypeError: can only concatenate str | dodawanie łańcuch znaków o liczbie oddzielonej przez + | str() lub f-łańcuch znaków |
if text.find(...) zachowuje się dziwnie | -1 to prawda w czeku boolowskim | porównać != -1 wyraźnie |
TypeError w arytmetyce z input() | input() zawsze zwraca łańcuch znaków | int()/float() |
★★ Zadanie samodzielne
Znajdź błąd
W wierszu `total = „Suma: ”
Praktyka: debugowanie błędów w ciągach znaków
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji