Python

Úr Wikibókunum, frjálsa kennslubókasafninu
Stökkva á: flakk, leita
Python logo

Python er öflugt forritunartungumál sem er notað í mörgum forritum. Python er í flokki forritunarmála sem eru kölluð scripting mál. Í þeim flokki eru meðal annars Tcl, Perl, Ruby, Scheme og Java.[1] Ekki þarf að þýða python kóða sérstaklega heldur gerist það sjálfkrafa þegar forritið er keyrt.[2]

Python styður margþætt forritunar viðmið, þar á meðal hlutbundna forritun, imperative og fallsforritun. Það er fullkomlega sveigjanlegt og hefur sjálfvirka minnis stjórnun. Eins og önnur sveiganleg forritunarmál er Python oft notað sem scripting mál en er þó ekki notað þannig á víðu sviði. Með því að nota verkfæri frá þriðja aðila er hægt að pakka Python kóða í sjálfstæða "executable" forrit. Til eru margir python þýðendur fyrir mörg stýrikerfi.[3]

Mikilvægt markmið þróunaraðila er að gera notkun Python skemmtilegt. Það endurspeglast í uppruna nafnsins (sjónvarpsserían Monty Python's Flying Circus).[4]


Saga[breyta]

Guido van Rossum

Python kom fyrst á markað árið 1991. Það var hannað af hollenska forritaranum Guido van Rossum hjá CWI (Centrum Wiskunde & Informatica) í Hollandi. Python var hannað sem arftaki ABC forritunarmálsins. Markmiðið var að hanna forrit sem gat brugðist við frábrigðum í forriti og tengdist við Amoeba operating system.

Árið 2000 var síðan gefið út Python 2.0 með mörgum nýjum eiginleikum. Meðal þeirra var „garbage collector“ sem hreinsar vinnsluminnið af hlutum sem eru ekki lengur í notkun. Þar að auki fullnægir Python 2.0 skilyrðum Unicode. Helsta breytingin í nýju uppfærslunni var sú að nú gat hver sem er þróað Python forritunarmálið.

Eftir langan tíma í prófun var Python 3.0 gefið út árið 2008. Forritunarmálið í Python 3.0 virkar ekki með fyrstu og annari útgáfunni af Python. Þó hafa mörgum eiginleikum Python 3.0 verið bætt við Python 2.6 og 2.7.[5]

Sérkenni[breyta]

  • Frítt og án höfundarréttar
  • Auðskiljanleg málskipan
  • Náttúruleg tjáning á kóða
  • Víðtækir gagnabankar
  • Fáanlegt í öll helstu stýrikerfi (t.d. Windows, Linux/Unix, OS/2, Mac, Amiga)

Verðlaun[breyta]

Python hefur unnið TIOBE verðlaunin fyrir forritunartungumál ársins tvisvar (2007,2010)[6]

Sýnidæmi[breyta]

Hér er hægt að keyra kóðann sem er hér fyrir neðan

Prufuforrit

# prufuforrit
print "Hello World"


Leikur

# simple Doodle Jump clone - use arrow keys to move

import simplegui
import random

# helper functions
def camera(pos):
   """ convert from world coordinates to screen coordinates """
   return [pos[0]-offset[0],pos[1]-offset[1]]

def height(y):
    """ account for inversion of vertical coordinates """"
    global h
    return h-y
 

class doodle:
    rebound = 7
    def __init__(self,pos):
        """ initialize doodle """
        self.pos = pos
        self.vel = [0,0]
    
    def nudge(self, x):
        """ method to push doodle to left or right """
        self.vel[0] += x
                
    def update(self):
        """ update doodle in draw handler, all physics done here """
        self.pos[0] = (self.pos[0] + self.vel[0]) % w
        
        # compute platforms oldy and newy before and after current step, respectively
        oldy = min(height(self.pos[1])//100, num_plat - 1)
        newy = min(height(self.pos[1]+self.vel[1])//100,num_plat - 1)
        
        # bounce if you cross platform height, are going down and hit the actual platform
        if oldy != newy and self.vel[1] > 0 and pl[oldy].exists and pl[oldy].left < self.pos[0] < pl[oldy].right:
            sound.play()
            self.vel[1] = min(-self.vel[1],-doodle.rebound)
            if random.random()> .7: 	#make the platform disappear occasionally
                pl[oldy].exists = False
        else:
            self.pos[1] += self.vel[1]
            
        # accelerate due to gravity
        self.vel[1] += .1
        
        # if doodle get near top of frame, update offset[1] to move camera up
        clearance = 300
        if self.pos[1]-offset[1] < clearance:
            offset[1] = self.pos[1] - clearance
        
        # restart if fall below screen
        if self.pos[1]-offset[1] > h+50:
            offset[0],offset[1] = 0,0
            dd.pos[0],dd.pos[1] = w//2,h-200
            dd.vel[1] = 0
            for i in range(0,num_plat):
                pl[i].exists = True

class platform:
    
    def __init__(self):
        """ create a platform with left and right boundaries and existence flag """
        global w
        width = random.randrange(100,160)
        self.left = random.randrange(25,w-(25+width))
        self.right = self.left + width
        self.exists = True

# define callbacks for event handlers
        
def keydown(key):
    """ velocity model for left/right motion of doodle """
    if key == simplegui.KEY_MAP["left"]:
        dd.nudge(-2.5)
    elif key == simplegui.KEY_MAP["right"]:
        dd.nudge(2.5)
        
def keyup(key):
    """ velocity model for left/right motion of doodle """
    if key == simplegui.KEY_MAP["left"]:
        dd.nudge(2.5)
    elif key == simplegui.KEY_MAP["right"]:
        dd.nudge(-2.5)

   
def draw(canvas):
    """ update doodle position, draw doodle, draw platforms that are visible and their heights """
    dd.update()
    canvas.draw_circle(camera(dd.pos),5,2,"White")
    
    # enumerate all multiples of 100 in range of offset[1] to offset[1] + height
    for steps in range(100*(offset[1]//100),h+offset[1],100):
        
        # convert steps to index for platforms
        ind = height(steps)//100
        if ind < num_plat and pl[ind].exists:
            canvas.draw_line(camera([pl[ind].left,steps]),camera([pl[ind].right,steps]),4,"Red")
        canvas.draw_text(str(height(steps)),camera([w-50,steps]),12,"Green")
        # canvas.draw_line(camera([0,steps]),camera([w,steps]),1,"White")
        
# initialize stuff
w = 800
h = 600
frame = simplegui.create_frame("Doodle Jump", w, h)
sound = simplegui.load_sound("http://commondatastorage.googleapis.com/codeskulptor-assets/jump.ogg") #hamster republic

# set handlers
frame.set_keydown_handler(keydown)
frame.set_keyup_handler(keyup)
frame.set_draw_handler(draw)

# create 1000 random platforms
num_plat = 1000
pl = [platform() for i in range(0,num_plat)]

# make first platform cover the whole bottom of the window so you don't die immediately
pl[0].left = 0
pl[0].right = w

# global offset store current camera information
offset = [0,0]

# create the doodle jumper
dd = doodle(camera([w//2,h-200]))


# get things rolling
frame.start()


Ókeypis bækur[breyta]

Bækur fyrir byrjendur:

Tenglar[breyta]

Heimildir[breyta]

  1. Python.org
  2. orvitinn.com
  3. Wikipedia
  4. Docs.python.org
  5. Wikipedia.org
  6. Tiobe.com