MetaBlog

AdásszünetSur Ba Programming Challenge


Kedves nézőink,

Megszakítjuk adásunkat, hogy bosszantsuk Önöket.
Továbbá: http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2017

Üdvözlettel,
A rendező gárda.

Tagek:
 
Utoljára módosította UPi 2017.VII.23 16:36-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink

2017-07-22Írj Képaláírást


upload:Descant/edge.png

A felső sor

Tagek:
 
Utoljára módosította Descant 2017.VII.22 13:10-n; 1 hozzászólás;
Bejegyzés módosítása | PermaLink

WWMD?Írj Képaláírást


"What Would Malcolm Do...?"

upload:IrjKepalairast/IMG_20170702_WA0002.jpeg

...ha egy retardált majom hozzábilincseli a bringáját az övéhez?

Tagek:
 
Utoljára módosította UPi 2017.VII.02 15:30-n; 2 hozzászólás;
Bejegyzés módosítása | PermaLink

A rekurziótól begolyózomSur Ba Programming Challenge


#!/usr/bin/python

import cgi
import cgitb
cgitb.enable()

form = cgi.FieldStorage()

def get_int_param(name, default):
    val = form.getvalue(name)
    if (val is None):
        return default
    return int(val)


def draw_circle(cx, cy, r):
    return '<circle cx="%f" cy="%f" r="%f" style="fill: none; stroke: #000000; " stroke-width="%d" />' % (cx, cy, r, 1)


def draw_circle_fractal(cx, cy, r, depth):
    result = draw_circle(cx, cy, r);
    if (depth > 0):
        r2 = r * 0.464101615
        r3 = r2 * 0.5773502690
        result = result + draw_circle_fractal(cx, cy - r + r2, r2, depth - 1)
        result = result + draw_circle_fractal(cx - r2, cy + r3, r2, depth - 1)
        result = result + draw_circle_fractal(cx + r2, cy + r3, r2, depth - 1)
    return result

print """Content-type: image/svg+xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   viewBox="0 0 600 600"
   version="1.1"
   height="600"
   width="600">
  <g>%s</g>
</svg>
""" % draw_circle_fractal(300300300, get_int_param("depth"4));

http://apocalypse.rulez.org/~upi/surba/circles.py?depth=2 [source]
http://apocalypse.rulez.org/~upi/surba/circles.py?depth=6 [source]
(Lehetőleg 6 feletti mélységben NE, mert megdöglik a számítógép!)

Hát húha. Itt egy csomó minden történt, ami eddig nem történt. Én meg nem szeretem, ha a dolgok másmilyenek! Lássuk, mi minden újdonsággal szolgál a mai csoda!

Függvények: Eddig csak a Python saját beépített függvényeit használtuk fel, mint pl az int, valamint a könyvárból előcsemegézett függvényeket, mint a cgi.FieldStorage. Eljött most az ideje, hogy sajátokat is csináljunk. Például, a get_int_param azt a bravúrt oldja meg nekünk, hogy beolvas és rögtön egész számmá alakít egy paramétert nekünk, ha pedig hiányozna (None az értéke), akkor egy alapértelmezett számot ad vissza helyette.

Ráadásul a függvények más függvényeket is meg tudnak hívni, például a draw_circle_fractal meghívja a draw_circle nevűt. Ha egy függvény pedig önmagát hívja meg, akkor azt rekurzív függvénynek hívjuk, és rettegünk tőle, hogy nehogy végtelen ciklust eredményezzen.

String formattálás: Eddig stringeket csak a + operátorral rakosgattunk össze. Van egy kényelmesebb módszer is: a formattálás, ami a stringet követő % operátorral működik. Fedezzük fel ennek a rejtelmeit!

Feladatok

  • Mi a szent szar a 0.464101615 és 0.5773502690? Ezek hogyan jöttek ki az UPinak?
  • Legyen paraméterezhető a körök vonalvastagsága, alapértelmezetten legyen 1.
  • A páros mélységben található köröket töltsük ki kék, a páratlanokat zöld színnel.
  • Ne három kör legyen egyben, hanem négy.
  • Bónusz feladat: Ne is, inkább öt!
  • Bónuszabb feladat: Rajzoljuk ki a Koch-görbét.
  • Legbónuszabb feladat: Rajzoljuk ki a Sárkány-görbét.
