Informatika1-2012/Eloadas5
Tartalomjegyzék |
Irányított gráfok Sage-ben
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)