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

ObjawPrzyczynaJak to naprawić
Porównanie == niespodziewanie Falseniewidzialną przestrzeń lub inny przypadekrepr(), .strip(), .lower()
SyntaxError: unterminated stringzapomniany znak zamykający cudzysłówsprawdzić parzystość cudzysłowów
Tekst „zepsuty”losowe \n w ścieżce/tekścieraw-łańcuch znaków r"..."
TypeError: can only concatenate strdodawanie ł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 boolowskimporównać != -1 wyraźnie
TypeError w arytmetyce z input()input() zawsze zwraca łańcuch znakówint()/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
Otwórz praktykę →