Tagek:
 
Utoljára módosította UPi 2017.VI.29 18:12-n; 2 hozzászólás;
Bejegyzés módosítása | PermaLink

Ha egy listát tudnék vezetni az összes esetről...Sur Ba Programming Challenge


...szerencsére tudok. A Pythonban létezik egy "lista" nevű adatszerkezet, ami pont az, amit a név alapján gondolnánk.

Egy üres listát a [] literállal hozhatunk létre, vagy akár rögtön bele is rámolhatunk dolgokat: [10, 20.3, "alma", x] egy listát hoz létre amiben egy egész, egy valós, egy szöveg és az x változó értéke van.

#!/usr/bin/python

import random
import cgitb
cgitb.enable()

numbers = []
for x in range(050):
    numbers.append(random.randrange(01000));

print "Content-type: text/html\n\n"
print "<h1>Numbers!</h1>"
print "<p>I love numbers. Here's a few for you:<br>", numbers, "</p>"
print "<p>The length of the list is "len(numbers)". The third element in the list is ", numbers[2]"</p>"

largest = -1
for num in numbers:
    if (num > largest):
        largest = num

print "<p>The largest number is <b>", largest, "</b>"

http://apocalypse.rulez.org/~upi/surba/list.py [source]

Vegyük észre:

  • A cgitb modul komoly segítséget jelent Python programok hibáinak felderítésében. Ha a program futása közben történik valami gikszer, akkor szépen kiírja színes-szagos formában. Akkor nem segít, ha a program szintaktikai hiba miatt nem értelmezhető, ilyenkor csak a PuTTY-os módszer célravezető.
  • A for egy új ciklus szervező utasítás ami egy megadott intervallumon halad végig, vagy egy lista tartalmán.
  • A print parancs képes egy teljes listát kiírni.
  • A lista hosszát a len eljárással tudhatjuk meg.
  • A listában tetszőleges elemet meg tudunk címezni a lista[szám] formulával. Az elemeket 0-tól számozzuk, mind mindig, tehát a list[2] a harmadik elemet adja vissza.

Feladatok

  • Legyen paraméterezhető a lista mérete!
  • Írjuk ki a legkisebb számot is a listában.
  • Írjuk ki a páros számokat.
  • Hogyan lehetne a második for ciklust úgy megírni, hogy nem használjuk fel azt a tudásunkat, hogy a legkisebb lehetséges szám a 0?
  • Írjuk ki a számok átlagát.
  • Bónusz feladat: Írjuk ki a számokat növekvő sorrendben!
Tagek:
 
Utoljára módosította UPi 2017.VI.28 12:42-n; 3 hozzászólás;
Bejegyzés módosítása | PermaLink

Céges hálóÍrj Képaláírást


upload:image.jpg

Tagek:
 
Utoljára módosította Grizli 2017.VI.27 10:23-n; 3 hozzászólás;
Bejegyzés módosítása | PermaLink

Játék a véletlennelSur Ba Programming Challenge


Kicsit visszatérünk a vektorgrafikához, mert miért ne! Az alábbi program véletlenszerűen rajzol egy négyszöget:

#!/usr/bin/python

import random

coords = ''
= 0
while (< 4):
    coords = coords + str(random.randrange(162)) + ","
    coords = coords + str(random.randrange(162)) + " "
    i = i + 1


print """Content-type: image/svg+xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   viewBox="0 0 64 64"
   version="1.1"
   height="600"
   width="600">
  <g>
    <path d="M """ + coords + """ z" 
      style="fill: none; stroke: #000000;" />
  </g>
</svg>
""";

http://apocalypse.rulez.org/~upi/surba/polygon.py [source]

