1. Sissejuhatus
Pythonis programmeerides onmetüübi konversioon oluline tehnika. Eriti on stringide ja numbrite vahel konverteerimise võime vajalik andmete sisestamiseks/väljundiks ja arvutuste jaoks. Näiteks peate tihti kasutaja vormis sisestatud stringi arvuks konverteerima, et seda arvutada, või vormindama arvulise tulemuse stringiks kuvamiseks. Kuid erinevat tüüpi andmete segamine võib põhjustada vigu, seega peavad algajad olema ettevaatlikud. See artikkel tutvustab, kuidas Pythonis “strings to numbers” ja “numbers to strings” konverteerida, pakkudes praktilisi näiteid ning üksikasjalikku käsitlust veahaldusest ja erijuhtudest. Loodame, et see aitab teil arendada oskusi alates põhilisest kuni edasijõudnud Python programmeerimiseni. Järgmises sektsioonis selgitatakse üksikasjalikult Pythoni põhilisi tüüpide konversioonimeetodeid.
2. Pythoni põhiline tüüpide konversioon
Pythonis, kui andmetüübid erinevad, on otsesed operatsioonid sageli piiratud ning on vajalik andmeid erinevate tüüpide vahel konverteerida. Mõistes, kuidas stringe numbriteks või vastupidi konverteerida, saate kirjutada paindlikumat ja veavaba koodi. See sektsioon selgitab Pythoni põhilist tüüpide konversiooni, kasutades funktsioone “int()” ja “float()”.
Konverteerimine täisarvuks
Kui arv sisestatakse stringina, peate selle stringi enne Pythoni arvutusoperatsioonide tegemist täisarvuks või ujukomaarvuks konverteerima. Näiteks stringi “42” täisarvuks 42 konverteerimiseks kasutate int() funktsiooni järgmiselt.
str_number = "42"
int_number = int(str_number)
print(int_number) # Output: 42
Seega võimaldab int() funktsiooni kasutamine stringi täisarvuks konverteerida. Kui konversioon õnnestub, saab väärtust kasutada arvuna. Pange tähele, et stringi, mis sisaldab koma, näiteks "42.0", täisarvuks konverteerimise katse tekitab vea. Täisarvuks konverteerimiseks on kehtivad ainult täisarvud; kui string sisaldab koma, peate kasutama float().
Konverteerimine ujukomaarvuks
Ujukomaarv on tüüp, mis säilitab väärtuse murdosa. Pythonis saate stringi ujukomaarvuks konverteerida, kasutades float() funktsiooni. Näiteks stringi “3.14” ujukomaarvuks konverteerimiseks kasutage järgmist koodi.
str_float = "3.14"
float_number = float(str_float)
print(float_number) # Output: 3.14
Seega võimaldab float() funktsiooni kasutamine stringi ujukomaarvuks konverteerida. Lisaks saab teaduslikus notatsioonis olevaid stringe float() abil konverteerida ning notatsioonid nagu "1.23e-4" on samuti toetatud.
str_exp = "1.23e-4"
float_exp = float(str_exp)
print(float_exp) # Output: 0.000123
Konverteerimine numbrist stringiks
Vastupidiselt on palju olukordi, kus peate numbri stringiks konverteima. Näiteks kui soovite numbrit teiste stringidega kuvamiseks kokku liita. Sellistel juhtudel kasutate str() funktsiooni.
num = 42
str_num = str(num)
print("Result of converting a number to a string: " + str_num) # Output: Result of converting a number to a string: 42
Seega teeb str() funktsioon konversiooni numbrist stringiks, võimaldades manipuleerida stringidega, mis sisaldavad numbreid. Kui mõistate põhilist tüüpide konversiooni, võite edasi minna keerukamate teemade juurde, nagu konverteerimine teiste arvusüsteemide vahel ja täislaia (full‑width) stringide käsitlemine.

