5:00

Tipurile de date de bază; numeric

Studiind materialul din cele patru capitole anterioare, ne-am deschis calea pentru continuarea studiilor de Python - familiarizat cu conceptele de bază ale programării orientate pe obiecte și au învățat despre variabile. Dar noi știm că pot fi stocate în aceste variabile? Probabil ai știut deja că variabilele pot conține informații utile, inclusiv data și ora valorile, siruri de caractere, și chiar funcții întregi. Dar este necesar să se respecte anumite reguli pentru a salva datele și interpretarea lor în Python. Pentru a înțelege aceste reguli, ar trebui să fie conștienți de tipurile de date acceptate în Python. Acest subiect este doar dedicată acestui capitol și următorul. Aici vom discuta despre tipurile de date care reprezintă valori numerice:

  • întreg (întreg);
  • intreg lung (intreg lung);
  • număr în virgulă mobilă (virgulă mobilă);
  • un număr complex (complex).

În acest capitol și următorul vom folosi numai tipurile de date de bază, care includ numărul, secvența și dicționar. Funcțiile vor fi discutate în capitolul 7, celelalte tipuri definite de utilizator sau obiecte acoperite în partea II. Acum zaymomsya tipuri de date numerice.

Calculatoarele nu sunt dotate cu inteligenta proprie, astfel încât programatori în cele mai multe limbaje de programare, trebuie să indice în mod explicit la ce tip de numere în care o anumită valoare. Mai mult decât atât, un limbaj compilat astfel de informații este necesară pentru a informa în prealabil, și anume, tipul variabilei trebuie declarate înainte de inițializarea variabilă. (Inițializare -. Această temă la prima valoare) nu încearcă să atribuie o valoare care nu se potrivește cu tipul declarat pentru ea, va eșua în compilatorul (pe care el cu siguranta „deliciu“). De exemplu, să presupunem că în C declarați o variabilă după cum urmează:

Această linie înseamnă că variabila n va conține o numere întregi pozitive sau negative. Să presupunem că undeva în codul programului pe care încercați să efectuați această sarcină: n = 3,14159;

* Notă. B. Shipkova: ultimul sfat, de fapt, este destul de util. Nu numai că, rezultatul poate fi înșelătoare în ceea ce privește acuratețea calculelor, și mai mult pe cont propriu de conversie de la un tip la altul este o operațiune destul de scump pentru procesor. Nu uita asta.

de lucru Python se bazează pe presupunerea că programator știe ce face. Tipuri statice de variabile în alte limbi - este rezultatul punerii în aplicare a conceptului de celălalt este faptul că programator are nevoie pentru a se proteja de la sine. Dynamically tastat, în cazul în care acestea nu sunt un abuz, va reduce în mod semnificativ și simplifica codul. De exemplu, să presupunem că ai citit un șir de caractere introduse de utilizator. Doriți să convertiți datele string la numere și să le utilizeze ca intrări în programul. În cazul în care utilizatorul este permis să intre numere întregi, numere întregi lungi și numere în virgulă mobilă, apoi în limbaj de programare obișnuită va trebui să facă să se prevadă cel puțin trei variabile de trei tipuri diferite. Și în Python va fi suficientă doar o singură variabilă, care poate conține orice număr de trei tipuri valide. Și acest lucru este posibil datorită definiției dinamice a tipurilor de date în Python.

Vom începe cu o discuție detaliată a subiectului pe care sunt deja familiare de tip - numere întregi.

Listarea 5.1. Operațiuni cu maxint

[MSC 32 biți (Intel)] pe Win32

>>> din import sys *

imprimare „mașină de 128 de biți:“

Print "maxint:" z, "-maxint:", -Z

Fig. 5.1 prezintă rezultatul programului inttest.py.

Rețineți că pe mașină pe 32 de biți cel mai mare număr întreg, care poate fi utilizată este valoarea (2 ** 31L) -1. Acest lucru se datorează faptului că un bit este folosit pentru a indica semnul - pozitiv sau negativ. În cele mai multe sisteme, este numit cel mai mare bit binar, sau doar un pic semn. Motivul pentru care nu puteți utiliza un număr care este exact egală cu valoarea 2 ** 31L (de exemplu, 21474836 ^ 8), este destul de complicat și murdar să-l explice în acest moment. Aceasta este legată de metoda de reprezentare a numerelor în sistem binar.