Vegyük észre:

  • Az import paranccsal lehet a Python terjedelmes könyvtárából elemeket berántani a programunkban. Enélkül csak néhány egészen alapvető és közhasznú függvény áll rendelkezésre.
  • A Pythonban vannak eljárások, ezek közül kettőt látunk itt: a random.randrange és str nevűket.
    • Egy függvényt úgy lehet meghívni, hogy a neve után zárójelek között és vesszővel elválasztva felsoroljuk a paramétereit. Futás közben a eljárás majd szépen lefut, és behelyettesít valamilyen visszatérési értéket a helyére.
    • A random.randrange(1, 62) eljárás egy egész számot generál az [1, 62) intervallumban. Az eljárás két egész szám paramétert vár, és egy egész számmal tér vissza.
    • Mivel a Python + operátora nem hajlandó számot és szöveget "összeadni", ezért a számokat az str(szám) eljárással szöveggé alakítjuk kézi hajtással. Ez az eljárás egy szám paramétert vár és egy szöveggel tér vissza, ami a számnak a tízes számrendszerű reprezentációja lesz.
    • Később megtanuljuk majd, hogyan csináljunk saját eljárásokat is.
  • A koordináta-párokat az elején állítjuk össze, majd ügyesen belegyömöszöljük a kiírt SVG dokumentumba egy óvatlan pillanatban.

Feladatok

  • Legyen a sokszög éleinek a száma is véletlenszerű, háromszögtől nyolcszögig.
  • Legyen a sokszög éleinek száma véletlenszerű 4 és 12 között, de mindenképpen páros.
  • Bónusz feladat: Legyen a sokszög színe is véletlenszerű.
  • Bónusz feladat: Generáljunk négyzetet. Ha elfajuló, akkor pirosra színezzük ki, ha normális, akkor zöldre.
Tagek:
 
Utoljára módosította UPi 2017.VI.26 20:17-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink

Első lépésekSur Ba Programming Challenge


Képzeljünk el egy első Python weboldalt, ami imígyen néz ki:

#!/usr/bin/python

print """Content-type: text/plain

Hello, world!"""

http://apocalypse.rulez.org/~upi/surba/hello.py [source]

Mi történt itt? Az első sor arra van, hogy a futtató környezet tudja, hogy ez egy Python program. Utána indul egy print """ ... """ nevű varázslás, a tripla idézőjelek közötti részt a Python egy stringnek tekintí még akkor is, ha neadjisten soremelés lenne benne. A print szépen szolgaian kiírja a paraméterét, vagyis a következő két sort:

Content-type: text/plain

Hello, world!

Ez a teljes kimenet. A futtató környezet úgy működik, hogy ami az első üres sor előtt van, az a fejléc, ami utána az pedig maga az oldal. A fejlécben kijelentjük, hogy recece ez egy sima szöveges dokumentum lesz. Mindegy, ezt kell csinálni, oszt csókolom.

Hogyan izzítsuk be ezt a programot magunk?

Feltéve, hogy a SurBa vagy, a következőket kell csinálni:

  • Indíts egy Notepad++-t, csinálj egy hello.py nevű file-t és másold bele a fenti Python programot.
    • Fontos: A Notepad++-ban az Edit -> EOL Conversion -> Unix (LF) pontot ki kell választani minden file-nál, különben nem fog a webes környezetben működni.
  • Indítsd el a WinSCP nevű programot, lépj be vele az apocalypse-re.
    • A "File protocol" SFTP, a "Host name" apocalypse.rulez.org a "Port number" pedig 3712 legyen. (Ebből a 3712 nem értelemszerű, figyeld oda.)
    • A jobb oldali panelban menj a /home/surba/public_html könyvtárba.
    • Ide másold át a hello.py file-t.
    • Nyomj egy jobb gombot a felmásolt file-ra, válaszd ki a Properties menüpontot, és ott kattintsd be az összes "X' checkboxot. A többi maradjon ahogy volt. Ha minden jól megy, a "Rights" oszlopban az lesz ezután, hogy rwxr-xr-x, ami orkul azt jelenti, hogy a file-t bárki olvashatja és futtathatja, de írni csak a tulajdonos tudja.
  • Ez után, ha a fenti összes lépés sikerült, a http://apocalypse.rulez.org/~surba/hello.py [source] címen működésbe lép a program!

