‘Oszt ás? Lebeg, Ő pontos? Kerek, Í-t És?

Lebegőpontos számok

Ebben a leckében megismerkedünk a legutolsó alapvető adattípusunkkal, a lebegőpontos számokat tárolni képes float típussal. De mi a pék az a lebegőpontos szám? Hát…

  • ha hosszan és nagyon akarod megérteni, akkor itt egy videó róla
  • ha csak rövidebben, akkor nem rossz a Wikipédia-cikk sem
  • ha meg baromira röviden, akkor tulajdonképp a tizedestörtekről van szó, a lebegő lebegőpont a tizedespont (nem, nem vessző), és azért lebegő, mert nézd meg az előző két forrást magadnak:P

Szóval a float tulajdonképp az int ellentéte, és az inthez hasonlóan ez is egy értelmes angol szó első fele, konkrétan a floating (=lebegő) -é. A mi szempontunkból az, hogy lebegőpontos, baromira nem érdekes, a fontos, hogy tizedestörtet tudunk vele tárolni. Más nyelvekben ez a típus a valós, azaz real, merthogy ezek ugye valós számok.

Namost, a számítógépek csak véges tizedes törteket tárolnak, azt is kettes számrendszerben, azaz vannak esetek, amikor tizedestörtekkel dolgozva nem azt az eredményt kapjuk, amit a józan ész sugall. Ilyet is látunk a videóban:

(A videóban említettem, hogy a Python 3.1 óta igaz, hogy (1/3)*3 = 1.0. Ha érdekel, hogy ezt a varázslatot (ez tényleg az:)) hogy csinálták, akkor itt érdemes kezdeni az okosodást, keress a “shortest floating point” kifejezésre.)

Ahogy tudtunk olyat írni, hogy egész_szám = int('2'), azaz a szöveget át tudtuk alakítani egész számmá, tudunk olyat is, hogy törtszám = float('2.2'), sőt olyat is, hogy törtszám = float('2'), meg még olyat is, hogy törtszám = float(2). Az első esetben ugyanúgy szöveget alakítunk át, a másodikban is, de ezt a szöveget akár egésszé is alakíthatnánk, csak nem akarjuk. A harmadik esetben egy rendes egész számot alakítunk át lebegőpontossá. írassuk ki a változók értékét print()-tel és nézzük meg jól.

Osztási műveletek

A Python 3 osztást ismer:

  1. A sima osztás: 9 / 2 = 4.5
  2. Az egészosztás, vagy integer division, vagy vagy floor division, de leginkább div, ami  magyarul maradékos osztás: 9 // 2 = 4
  3. A maradékképzés, vagy modulo, vagy csak mod: 9 % 2 = 1

Feladatok:

F0020a: Mi az eredménye az (x//y) * y + (x % y) kifejezésnek?

F0020b: Írj programot, amely a (programozói állásinterjúkról hírhedt) híres FizzBuzz-játékot mutatja be! A játék lényege, hogy egytől százig számolva a hárommal osztható számok helyett Fizz-t, az öttel oszthatók helyett Buzz-t, a hárommal és öttel egyaránt oszthatók helyett FizzBuzz-t mondunk, a többi számot kimondjuk rendesen.

F0020c: Írj programot, amely százszor dob hatoldalú kockával, és megmondja, hogy párosat vagy páratlan dobott többször (ja, azt is, ha esetleg egyenlő a számuk)! (Megoldás az expand source-ra kattintva.)


import random

páros = 0
páratlan = 0

for szám in range(0, 101):
    véletlen = random.randint(1, 6)
    if véletlen % 2 == 1:
        páratlan += 1
    else:
        páros += 1

if páros > páratlan:
    print('Páros volt több,', páros, 'darab.')
elif páros < páratlan:
    print('Páratlan volt több,', páratlan, 'darab.')
else:
    print('Sosem gondoltam volna, de ilyen is van: \
           egyenlő a párosok és a páratlanok száma.')

F0020d: Írj programot, amely addig dob százoldalú kockával, amíg először párosat nem dob! Írja ki az egyes dobások sorszámát és eredményét, végül azt, hogy hányadik kísérletre lett páros az eredmény! (Megoldás az expand source-ra kattintva.)


import random

szám = 999 #mindegy, csak páratlan legyen, hogy az első alkalommal belépjünk a ciklusba
kísérlet = 0

while szám % 2 != 0:
    kísérlet += 1
    szám = random.randint(1, 100)
    print('A(z) ', kísérlet, '. dobás eredménye: ', szám, '.', sep='')

print('A(z) ', kísérlet, '. dobás járt eredménnyel.', sep='')

 

Az előző alkalommal a karakterlánc és a lista objektumtípus összehasonlításával időztünk el. És az a helyzet, hogy a legalapabb részen túl vagyunk. Legközelebb már programozási tételekkel folytatjuk.

Advertisements

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s