Előző - #9 Chess Square Color | Tartalomjegyzék | Következő - #11 óra, perc, másodperc
findAndReplace('A róka', 'róka', 'kutya') → 'A kutya'
A keresés és csere a szövegszerkesztők, az IDE-k és a szövegszerkesztő szoftverek alapfunkciója. Még a Python nyelvhez is tartozik egy csere() karakterlánc metódus, mivel a programok gyakran használják. Ebben a gyakorlatban újra végrehajtja ezt a közös karakterlánc-műveletet.
Gyakorlat leírása
Írjon egy findAndReplace()függvényt, amelynek három paramétere van: texta cserélendő szöveget tartalmazó karakterlánc, oldTexta cserélendő szöveg és newTexta helyettesítő szöveg. Ne feledje, hogy ennek a függvénynek különbséget kell tennie a kis- és nagybetűk között: ha a 'kutya' szót a -ra cseréli 'fox', akkor a 'DOG''MY DOG JONESY' nem cserélődik le .
Ezek a Python- assertutasítások leállítják a programot, ha feltételük False. Másolja őket a megoldási program aljára. Az Ön megoldása akkor helyes, ha a következő assertállítások feltételei mind igazak :
assert findAndReplace('A róka', 'róka', 'kutya') == 'A kutya'
assert findAndReplace('róka', 'róka', 'kutya') == 'kutya'
assert findAndReplace('Firefox', 'róka', 'kutya') == 'Firedog'
assert findAndReplace('róka', 'róka', 'kutya') == 'kutyakutya'
assert findAndReplace('A róka és a róka.', 'róka', 'kutya') == 'A róka és a kutya.'
Próbáljon megoldást írni a leírásban szereplő információk alapján. Ha továbbra is problémái vannak ennek a gyakorlatnak a megoldásával, további tippekért olvassa el a Megoldástervezés és a Különleges esetek és Gotchák című részt.
Előfeltétel fogalmak: szeletek, indexek, len(), kiterjesztett hozzárendelés operátor
Megoldás tervezése
Míg a Python számos karakterlánc-metódussal rendelkezik, például a helyettesítő() , find()és az index() , amelyek ezt a gyakorlatot elvégezhetik helyettünk, mi magunk végezzük el a keresést és a cserét.
A függvény elején hozzon létre egy replacedText változót a szöveg helyettesítésére. Üres karakterláncként kezdődik. Olyan kódot fogunk írni, amely a paraméterben lévő szöveget text ide másolja replacedText, kivéve, ahol a példányokat találja oldText, ebben az esetben a newText a következőbe kerül replacedText.
A hurok létrehozása whileelindít egy változót, melynek neve iat 0, majd folyamatosan hurkol, amíg el nem éri a szöveges karakterlánc argumentum ihosszát . Ez a változó egy indexre mutat a karakterláncban . A cikluson belüli kód az oldText hosszával növekszik , ha talált egy oldText példányt a -ban . Ellenkező esetben a cikluson belüli kód 1 - gyel növekszik , így a következő karaktert tudja megvizsgálni a szövegben .itextitexti
A cikluson belüli kód megvizsgálhatja a szelet szöveget [i:i + len(oldText)], hogy megnézze, egyezik-e a régi szöveggel . Ebben az esetben hozzáfűzzük newText és replacedTextnöveljük i -val 1. Ha nem, akkor csak a szöveg[i] karaktert fűzzük hozzá, replacedText és növeljük i-val len(oldText). Mire a szövegi végére ér , a változó tartalmazza a kész karakterláncot.replacedText
A 10-1. ábra mutatja ennek a folyamatnak az egyes lépéseit, ha a findAndReplace('A fox.', 'róka', 'kutya') függvényt hívnánk meg .
A Python kiterjesztett hozzárendelési operátorokkal rendelkezik, például +=és *= . Ezek a hozzárendelési utasítások parancsikonjai, amelyek módosítják a változó értékét. A Python kibővített hozzárendelési operátorokat több operátorhoz:
Kiterjesztett hozzárendelés |
Egyenértékű |
someVariable += 42 |
someVariable = someVariable + 42 |
someVariable -= 42 |
someVariable = someVariable - 42 |
someVariable *= 42 |
someVariable = someVariable * 42 |
someVariable /= 42 |
someVariable = someVariable / 42 |
someVariable %= 42 |
someVariable = someVariable % 42 |
someVariable //= 42 |
someVariable = someVariable // 42 |
someVariable **= 42 |
someVariable = someVariable ** 42 |
Például a someVariable = someVariable + 42 beírása helyett használhatja a someVariable += 42 megfelelőjét tömörebb formában. A Python kiterjesztett hozzárendelési operátorai a következők +=: , -=, *= , /=, és %= .
Az általam ehhez a gyakorlathoz adott megoldás a += kiterjesztett hozzárendelés operátort tartalmazza.
Különleges esetek és Gotchák
Ha egy karakterláncon határon kívüli indexet használ, hibaüzenet jelenik meg: 'Hello'[9999]okok és IndexError: string index out of range error. Ez azonban nem vonatkozik a szeletekre. A futás hibaüzenet helyett inkább 'Hello'[1:9999] ad eredményt , bár nagyobb, mint a karakterlánc legnagyobb indexe, .'ello'99994
Keep this in mind when comparing slices with strings. For example, the slice text[5:8] might evaluate to a string of 3 characters because 8 - 5 is 3. But if this slice’s indexes are towards the end of the text string, it could evaluate to a string of 2, 1, or 0 characters. So think of the slice text[5:8] as being at most 3 characters long.
For example, enter the following into the interactive shell for an example:
>>> 'elephant'[5:8]
'ant'
>>> 'gazelle'[5:8]
'le'
>>> 'turtle'[5:8]
'e'
>>> 'moose'[5:8]
''
Now try to write a solution based on the information in the previous sections. If you still have trouble solving this exercise, read the Solution Template section for additional hints.
Solution Template
Try to first write a solution from scratch. But if you have difficulty, you can use the following partial program as a starting place. Copy the following code from https://invpy.com/findandreplace-template.py and paste it into your code editor. Replace the underscores with code to make a working program:
def findAndReplace(text, oldText, newText):
replacedText = ____
i = ____
while i < len(____):
# If index i in text is the start of the oldText pattern, add
# the replacement text:
if text[i:i + len(____)] == oldText:
# Add the replacement text:
replacedText += ____
# Increment i by the length of oldText:
i += len(____)
# Otherwise, add the characters at text[i] and increment i by 1:
else:
replacedText += ____[i]
i += ____
return replacedText
The complete solution for this exercise is given in Appendix A and https://invpy.com/ findandreplace.py. You can view each step of this program as it runs under a debugger at https://invpy.com/ findandreplace-debug/.
Prev - #9 Chess Square Color | Table of Contents | Next - #11 Hours, Minutes, Seconds