Informatika1-2012/Eloadas5

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „Tartalom”)
 
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
1. sor: 1. sor:
Tartalom
+
        <h1>Irányított gráfok Sage-ben</h1>
 +
[https://docs.google.com/open?id=0Bwk5mjaCfPlVZ01uQ0ZXNmJQYUk BST]
 +
<!-- <img height="250" src="./images/bst.png" alt="BST"/> -->
 +
            <pre>sage: g = DiGraph({8:[3,10], 3:[1,6], 6:[4,7], 10:[14], 14:[13]})
 +
sage: g
 +
  Digraph on 9 vertices</pre>
 +
       
 +
          <h1>Lokális és globális változók</h1>
 +
          <p>A lokális változók csak a függvényen belül használhatók, "kívül"-ről, közvetlenül azok nem érhetők el.
 +
          A globális változók az alkalmazás "fő" részében léteznek</p>
 +
<pre>sage: def concatenate(L1,L2):
 +
    for x in L2:
 +
        L1.append(x)
 +
    return L1</pre>
 +
<pre>sage: L1 = [1,3,5,7]
 +
sage: L2 = [2,4,6,8]
 +
sage: concatenate(L1,L2)
 +
[1, 3, 5, 7, 2, 4, 6, 8]</pre>
 +
       
 +
        <h1>Gyorsrendező algoritmus</h1>
 +
<pre>sage: def quicksort(T):
 +
    less=[]
 +
    equal=[]
 +
    greater=[]
 +
    if len(T) &lt;= 1:
 +
        return T
 +
    middle = T[floor(len(T)/2)]
 +
    for x in T:
 +
        if x &lt; middle:
 +
            less.append(x)
 +
        if x == middle:
 +
            equal.append(x)
 +
        if x &gt; middle:
 +
            greater.append(x)
 +
    retList = quicksort(less)
 +
    concatenate(retList,equal)
 +
    concatenate(retList,quicksort(greater))
 +
    return retList</pre>
 +
       
 +
<h1>Python</h1>
 +
       
 +
<ul>
 +
            <li>Guido van Rossum</li>
 +
            <li>Monty Python</li>
 +
            <li>magas szintű programozási nyelv</li>
 +
            <li>interpreteres nyelv</li>
 +
            <li>objektumorientált</li>
 +
            <li>free and open source</li>
 +
            <li>2000. okt. 16 Python 2.0</li>
 +
            </ul>
 +
       
 +
        <p>Interaktív mód</p>
 +
          <pre>oktato:~$ python
 +
Python 2.7.3 (default, Aug  1 2012, 05:14:39)
 +
[GCC 4.6.3] on linux2
 +
Type "help", "copyright", "credits" or "license" for more information.
 +
>>> 2 + 3
 +
5
 +
>>> 5/3
 +
1
 +
>>> 5.0/3
 +
1.6666666666666667
 +
>>> 5.0//3
 +
1.0
 +
>>></pre>
 +
       
 +
          <pre>>>> sqrt(16)
 +
Traceback (most recent call last):
 +
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
 +
NameError: name 'sqrt' is not defined
 +
>>> 16^2
 +
18
 +
>>> 16**(1/2)
 +
1
 +
>>> 16**(1.0/2)
 +
4.0
 +
>>></pre>
 +
       
 +
        <h1>Változatok gyök1-témára</h1>
 +
        <p>Valósítsuk meg a gyökfüggvényt!</p>
 +
          <pre>>>> def sqrt(x):
 +
...    y = x**(1.0/2)
 +
...    return y
 +
...
 +
>>> sqrt(16)
 +
4.0
 +
>>></pre>
 +
       
 +
        <p>Rengeteg ún. module létezik a Python-hoz. Ezek általában feladat orientáltak.
 +
        Ilyen pl. a <code>math</code> module is.<br/>
 +
        Ahhoz, hogy egy module függvényeit használni tudjuk, először importálnunk kell azt.</p>
 +
          <pre>>>> import math
 +
>>> math.sqrt(16)
 +
4.0
 +
>>></pre>
 +
          <pre>>>> y = 16
 +
>>> sqrt(y)
 +
4.0
 +
>>> y
 +
16
 +
>>></pre>
 +
       
 +
<h1>Python scriptek</h1>
 +
<p>A Python script file kiterjesztése (hagyományosan, de nem kötelezően) <code>.py</code><br/>
 +
A fájl első sora: <code>#!/usr/bin/python</code> vagy <code>#!/usr/bin/env python</code><br/>
 +
A foo.py fájl futtathatóvá tétele: <code>chmod a+x foo.py</code><br/>
 +
Futtatása: <code>./foo.py</code></p>
 +
     
 +
<p>A <code>gyok1.py</code> file tartalma:</p>
 +
<pre>#!/usr/bin/python
 +
 
 +
def sqrt(x):
 +
    y = x**(1.0/2)
 +
    return y
 +
 
 +
y = 16
 +
sqrt(y)</pre>
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./gyok1.py
 +
oktato:~$</pre>
 +
       
 +
       
 +
<p>A <code>gyok2.py</code> a második verzió... (return?)</p>
 +
<pre>#!/usr/bin/python
 +
 
 +
def sqrt(x):
 +
    y = x**(1.0/2)
 +
    return y
 +
 
 +
y = 16
 +
return sqrt(y)</pre>
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./gyok2.py
 +
  File "./gyok2.py", line 8
 +
    return sqrt(y)
 +
SyntaxError: 'return' outside function
 +
oktato:~$</pre>
 +
       
 +
<p>A <code>gyok3.py</code> az eredmény kiíratása</p>
 +
<pre>#!/usr/bin/python
 +
 
 +
def sqrt(x):
 +
    y = x**(1.0/2)
 +
    return y
 +
 
 +
y = 16
 +
print sqrt(y)</pre>
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./gyok3.py
 +
4.0
 +
oktato:~$</pre>
 +
       
 +
<p>A <code>gyok4.py</code> szöveg kiíratása.<br/>Karakterkódolás kell:
 +
&#35;coding: utf-8</p>
 +
<pre>#!/usr/bin/python
 +
#coding: utf-8
 +
 
 +
def sqrt(x):
 +
    y = x**(1.0/2)
 +
    return y
 +
 
 +
y = 16
 +
print '16 négyzetgyöke:'
 +
print sqrt(y)</pre>
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./gyok4.py
 +
16 négyzetgyöke:
 +
4.0
 +
oktato:~$</pre>
 +
       
 +
<p><code>gyok5.py</code> Interakció: kérdezzük meg a felhasználót!<br/>
 +
A megvalósításhoz a <code>raw_input()</code> függvényt használjuk.</p>
 +
<pre>#!/usr/bin/python
 +
#coding: utf-8
 +
 
 +
def sqrt(x):
 +
    y = x**(1.0/2)
 +
    return y
 +
 
 +
y = raw_input("Adj meg egy egész számot!\n")
 +
print y,' négyzetgyöke:\n',sqrt(float(y))
 +
</pre>
 +
       
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./gyok5.py
 +
Adj meg egy egész számot!
 +
25
 +
25  négyzetgyöke:
 +
5.0
 +
oktato:~$</pre>
 +
<p>A beolvasott adat string tipusú, float-tá kellett alakítani!</p>
 +
       
 +
<h1>Python scriptek II.</h1>
 +
       
 +
<p>Argumentumok használata</p>
 +
<p>Az <code>arg1.py</code>, a kapott argumentumok használatához importálni kell a sys module-t:</p>
 +
<pre>#!/usr/bin/python
 +
#coding: utf-8
 +
 
 +
import sys
 +
 
 +
for arg in sys.argv:
 +
    print arg</pre>
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./arg1.py 1 argumentum
 +
./arg1.py
 +
1
 +
argumentum
 +
oktato:~$</pre>
 +
       
 +
       
 +
<p>Az argumentumok egy listában tárolódnak.
 +
<br/>Az <code>arg2.py</code>-nal a 0. és az 1. argumentum kiíratása:</p>
 +
<pre>#!/usr/bin/python
 +
#coding: utf-8
 +
 
 +
import sys
 +
 
 +
print sys.argv[0]
 +
if  len(sys.argv) > 1:
 +
  print sys.argv[1]</pre>
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./arg2.py 1 argumentum
 +
./arg2.py
 +
1
 +
oktato:~$</pre>
 +
<p>Az argumentumok listájának 0. eleme maga a script!</p>
 +
       
 +
<p>Még egyszer gyök, most argumentumként kapott értékkel</p>
 +
<pre>#!/usr/bin/python
 +
#coding: utf-8
 +
 
 +
import sys
 +
import math
 +
 
 +
def gyok(a):
 +
    return math.sqrt(a)
 +
 
 +
if  len(sys.argv) > 1:
 +
  x = sys.argv[1]
 +
  print 'x tipusa: ',type(x)
 +
  y = float(x)
 +
  print 'y tipusa: ',type(y)
 +
  a = gyok(y)
 +
else:
 +
  sys.exit(0)
 +
 
 +
print '\neredmény: ',a</pre>
 +
<p>Futtatása és eredménye:</p>
 +
<pre>oktato:~$ ./gyok_arg.py 36
 +
x tipusa:  &lt;type 'str'&gt;
 +
y tipusa:  &lt;type 'float'&gt;
 +
 
 +
eredmény:  6.0</pre>
 +
<p>Normál kilépés hibaüzenet nélkül: sys.exit(0)</p>

A lap jelenlegi, 2012. október 15., 14:12-kori változata

Tartalomjegyzék

Irányított gráfok Sage-ben

BST

sage: g = DiGraph({8:[3,10], 3:[1,6], 6:[4,7], 10:[14], 14:[13]})
sage: g
  Digraph on 9 vertices

Lokális és globális változók

A lokális változók csak a függvényen belül használhatók, "kívül"-ről, közvetlenül azok nem érhetők el. A globális változók az alkalmazás "fő" részében léteznek

sage: def concatenate(L1,L2):
    for x in L2:
        L1.append(x)
    return L1
sage: L1 = [1,3,5,7]
sage: L2 = [2,4,6,8]
sage: concatenate(L1,L2)
[1, 3, 5, 7, 2, 4, 6, 8]

Gyorsrendező algoritmus

sage: def quicksort(T):
     less=[]
     equal=[]
     greater=[]
     if len(T) <= 1:
         return T
     middle = T[floor(len(T)/2)]
     for x in T:
         if x < middle:
             less.append(x)
         if x == middle:
             equal.append(x)
         if x > middle:
             greater.append(x)
     retList = quicksort(less)
     concatenate(retList,equal)
     concatenate(retList,quicksort(greater))
     return retList

Python

  • Guido van Rossum
  • Monty Python
  • magas szintű programozási nyelv
  • interpreteres nyelv
  • objektumorientált
  • free and open source
  • 2000. okt. 16 Python 2.0

Interaktív mód

oktato:~$ python
Python 2.7.3 (default, Aug  1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 3
5
>>> 5/3
1
>>> 5.0/3
1.6666666666666667
>>> 5.0//3
1.0
>>>
>>> sqrt(16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sqrt' is not defined
>>> 16^2
18
>>> 16**(1/2)
1
>>> 16**(1.0/2)
4.0
>>>

Változatok gyök1-témára

Valósítsuk meg a gyökfüggvényt!

>>> def sqrt(x):
...     y = x**(1.0/2)
...     return y
...
>>> sqrt(16)
4.0
>>>

Rengeteg ún. module létezik a Python-hoz. Ezek általában feladat orientáltak. Ilyen pl. a math module is.
Ahhoz, hogy egy module függvényeit használni tudjuk, először importálnunk kell azt.

>>> import math
>>> math.sqrt(16)
4.0
>>>
>>> y = 16
>>> sqrt(y)
4.0
>>> y
16
>>>

Python scriptek

A Python script file kiterjesztése (hagyományosan, de nem kötelezően) .py
A fájl első sora: #!/usr/bin/python vagy #!/usr/bin/env python
A foo.py fájl futtathatóvá tétele: chmod a+x foo.py
Futtatása: ./foo.py

A gyok1.py file tartalma:

#!/usr/bin/python

def sqrt(x):
     y = x**(1.0/2)
     return y

y = 16
sqrt(y)

Futtatása és eredménye:

oktato:~$ ./gyok1.py
oktato:~$


A gyok2.py a második verzió... (return?)

#!/usr/bin/python

def sqrt(x):
     y = x**(1.0/2)
     return y

y = 16
return sqrt(y)

Futtatása és eredménye:

oktato:~$ ./gyok2.py
  File "./gyok2.py", line 8
    return sqrt(y)
SyntaxError: 'return' outside function
oktato:~$

A gyok3.py az eredmény kiíratása

#!/usr/bin/python

def sqrt(x):
     y = x**(1.0/2)
     return y

y = 16
print sqrt(y)

Futtatása és eredménye:

oktato:~$ ./gyok3.py
4.0
oktato:~$

A gyok4.py szöveg kiíratása.
Karakterkódolás kell: #coding: utf-8

#!/usr/bin/python
#coding: utf-8

def sqrt(x):
     y = x**(1.0/2)
     return y

y = 16
print '16 négyzetgyöke:'
print sqrt(y)

Futtatása és eredménye:

oktato:~$ ./gyok4.py
16 négyzetgyöke:
4.0
oktato:~$

gyok5.py Interakció: kérdezzük meg a felhasználót!
A megvalósításhoz a raw_input() függvényt használjuk.

#!/usr/bin/python
#coding: utf-8

def sqrt(x):
     y = x**(1.0/2)
     return y

y = raw_input("Adj meg egy egész számot!\n")
print y,' négyzetgyöke:\n',sqrt(float(y))

Futtatása és eredménye:

oktato:~$ ./gyok5.py
Adj meg egy egész számot!
25
25  négyzetgyöke:
5.0
oktato:~$

A beolvasott adat string tipusú, float-tá kellett alakítani!

Python scriptek II.

Argumentumok használata

Az arg1.py, a kapott argumentumok használatához importálni kell a sys module-t:

#!/usr/bin/python
#coding: utf-8

import sys

for arg in sys.argv:
    print arg

Futtatása és eredménye:

oktato:~$ ./arg1.py 1 argumentum
./arg1.py
1
argumentum
oktato:~$


Az argumentumok egy listában tárolódnak.
Az arg2.py-nal a 0. és az 1. argumentum kiíratása:

#!/usr/bin/python
#coding: utf-8

import sys

print sys.argv[0]
if  len(sys.argv) > 1:
  print sys.argv[1]

Futtatása és eredménye:

oktato:~$ ./arg2.py 1 argumentum
./arg2.py
1
oktato:~$

Az argumentumok listájának 0. eleme maga a script!

Még egyszer gyök, most argumentumként kapott értékkel

#!/usr/bin/python
#coding: utf-8

import sys
import math

def gyok(a):
    return math.sqrt(a)

if  len(sys.argv) > 1:
  x = sys.argv[1]
  print 'x tipusa: ',type(x)
  y = float(x)
  print 'y tipusa: ',type(y)
  a = gyok(y)
else:
  sys.exit(0)

print '\neredmény: ',a

Futtatása és eredménye:

oktato:~$ ./gyok_arg.py 36
x tipusa:  <type 'str'>
y tipusa:  <type 'float'>

eredmény:  6.0

Normál kilépés hibaüzenet nélkül: sys.exit(0)

Személyes eszközök