Rozdział 8 · Zabawa literami i słowami
Rzędy nie mogą być zmieniane
Struny nie można zmienić „na miejscu”
Wiersza nie można zmienić „na miejscu”
Może się wydawać, że skoro wiemy, jak uzyskać symbol za pomocą indeksu
(word[0]), można też zastąpić go tak samo
Sposób. To nieprawda – linie w Python niezmienne (immutable):
popytka_izmenit.py
word = "Cat"
word[0] = "B"
# TypeError: 'str' object does not support item assignment
Dlaczego tak dziwnie?
To świadome urządzenie językowe, a nie ograniczenie. Niezmienne łańcuch znaków są łatwiejsze i bezpieczniejsze do przekazywania między różnymi częściami programu, więc możesz być pewien, że żaden inny fragment kodu „niezauważalnie”
Poprawny sposób: utworzyć nowy łańcuch
Zamiast zmieniać linię „na miejscu”
pravilnyj_sposob.py
word = "Cat"
word = "B" + word[1:] # sklej "B" z "at" i uzyskaj nową linię
print(word) # Bat
Właśnie dlatego wszystkie metody łańcuch znaków — upper(),
replace() i inni (Sekcje 8.9–8.10) – nie zmieniać oryginału
linia, oraz przywrócić nową. Jeśli chcesz zapisać wynik, musisz go zapisać
Jawnie przypisz zmienną do:
metody_ne_menyayut.py
text = "python"
text.upper() # wynik stworzony, ale nigdzie nie zapisany — i utracony!
print(text) #python - Oryginalna łańcuch znaków niezmieniona
text = text.upper() # tak — zapisaliśmy wynik z powrotem do text
print(text) # PYTHON
Podstawowa praktyka
Zamiana pierwszej litery
Dla linii "home" zbuduj nową linię "dome", zastępując pierwszy znak przez cięcie i łączenie – jak pokazano powyżej dla "Cat" → "Bat".
Praktyka: niezmienność łańcuch znaków
Ten sam laptop co w sekcji Line Slicers – ten temat również porusza