Cititorii interesați sunt încurajați să se refere la „Exemple și exerciții“ din acest capitol includ referiri la materiale suplimentare. Printre ei veți găsi servere în cercetarea sistemelor de numere de poziție, în cazul în care paralele și scoate în evidență problemele de reprezentare a numerelor de calculator. Alte limbi de calculator vă permit să stocați numere întregi fără semn, și sunt numere care, evident, numite nesemnate (fără semn). Numerele nesemnate vă permit să utilizați toate cele 32 de biți, dar numai pentru a reprezenta numere întregi pozitive.

Figura 5.1. Rezultatul inttest.py programului

În mod similar, pentru o mașină de 64 de biți cel mai mare număr întreg care poate fi utilizată este valoarea (2 ** 63) - 1, și este (2 ** 127) pentru o mașini de 128 de biți - 1. În munca ta iti place de obicei, nu se va ajunge la maxint valoare limită chiar și pe mașinile pe 32 de biți. Valorile maxime ale numerelor întregi în reprezentare pe 64 de biți și 128 biți - acesta este un număr foarte mare, care ar putea fi necesare doar pentru spațiu de cercetare, sau a contoriza numărul de molecule.

Dar dacă problema este cu maxim (minim) valorile admisibile încă acolo, nu dispera. numere întregi lungi - este o modalitate de a obține în jurul valorii de aceste limitări în Python, și le vom discuta în secțiunea următoare.

număr întreg lung este de tip întreg lung, care sunt, uneori, găsite, de asemenea, sub numele de tânjește sau bigints, prezente în Python pentru a începe cu. De fapt, se comportă exact în același mod ca și numere întregi obișnuite, dar fără a se limita prin orice limite. Conversia numere întregi de numere întregi lungi, și vice-versa, din păcate, nu este suficient de procedură transparentă pentru programatori. Dar există speranța că Guido elimina aceste diferențe în versiunile viitoare ale Python. Cu toate acestea, puteți încerca să vă facă un algoritm care va efectua automat conversia în cazul în care aveți nevoie de ea.

Ceea ce se înțelege prin cuvintele care nu sunt restricționate de orice limite? În realitate, acest lucru nu înseamnă că puteți utiliza numărul care merge la infinit. Aceasta se referă numai la faptul că restricțiile obișnuite extins în mod semnificativ. Ceea ce vine în jos în practică? Mai mult decât atât, dimensiunea oricărui anumit număr întreg lung subiect numai constrângeri reale care decurg din caracteristicile autovehiculului. De exemplu, nu puteți utiliza în programul său de un număr, care trebuie să dețină mai multă memorie decât are de fapt. Deci, pe mașina mea de acasă cu sistemul Server Windows NT 4.0 instalat 256 MB de RAM. În mod ideal, dacă ignorăm memoria necesară cheltuielile privind funcționarea sistemului de operare, și cel al interpretului Python, precum și un număr de utilitate obligatoriu, cel mai mare număr întreg lung pe care am putea folosi, teoretic, trebuie să se încadreze în 256 MB. Ca rezultat, am avea numărul de ceva lung în jurul valorii de 2 `013`` 265 920 cifre. Aceasta este o valoare destul de decente, dar totuși finită. În reprezentarea internă a computerului întreg lung este stocat ca un număr de 16 ryazryadnye cu o valoare maximă de 32 768. Deoarece 32 768-2 este în gradul 15, devine evident că al 16-lea bit este folosit pentru altceva. Acest bit 16-lea este folosit pentru a pune în aplicare „pavilion overflow“ (adică merge dincolo), care este utilizat pentru organizarea operațiunilor de transport, împrumut, etc. în același mod în care faci atunci când se decide sarcina de proiectare pe suport de hârtie. Pentru a înțelege mai bine cum aranjate numere întregi mari, încercați exercițiile date la sfârșitul acestui capitol.

Atunci când se lucrează cu numere lungi ar trebui să acorde o atenție nu numai pe capacitățile computerului, dar, de asemenea, pe răbdarea de utilizatori ai programului. De exemplu, în cazul în care programul ar trebui să imprima googolplex numărul, utilizatorul va trebui să stea la computer 5 ani, sau chiar mai mult.

nibailes / P140 / lecture22 / index.htm.) Listarea 5.3 prezintă o procedură simplă de determinare a lungimii anilor lumină spațiu de kilometri.

spion = 60 * 60 * 24 * 365.2422

n = lung (spion) * lung (p)