Прикреплённый файл «sort_show.py»

Загрузка

   1 #!/usr/bin/python
   2 # coding: utf8
   3 '''
   4 Отображение операций над списком с помощью PyGame
   5 '''
   6 
   7 import pygame, random, time
   8 import sort_count
   9 from math import *
  10 
  11 Bars,Gap,Sleep=3/4.,2,0.1
  12 
  13 def Init(size=(1024,768),sleep=0.1):
  14     global screen, cstart, back, Sleep
  15     pygame.init()
  16     sort_count.Init()
  17     screen=pygame.display.set_mode(size)
  18     cstart=random.randrange(360)
  19     back=pygame.Color("black")  # чтобы каждый раз гамма начиналась с нового цвета
  20     Sleep=sleep
  21 
  22 def Update(p):
  23     global Min, Max, W, H
  24     Min,Max=min(p),max(p)
  25     W,H=screen.get_width()-2*Gap,screen.get_height()-2*Gap
  26 
  27 def Fill(p):
  28     Update(p)
  29     screen.fill(back)
  30     for i in xrange(len(p)):
  31         col=pygame.Color("black")
  32         col.hsva=(int((cstart+359*(p[i]-Min)/(Max-Min))%360),100,100,100)
  33         hi=Bars*p[i]/float(Max-Min) # высота столбца
  34         screen.fill(col,(Gap+i*W/len(p), H*(1-hi), W/len(p)-Gap, Gap+H*hi))
  35 
  36 def Arc(p,i,j,color,fill=True):
  37     if fill: Fill(p)
  38     if i>j: i,j=j,i
  39     elif j==i: return
  40     col=pygame.Color(color)
  41     hi,hj=H*(1-Bars*p[i]/float(Max-Min))-4*Gap,H*(1-Bars*p[j]/float(Max-Min))-4*Gap
  42     xi,xj=Gap+(i+0.5)*W/len(p),Gap+(j+0.5)*W/len(p)
  43     pygame.draw.arc(screen,col,(xi,2*Gap,xj-xi,2*H*(1-Bars)),0,pi,Gap)
  44     pygame.draw.circle(screen,col,(int(xi),int(hi)),2*Gap)
  45     pygame.draw.circle(screen,col,(int(xj),int(hj)),2*Gap)
  46     pygame.draw.line(screen,col,(xi,H*(1-Bars)-2*Gap),(xi,hi),Gap)
  47     pygame.draw.line(screen,col,(xj,H*(1-Bars)-2*Gap),(xj,hj),Gap)
  48 
  49 def Cmp(p,i,j):
  50     Arc(p,i,j,"yellowgreen")
  51     Show()
  52     return sort_count.Cmp(p,i,j)
  53 
  54 def Swap(p,i,j):
  55     Arc(p,i,j,"tomato")
  56     Show()
  57     e1,e2=sort_count.Read(p,i),sort_count.Read(p,j)
  58     sort_count.Write(p,i,e2)
  59     sort_count.Write(p,j,e1)
  60     time.sleep(Sleep)
  61 
  62 def Swapn(p,I,J):
  63     Fill(p)
  64     for i,j in zip(I,J):
  65         Arc(p,i,j,"orange",False)
  66     Show()
  67     els=[sort_count.Read(p,i) for i in I]
  68     [sort_count.Write(p,J[i],els[i]) for i in xrange(len(els))]
  69     time.sleep(Sleep)
  70 
  71 def GT(p,i,j):
  72     return Cmp(p,i,j)>0
  73 
  74 def Show():
  75     pygame.display.flip()
  76     time.sleep(Sleep)
  77 
  78 def Wait():
  79     pygame.event.get()
  80     while True:
  81         pygame.display.flip()
  82         event = pygame.event.wait()
  83         if   event.type in (pygame.QUIT, pygame.KEYUP):
  84             return

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.