4: Duomenų tipai

Nuo šios pamokos pavyzdžiai ir kodo įvedimo laukeliai turės mygtukus „Programavimo konsolė“ ir „Veiksmų sekimas“. Naudokite juos kodo nagrinėjimui.

"Hello, World!" uždavinyje mes išmokome, kad Python gali pakartoti įvestą tekstą. Mes taip pat išmokome atlikti keletą veiksmų su skaičiais. Skaičiai ir tekstas yra skirtingo tipo duomenys - skiriasi jų saugojimas kompiuterio atmintyje ir veiksmai, kuriuos galima su jais atlikti.

Pavyzdys
Kas bus, jei palyginsime skaičių ir tekstą - kuris didesnis?

Kaip matote, gauname klaidos pranešimą, kad funkcijai max pateikti argumentai yra skirtingo tipo - neaišku, pagal ką juos lyginti.

  • "Hello, World!" yra teksto eilutė (angl. (text) string). Ji Python’e žymima str. Tai yra simbolių ar skyrybos ženklų eilė (daugiau žr. 7A pamokoje).
  • 35 yra sveikasis skaičius (angl. integer), žymimas - int. Pavyzdžiui, 42, -12, and 0 yra „int“ tipo.

Ar galėtumėte paaiškinti, kuo skiriasi “42” ir 42?

Netinkamo tipo duomenų naudojimas yra dažnai pasitaikinti programavimo klaida. Įsivaizduokite, jog bandote gerti obuolį: to negalite padaryti, kadangi gerti galima tik skysčius.

Duomenų tipą galite sužinoti iškviesdami type funkciją.

Pavyzdys
Kaip sužinoti duomenų tipą.

(Žodžio class reikšmė panaši kaip „tipas“ - nurodo duomenų pavadinimą bendroje klasifikacijoje.) Pavyzdyje matome, kad skaičiai yra toliau kategorizuojami į tipus: int ir float, kuris naudojamas skaičiams su reikšme po kablelio saugoti - tuomet reikšmės atminty saugomos kiek kitaip - būna apytikslės (daugiau žr. pamokoje 7B). Jei skaičiavime bus ir float, ir int tipų reikšmės, rezultatas bus float tipo, žr. pvz.

Pavyzdys
int and a float reikšmių naudojimas kartu.

Kai Python gauna veiksmą su int ir float, jis paverčia visus int į float ir tada atlieka veiksmus.

Pasirinkimo užduotis: Skaičiai su kalbeliu
Jei ankstesniame pavyzdy pakeisime 1.2 į 1.5, ką atspausdins pirma eilutė?
Teisingai! Čia reiktų paaiškinti 2 dalykus, kad suprastume, kodėl z buvo atspausdintas 3.0 (o ne 3).
    • Skaičiuojant x * y kartu naudojami int ir float tipai, todėl Pythonas int paverčia į float, ir grąžina z reikšmę su kableliu.
Kai Python spausdina float reikšmę, būtinai spausdinamas ir kablelis; jeigu skaičius yra sveikas - pridedama .0. P.s.: šio skaičiavimo metu y reikšmė ir tipas nepasikeitė .

Dažnai būna svarbu pakeisti duomenų tipą. Panašiai kaip obuolį galime paversti skysta mase, naudodami blenderį. Tam naudojamos tipo pakeitimo (angl., typecast) funkcijos:

x = float("3.4")

print(x-1)
Tekstą, kuriame buvo užrašyta "3.4" pakeičia į skaičių su kableliu3.4,ir atspausdina 2.4. Be tipo pakeitimo, programa užlūžtų.

Python leidžia kai kuriuos aritmetinius veiksmus atlikti su tekstu naudojant skaičius. Komanda print("Valio!" * 2) atspausdina Valio!Valio!. Kaip matote, Python tiesiog 2 kartus padaugino nurodytą tekstą. Vėliau pamatysime, jog str tipo duomenis taip pat galima sudėti, bet atlikti dalybos ar atimties nepavyks.

Įvairios tipo pakeitimo funkcijos elgiasi skirtingai :

  • keičiant float į int„nubraukiama“ informacija po kablelio: int(1.234) duoda 1, o int(-34.7) duoda -34 (atliekamas apvalinimas žemyn).
  • keisti tekstą (str) į int galima tik tada, kai tekste yra užrašytas sveikas skaičius (pvz, skaitant duomenis iš failo), pvz., int("1.234") bus klaida.
  • keisti str į float galima tik tada, jei tekste užrašytas realusis skaičius (ir nieko daugiau), o, pvz., float("sandwich") bus klaida.

Vienas dažniausių atvejų, kai reikia tipo keitimo, yra naudotojo įvestų duomenų atpažinimas. Įvestas tekstas verčiamas į skaičių:

Pavyzdys: Tipo keitimas

Dar vienas pratimas pamokos pabaigai.

Kadangi yra daug mygtukų po kodo įvedimo laukeliu, kai kuriuos perkelėme į meniu „Daugiau veiksmų…“

Programavimo pratimas: Tasty Typecasting
Parašykite programą, kuri padės jums pamaitinti jūsų draugus kvadratinėmis picomis. Tarkime, kad programa jums pateikia teksto eilutę inputStr. Jame bus skaičius su kableliu, reiškiantis picos kraštinės ilgį centimetrais L. Picos plotas turėtų būti skaičiuojamas naudojant formulę A = L*L. Tada, tarkime, kad kiekvienas draugas turi suvalgyti po 100 cm2. Suskaičiuokite, kiek žmonių gali būti pavalgydinti, suapvalindami iki artimiausio sveiko skaičiaus. Hint

Pavyzdys: jei inputStr yra "17.5", plotas bus 306.25 cm2, tad teisingas atsakymas yra 3.

Vėlesniuose pavyzdžiuose dažnai duomenys bus nuskaitomi iš teksto (po vieną eilutę), naudojant funkciją "input( )"  -- angl. reiškia „(duomenų) įvedimas“. Pvz., tokiu atveju, picos užduoties pradžioje būtų parašyta:

inputStr = input( )