Előző - #31 Egész számok konvertálása karakterláncokká | Tartalomjegyzék | Következő - #33 vesszővel formázott számok
convertStrToInt('42') → 42
A 31. gyakorlat kiegészítéseként, „Egész számok konvertálása karakterláncokká”, ebben a gyakorlatban a számjegyekből álló karakterláncokat egész számok megfelelőivé alakítjuk. A legáltalánosabb felhasználási eset erre az, hogy a input()függvényből vagy egy szövegfájl read() metódusából visszaadott karakterláncot veszünk, és egész számmá konvertáljuk, hogy matematikai műveleteket hajtsunk végre rajta. Használhatja a Python int() függvényét az átalakításhoz, de ebben a gyakorlatban saját maga hozza létre újra ezt a függvényt.
Gyakorlat leírása
Írjon convertStrToInt()függvényt paraméterrel stringNum. Ez a függvény a függvényhez hasonlóan a paraméter egész alakját adja vissza int() . Például convertStrToInt('42')az egész számot kell visszaadnia 42. A függvénynek nem kell működnie tizedesvesszős lebegőpontos számoknál, de negatív számértékeknél működnie kell.
Kerülje int()a kódban való használatát, mert az elvégzi helyetted a konverziót, és meghiúsítaná ennek a gyakorlatnak a célját. Az int()utasításokat azonban használjuk assert annak ellenőrzésére, hogy convertStrToInt() a függvény ugyanúgy működik-e, mint az összes től -ig int()terjedő egész szám esetén :-100009999
i tartományban (-10000, 10000):
assert convertStrToInt(str(i)) == i
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.
Megoldás tervezése
Ennek a gyakorlatnak a megoldása egészen más, mint az int-to-string algoritmusé. Mindazonáltal mindkettő hasonló abban az értelemben, hogy egy számjegyet konvertál, és szótárt használ a karakterlánc számjegyek és egész számjegyek leképezésére:
DIGITS_STR_TO_INT = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7 , '8': 8, '9': 9}
A függvény létrehoz egy integerNum változót, amely megtartja az egész alakot, stringNumahogy azt felállítjuk. Ez a változó az értékkel kezdődik 0. A kódnak azt is meg kell jegyeznie, hogy van-e mínusz jel a karakterlánc elején, ebben az esetben
Algoritmusunk a stringNum paraméterben lévő egyes számjegyek fölött hurkol, balról kezdve és jobbra haladva. A kód az aktuális egész számot megszorozza integerNum 10-zel, hogy az összes számjegyet egy hellyel balra „mozgassa”, majd hozzáadja az aktuális számjegyet.
Például, ha a '41096' karakterláncot egész számmá kellett konvertálnunk , a kódnak a következő műveleteket kell végrehajtania:
A visszatérés előtt ezt az egész számot negatív számmá alakítjuk, ha az eredeti karakterlánc mínuszjellel kezdődött.
Különleges esetek és Gotchák
A convertStrToInt()függvénynek képesnek kell lennie a negatív egész számokat képviselő karakterláncok kezelésére. Ehhez ellenőrizze, hogy a stringNum[0] (a karakterlánc első karaktere) a '-' kötőjel-e. Ha igen, akkor megjelölhetünk egy isNegative változót True (és Falseegyébként). Ezután eltávolíthatjuk ezt a kötőjelet úgy stringNum = stringNum[1:], hogy beállítjuk a karakterláncot, és lecseréljük stringNumaz összes karaktert stringNumaz első után.
A függvény végén a függvény visszaadhatja az -integerNum értéket , ha isNegativeértéke True.
Most próbáljon meg egy megoldást írni az előző szakaszok információi alapján. Ha továbbra is problémái vannak a gyakorlat megoldásával, olvassa el a Megoldássablon részt további tippekért.
Megoldás sablon
Próbáljon először megoldást írni a semmiből. De ha nehézségei vannak, akkor a következő részprogramot használhatja kiindulási helynek. Másolja ki a következő kódot a https://invpy.com/convertstrtoint-template.py webhelyről , és illessze be a kódszerkesztőbe. Cserélje ki az aláhúzást kódra, hogy működő programot készítsen:
def convertStrToInt(stringNum):
# Ez a szótár a karakterlánc számjegyeit egyetlen egész számjegyre képezi le:
DIGITS_STR_TO_INT = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,
"5": 5, "6": 6, "7": 7, "8": 8, "9": 9}
# Jegyezze fel, hogy a szám negatív-e vagy sem, és készítse el
# integerNum pozitív a függvény kódjának többi részére:
if stringNum[0] == '-':
isNegative = igaz
stringNum = stringNum[1:] # Távolítsa el a negatív előjelet.
más:
isNegative = Hamis
Az # integerNum tartalmazza a konvertált egész számot, és 0-val kezdődik:
integerNum = 0
# Ismételje meg a karakterlánc számjegyeit balról jobbra:
i tartományban(len(stringNum)):
# Szerezze le az egész számjegyet a karakterlánc számjegyéből:
számjegy = DIGITS_STR_TO_INT[karakterláncszám[i]]
# Adja hozzá ezt az egész számhoz:
integerNum = (integerNum * 10) + számjegy
# Ha a szám eredetileg negatív volt, adja meg az egész számot
# negatív visszaadás előtt:
ha negatív:
return -integerNum
más:
visszatér integerNum
A gyakorlat teljes megoldását az A függelék és a https://invpy.com/convertstrtoint.py tartalmazza . A program minden lépését megtekintheti, amint az egy hibakereső alatt fut a https://invpy.com/convertstrtoint-debug/ címen .
Prev - #31 Convert Integers To Strings | Table of Contents | Next - #33 Comma-Formatted Numbers