3. Rakenduse näide: mitme aluse ja täislaia numbrite konverteerimine
Nüüd, kui mõistate Pythoni põhilisi tüüpide konversioone, käsitleme keerukamaid juhtumeid. See sektsioon selgitab, kuidas konverteerida erinevatesse alustesse, nagu kahend- ja kuueteistkümnendsüsteem, ning kuidas käsitleda numbreid, mis sisaldavad täislaia tähemärke.
Kahend-, oktaal- ja kuueteistkümnendsüsteemi konverteerimine
Python’i int() funktsioon suudab teisendada mitte ainult kümnendmurde, vaid ka kahend-, okt- ja kuueteistkümnendsüsteemi stringe. Selles olukorras määrad aluse (radikaali) int() funktsiooni teise argumendina. Näiteks kahend- või kuueteistkümnendsüsteemi stringide teisendamiseks täisarvudeks kirjutad järgmiselt.
binary_str = "1010" # binary string
octal_str = "12" # octal string
hex_str = "a" # hexadecimal string
int_binary = int(binary_str, 2)
int_octal = int(octal_str, 8)
int_hex = int(hex_str, 16)
print(int_binary) # Output: 10
print(int_octal) # Output: 10
print(int_hex) # Output: 10
Seega saab kahend-, okt- ja kuueteistkümnendsüsteemi stringe samuti teisendada täisarvudeks, kasutades int() sobiva alusega. See funktsioon on eriti kasulik, kui töötad andmetega, mis hõlmavad mitut arvusüsteemi.
Täislaiuse numbrite ja erimärkide käsitlemine
Kui kasutaja sisendi string sisaldab täislaiuse numbreid või erimärke, võib nende otse Pythonis teisendamine põhjustada vigu. Eriti jaapani numbrilise sisendi puhul, mis sisaldab täislaiuse märke, ei suuda Python sageli neid õigesti töödelda, seetõttu soovitatakse kasutada replace() meetodit täislaiuse märkide teisendamiseks poollaiuseks. Allpool on näide, mis teisendab täislaiuse stringi poollaiuseks enne selle teisendamist numbriks.
str_num_fullwidth = "12345"
str_num_halfwidth = str_num_fullwidth.translate(str.maketrans('0123456789', '0123456789'))
print(int(str_num_halfwidth)) # Output: 12345
Selle lähenemise kasutamine võimaldab täislaiuse numbrilisi stringe teisendada numbriteks. Kui täislaiuse kümnendkoha sümbolit tuleb samuti teisendada, võid teha täiendava teisenduse järgmiselt.
str_float_fullwidth = "123.456"
str_float_halfwidth = str_float_fullwidth.translate(str.maketrans('0123456789.', '0123456789.'))
print(float(str_float_halfwidth)) # Output: 123.456
Kanji numbrite teisendamine
Pythonis saad kasutada Unicode moodulit mõnede kanji numbrite teisendamiseks numbriteks. Kasutades unicodedata.numeric(), saab stringe nagu “一” või “百” teisendada ujukomaarvudeks.
import unicodedata
kanji_num = '五'
converted_num = unicodedata.numeric(kanji_num)
print(converted_num) # Output: 5.0
Kuid see ei toeta mitmest tähemärgist koosnevaid kanji numbreid (nt “十五”), seega keerukama töötlemise jaoks tuleks kaaluda täiendavaid teeke või kohandatud regulaaravaldise kasutamist. Seega pakub Python mitmesuguseid teisendusmeetodeid ka numbriliste stringide jaoks. Järgmine jaotis selgitab, kuidas määrata, kas sisendväärtust saab teisendada, ning kuidas käsitleda vigu.
4. Vea käsitlemine ja sisendi valideerimine
Andmetöötluses esinevad olukorrad, kus kasutaja sisestatud andmeid või väliste allikate kaudu saadud andmeid ei saa korrektselt numbriteks teisendada. Seetõttu on oluline eelnevalt kindlaks teha, kas andmeid saab numbriliseks tüübiks teisendada, ning käsitleda vead asjakohaselt, kui teisendus ebaõnnestub. See jaotis selgitab sisendi valideerimise ja vea käsitlemise meetodeid.
Numbrite tuvastamine kasutades isdigit() ja regulaaravaldiseid
Üks viis eelnevalt kindlaks teha, kas stringi saab teisendada numbriks, on kasutada Python’i isdigit() meetodit või regulaaravaldiseid. isdigit() tagastab True, kui string koosneb täielikult numbritest, kuid False, kui see sisaldab kümnendkoha sümbolit või miinusmärki. Seega on see kasulik, kui soovid kontrollida ainult täisarve.
def is_integer(input_str):
return input_str.isdigit()
# Example usage
print(is_integer("123")) # Output: True
print(is_integer("3.14")) # Output: False
print(is_integer("-123")) # Output: False
Teisest küljest on regulaaravaldised mugavad numbrite tuvastamiseks, mis hõlmavad ujukomaarve ja negatiivseid väärtusi. Allolevas näites on numbrid, mis algavad “+” või “-” ning väärtused, mis sisaldavad kümnendkoha sümbolit, seatud tagastama True.
%%CODEBLOCK5%%
import re
def is_numeric(input_str):
return bool(re.match(r'^[+-]?d+(.d+)?$', input_str))
# Example usage
print(is_numeric("123")) # Output: True
print(is_numeric("-123.45")) # Output: True
print(is_numeric("3.14.15")) # Output: False
print(is_numeric("abc")) # Output: False
Kasutades regulaaravaldisi sel viisil, saate paindlikumalt kindlaks teha, kas väärtus on numbriline, mis on kasulik keerukate sisendandmete töötlemisel.
Vea käsitlemine: erandite käsitlemise kasutamine
Pythoni keeles tekitab sobimatu andmetega stringi numbriks konverteerimine vea (ValueError). Selle vea püüdmiseks ja töötlemise jätkamiseks on tavaliselt kasutusel try-except plokk erandite käsitlemiseks. Allolevas näites, kui tekib viga stringi täisarvuks konverteerimisel, kuvatakse sobiv veateade.
def convert_to_int(input_str):
try:
return int(input_str)
except ValueError:
print(f"Error: '{input_str}' cannot be converted to an integer.")
return None
# Example usage
print(convert_to_int("123")) # Output: 123
print(convert_to_int("abc")) # Output: Error: 'abc' cannot be converted to an integer.
Lisades erandite käsitlemise, saab programm sujuvalt jätkata ka siis, kui vigu tekib, ilma peatamata. See pakub kasutajale selget tagasisidet, muutes sisestusvigade lahendamise lihtsamaks. Kui sisendandmete valideerimine ja veahaldus on korralikult tehtud, suureneb koodi usaldusväärsus. Järgnevas jaotises vaatleme, kuidas loendi elemente massiliselt konverteerida.

