Előző - #30 3D-s dobozrajz | Tartalomjegyzék | Következő - #32 Karakterláncok konvertálása egész számokká
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:
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