MENÜ

Honlap címe

Előző - #31 Egész számok konvertálása karakterláncokká | Tartalomjegyzék | Következő - #33 vesszővel formázott számok

32. GYAKORLAT: KARAKTERLÁNCOK KONVERTÁLÁSA EGÉSZ SZÁMOKKÁ

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:

  • integerNum =0
  • integerNum = (0 * 10) + 4 =4
  • integerNum = (4 * 10) + 1 =41
  • integerNum = (41 * 10) + 0 =410
  • integerNum = (410 * 10) + 9 =4109
  • integerNum = (4109 * 10) + 6 =41096

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

 

 

Asztali nézet