5. Kuidas massiliselt loendi elemente konverteerida
Andmete töötlemisel võib vaja minna loendi elemente, mis on stringi formaadis, massiliselt numbriteks konverteerida. Näiteks CSV-failid ja väliste allikate andmed salvestatakse sageli stringidena. See jaotis tutvustab meetodit massiliseks konverteerimiseks, kasutades Pythoni loendi mõistete (list comprehensions).
Massiline konverteerimine loendi mõistete abil
Pythoni keeles, lisaks iga loendi elemendi töötlemisele tsükliga, saate kasutada loendi mõisteid, et andmete konverteerimist teha lühidalt ja tõhusalt. Loendi mõiste rakendab konkreetset operatsiooni igale loendi elemendile ja loob uue loendi. Näiteks, et konverteerida loend, mis sisaldab numbrilisi stringe, täisarvude loendiks, kasutage järgmist koodi.
str_list = ["10", "20", "30", "40", "50"]
int_list = [int(i) for i in str_list]
print(int_list) # Output: [10, 20, 30, 40, 50]
Selles näites põhjustab loendi mõiste [int(i) for i in str_list] iga str_list elemendi konverteerimise täisarvuks int() funktsiooni abil, luues uue loendi int_list. See lähenemine võimaldab suurte andmemahte töödelda lühikese koodiga, parandades koodi loetavust ja jõudlust.
Massiline loendi konverteerimine veahaldusega
Kui loendis on andmeid, mida ei saa konverteerida (nt stringid või erimärgid), tekib viga. Sel juhul võite lisada tingimusi või erandite käsitlemise loendi mõistesse, et vältida konverteerimisvigu. Allpool on näide, mis konverteerib ainult need elemendid, mida saab täisarvudeks muuta.
str_list = ["10", "20", "abc", "30", "40"]
int_list = []
for i in str_list:
try:
int_list.append(int(i))
except ValueError:
print(f"Warning: '{i}' could not be converted to an integer.")
print(int_list) # Output: [10, 20, 30, 40]
Selles koodis kasutatakse try-except plokki string konverteerimiseks täisarvudeks, ning kui konverteerimine ebaõnnestub, kuvatakse veateade. Lisades append() meetodiga ainult konverteeritavad elemendid int_list-i, jätkub töötlemine ka siis, kui vigu tekib, ja saate konverteerimise tulemused. Massiline loendi konverteerimine on väga kasulik tehnika suurte andmemahtude töötlemiseks. Järgnevas jaotises võtabime kokku kogu artikli ja korraldame õpitu.
6. Kokkuvõte
Selles artiklis selgitasime, kuidas Pythonis teisendada stringide ja numbrite vahel, hõlmates aluseid kuni edasijõudnud teemasid. Mõistmine, kui oluline on tüübikonversioon andmetöötluses ja kuidas seda tõhusalt teha, laiendab Pythonis teostatavate operatsioonide valikut. Allpool on iga sektsiooni lühike kokkuvõte.
Artikli kokkuvõte
- Sissejuhatus
- Selgitasime olukordi, kus stringide ja numbrite vaheline teisendamine on vajalik, ning näitasime, miks tüübikonversioon on oluline numbriliste arvutuste ja andmete kuvamise jaoks.
- Põhitüübikonversioon Pythonis
- Õppisime põhilisi teisendusmeetodeid, kasutades
int(),float()jastr()funktsioone, et muuta andmetüüpe stringide ja numbrite vahel.
- Edasijõudnud näited: erinevate aluste ja täislaiuste numbrite teisendamine
- Tutvustasime, kuidas teisendada binaar-, okt- ja heksadesimaalarvud täisarvudeks ning kuidas teisendada täislaiused märgid poollaiusteks numbrilise käsitluse jaoks. Selgitasime ka, kuidas teisendada kanji numbreid numbriteks kasutades
unicodedata.numeric().
- Vigade käsitlemine ja sisendi valideerimine
- Arvestades, et numbrilise teisenduse käigus võivad tekkida vead, näitasime, kuidas eelvalideerida, kas väärtus on numbriline, kasutades
isdigit()ja regulaaravaldisi, ning kuidas käsitleda viguandite abil kasutadestry-except.
- Kuidas teisendada loendi elemente massiliselt
- Õppisime, kuidas teha massilist teisendust kasutades loendi mõistete (list comprehensions), kuidas käsitleda võimalikke vigu ning omandasime oskused suurte andmemahtude tõhusaks töötlemiseks.
Tulevased rakendused
Tüübikonversioon Pythonis on seotud peaaegu iga andmetöötluse ja põhiprogrammeerimise operatsiooniga. Järjepidevalt rakendades õiget tüübikonversiooni ja vigade käsitlemist reaalses arenduses, saate vähendada vigu ja kirjutada kõrgema kvaliteediga koodi. Lisaks võimaldab siin õpitud põhiliste teisendusmeetodite põhjal ja edasijõudnud andmete teisendamise tehnikate valdamine teil käsitleda keerukat andmetöötlust tõhusalt.
Loodame, et see artikkel on andnud teile põhjaliku arusaama Pythonis tüübikonversiooniks vajalike teadmiste ja tehnikate kohta. Rakendage õpitud teadmisi oma tulevastes programmeerimisprojektides.




