MENÜ

Honlap címe

Előző - #30 3D-s dobozrajz | Tartalomjegyzék | Következő - #32 Karakterláncok konvertálása egész számokká

31. GYAKORLAT: EGÉSZ SZÁMOK KONVERTÁLÁSA KARAKTERLÁNCOKKÁ

convertIntToStr(42)  →  '42'

A Pythonban az értékek 42és a '42' két különböző érték: elvégezheti a matematikát az egész számon 42, de a '42' karakterlánc megegyezik bármely más kétkarakteres szöveges karakterlánccal. Matematikai összeadást végezhet egész értékeken, de karakterláncokon nem. A karakterlánc-értékeket összefűzheti vagy replikálhatja, de egész számokat nem. Gyakori programozási feladat egy szám sztring megfelelőjének beszerzése. Használhatja a str()függvényt az átalakításhoz, de ebben a gyakorlatban saját maga hozza létre ezt a függvényt.

Gyakorlat leírása

Írj convertIntToStr()függvényt egy integerNumparaméterrel. Ez a függvény a függvényhez hasonlóan működik, str()mivel a paraméter karakterlánc alakját adja vissza. Például convertIntToStr(42) vissza kell adnia a karakterláncot '42'. A függvénynek nem kell működnie tizedesvesszős lebegőpontos számok esetén, de negatív egész értékek esetén működnie kell.

Kerülje a Python str()függvény használatát a kódban, mert az elvégzi helyetted az átalakítást, és meghiúsítaná a gyakorlat célját. Az assertstr() utasításokkal azonban ellenőrizzük, hogy a függvény ugyanúgy működik-e, mint az összes től -ig terjedő egész szám esetén :convertIntToStr()str()-100009999

i tartományban (-10000, 10000):

    assert convertIntToStr(i) == str(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.

Előfeltétel fogalmak: szótárak, while ciklusok, karakterlánc-összefűzés, egész számok felosztása

Megoldás tervezése

Az egész érték karakterlánc-ekvivalensének létrehozásához az egész számokat egyenként karakterláncokká alakítjuk. Hozzon létre egy stringNum nevű változót a konvertált karakterlánc tárolására. Egy ciklusban a kifejezés integerNum % 10a helyén lévő számjegyre értékelődik ki integerNum. Tárolja ezt az eredményt egy nevű változóban onesPlaceDigit.

Ezután hozzáadjuk a -nek megfelelő karakterláncot onesPlaceDigit egy stringNumsor if- elif utasítással, például a következőkkel:

ha oneesPlaceDigit == 0:

    stringNum = '0' + stringNum

elif onesPlaceDigit == 1:

    stringNum = '1' + stringNum

elif onesPlaceDigit == 2:

    stringNum = '2' + stringNum

elif onesPlaceDigit == 3:

    stringNum = '3' + stringNum

elif onesPlaceDigit == 4:

    stringNum = '4' + stringNum

elif onesPlaceDigit == 5:

    stringNum = '5' + stringNum

elif onesPlaceDigit == 6:

    stringNum = '6' + stringNum

elif onesPlaceDigit == 7:

    stringNum = '7' + stringNum

elif onesPlaceDigit == 8:

    stringNum = '8' + stringNum

elif onesPlaceDigit == 9:

    stringNum = '9' + stringNum

Ez a kód azonban elég hosszú és fárasztó. Egy tömörebb és általánosabb megközelítés egy szótár létrehozása, amely leképezi az egyes egész számjegyeket a karakterlánc megfelelőire, majd megkeresi a onesPlaceDigit kulcs értékét:

DIGITS_INT_TO_STR = {0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7' , 8: '8', 9: '9'}

stringNum = DIGITS_INT_TO_STR[onesPlaceDigit] + stringNum

Ezt követően egész számmal eloszthatjuk -val, 10 hogy „eltávolítsuk” a helyén lévő számjegyet integerNum. Például 41096 // 10kiértékeli a 4109- et , hatékonyan eltávolítja 6 a számot, és az 9új számjegyet állítja be a konvertálás helyére. A ciklusunk folytathatja a számjegyek hurkolását és konvertálását, amíg integerNumvan 0. Például, ha ezt a 41096 egész számra hajtja végre, az a következő műveleteket hajtja végre:

  • 41096 // 10 = 4109
  • 4109 // 10 = 410
  • 410 // 10 = 41
  • 41 // 10 = 4
  • 4 // 10 = 0

Ezen a ponton az algoritmus befejeződött, és stringNum tartalmazza a karakterlánc formát.

Különleges esetek és Gotchák

A függvény elején ellenőrizze, hogy a integerNum paraméter helyes-e 0, és ha igen, azonnal adja vissza a karakterláncot '0'. Az algoritmusunk olyan, hogy ellenkező esetben a 0'' üres karakterláncát adja vissza , ami hibás.

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/convertintostr-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 convertIntToStr(integerNum):

    # Speciális eset: Ellenőrizze, hogy az integerNum értéke 0, és adja vissza a 0-t, ha igen:

    if integerNum == ____:

        Visszatérés ____

 

    # Ez a szótár egyes egész számjegyeket karakterlánc számjegyekre képez le:

    DIGITS_INT_TO_STR = {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 integerNum < ____:

        isNegative = ____

        integerNum = ____

    más:

        isNegative = ____

 

    A # stringNum tartalmazza a konvertált karakterláncot, és üresen kezdődik:

    stringNum = ____

 

    # Keeping looping while integerNum is greater than zero:

    while integerNum ____ 0:

        # Mod the integerNum by 10 to get the digit in the ones place:

        onesPlaceDigit = integerNum % ____

        # Put the corresponding string digit at the front of stringNum:

        stringNum = DIGITS_INT_TO_STR[onesPlaceDigit] + ____

        # Divide integerNum by ten to remove one entire digit place:

        integerNum //= ____

 

    # If the number was originally negative, add a minus sign:

    if isNegative:

        return ____ + stringNum

    else:

        return ____

The complete solution for this exercise is given in Appendix A and https://invpy.com/convertinttostr.py. You can view each step of this program as it runs under a debugger at https://invpy.com/convertinttostr-debug/.

Prev - #30 3D Box Drawing | Table of Contents | Next - #32 Convert Strings To Integers

 

Asztali nézet