Ha mégsem működne valami:

  1. Lépj be az apocalypse-re PuTTY-tyal. Ugyanúgy a 3712-es portot kell használni és SSH protokollt.
  2. cd public_html paranccsal lépj be a megfelelő könyvtárba.
  3. ./hello.py parancs elindítja a programot; így látni fogod, hogy milyen hibát ír ki a rendszer.

Feladat

Működésbe hozni a hello.py-t a saját könyvtáradban.

Tagek:
 
Utoljára módosította UPi 2017.VI.28 10:14-n; 1 hozzászólás;
Bejegyzés módosítása | PermaLink

ArithmancySur Ba Programming Challenge


Ha az Első lépéseken túl vagy, akkor matekozzunk egy kicsit.

#!/usr/bin/python

print "Content-type: text/plain\n\n";

= 0

while i < 10:
    print i * i
    i = i + 1

http://apocalypse.rulez.org/~upi/surba/arithmancy.py [source]

Ami itt történik az az első tíz négyzetszám kiírása. Mivel az informatikusok hülyék és nullától számolnak, ezért ez nem az lesz, amire számítanál.

Feladatok

  • Írjuk ki a négyzetszámokat 1-től 100-ig!
 S- Ezt a http://apocalypse.rulez.org/~surba/fel1.py [source] oldalon meg is tettem elvileg. 
  • Írjuk ki az első húsz Fibonacci számot!
 S- Ezt pedig megleő módon a http://apocalypse.rulez.org/~surba/fel2.py [source] oldalon. 
Protip: A WinSCP képes arra, hogy a helyi változásokat automatikusan átmásolja a távoli könyvtárba a "Keep Remote Directory up to Date" nevű csodafunkcióval.
 S- A Protip jól jött, de az igazi protip az volt amikor kiderült, hogy mi az a 4 space rule meg hogy az identation mit jelent, meg hogy mi az az lf és hogy mennyire nem szoktam normális programokat installálni (ahol nem az a feladat, hogy nézzem a képeket és kávézzak). U.i: Ez nem jelenti azt, hogy automatikusan frissítek is, de a legnagyobb gondom amúgy is az volt, hogy más is látja amikor trial and error alapon piszkálok dolgokat.
Tagek:
 
Utoljára módosította SurBa 2017.VI.25 16:54-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink

Minden a háromszöggel kezdődikSur Ba Programming Challenge


Új vizekre evezünk: vektor grafikát fogunk termelni.

Az SVG (Scalable Vector Graphics) egy internetes szabvány az ilyen grafikák ábrázolására. Több szerkesztő program is létezik hozzá, ezek közül a kedvencem az Inkscape nevű, amivel pl az UpiRajzBlog nagy része is készült.

Az alábbi programban a Python rész minimális, csak egy print erejéig vesz részt a játékban. A többi csak az SVG-ről szól: definiálunk egy 64*64-es méretű logikai rajzfelületet amit 600*600 fizikai képpontra húzunk szét, majd ezen létrehozunk egy zárt alakot három pont koordinátával és azt szépen lezárjuk. Hogy pontosan mit jelent a "d", az "M", a "z" és a többi mágikus dolog itt, arra később visszatérünk majd, egyelőre legyen elég annyi, hogy ezek létrehoznak és lezárnak egy három pontból álló idomot. (Háromszögnek is nevezik.)

#!/usr/bin/python

print """Content-type: image/svg+xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   viewBox="0 0 64 64"
   version="1.1"
   height="600"
   width="600">
  <g>
    <path d="M 32,2 62,62 2,62 z" 
      style="fill: none; stroke: #000000;" />
  </g>
</svg>
""";

http://apocalypse.rulez.org/~upi/surba/triangle.py [source]

Feladatok

  • A háromszög nem szabályos. Legyen szabályos. Azt szeretem, ha a dolgok szabályosak.
  • Á nem is, legyen inkább szabályos négyzet.
  • A négyzet túlértékelt, legyen szabályos ötszög.
  • Bónusz feladat: legyen a sokszög piros színű.
Tagek:
 
Utoljára módosította UPi 2017.VI.25 16:49-n; 2 hozzászólás;
Bejegyzés módosítása | PermaLink