Informatika2-2013/Gyakorlat08

A MathWikiből
(Változatok közti eltérés)
 
(egy szerkesztő 10 közbeeső változata nincs mutatva)
3. sor: 3. sor:
 
* Mûveletek mint C-ben, ami itt még pluszban van: ** (hatványozás)
 
* Mûveletek mint C-ben, ami itt még pluszban van: ** (hatványozás)
 
* Függvényeknek nem kell visszatérési értéket adni:
 
* Függvényeknek nem kell visszatérési értéket adni:
<code>
+
<python>
 
def fv_neve(x, y):
 
def fv_neve(x, y):
 
     return x + y
 
     return x + y
  
 
fv_neve(2, 10)
 
fv_neve(2, 10)
</code>
+
</python>
 
* Több dologra is emlékeztet az elõzõ 2 sor kód:
 
* Több dologra is emlékeztet az elõzõ 2 sor kód:
 
** Általában nem kell változóknak a típusát megadnunk
 
** Általában nem kell változóknak a típusát megadnunk
15. sor: 15. sor:
 
** Nincs pontosvesszõ, így értelemszerûen a sortörés számít
 
** Nincs pontosvesszõ, így értelemszerûen a sortörés számít
 
** függvényhívás mint C-ben.
 
** függvényhívás mint C-ben.
 +
* Tömbök helyett vannak listáink, melyek hasonlóan mûködnek:
 +
<python>
 +
l = [4, 5, 7, 8, 9, 4, 6]
 +
b = l[1] + l[0]
 +
l[2] = 8
 +
 +
print l[2:5]
 +
</python>
 +
* Észrevételek:
 +
** Változókat nem kell deklarálni, mint ahogy C-ben kellett (nem kell int b, ahhoz hogy használhassam b-t)
 +
** Listák szintén 0-tól indexelendõk
 +
** Részlistát lekérhetünk a fenti módon
 +
** print-el tudunk írni a kimenetre (terminálba a mi esetünkben)
 +
* További adatszerkezetek:
 +
<python>
 +
s = "The quick brown fox jumps over the lazy dog."  # string
 +
t = (4, 5)  # tuple
 +
 +
d = {"alma":6, "korte":8, "banan":24}  # dictionary
 +
print d["korte"]
 +
</python>
 +
* Észrevételek:
 +
** Stringek és tuple-ök megváltoztathatatlanok, tehát nem írhatom, hogy t[0] = 7, vagy s[2] = 'c', de írhatom, hogy s = "Valami mas"
 +
** Dictionary, azaz szótárak nem 0-tól n-ig indexelnek, hanem valamilyen kulcs szerint indexelnek, új elemet könnyû rakni hozzájuk pl: d["eper"] = 34
 +
** Kommenteket a # jellel írhatunk, a sor végéig hatnak, több soros kommentet pl a """Tobbsoros""" módon lehet
 +
* Beépített függvények az adatszerkezeteken:
 +
<python>
 +
l = range(5) # [0, 1, 2, 3 ,4]
 +
len(l) # 5
 +
 +
d = {"alma":6, "korte":8, "banan":24}
 +
d.keys() # ["alma", "korte", "banan"]
 +
d.values() # [6, 8, 24]
 +
"korte" in d # True
 +
</python>
 +
* Észrevételek:
 +
** range függvénnyel megkapjuk az adott hosszú tömb indexeinek a listáját
 +
** len függvény visszaadja a megadott lista hosszát (ilyen ugye C-ben nem volt)
 +
** szótár függvények magukért beszélne
 +
* Vezérlési szerkezetek:
 +
<python>
 +
x = 6
 +
y = 43
 +
if y > 21:
 +
    print "y nagyobb"
 +
elif y == 21:
 +
    print "y egyenlo"
 +
else:
 +
    print "y kisebb"
 +
 +
l = [5, 4, 6, 2]
 +
for i in l:
 +
    print i ** 2
 +
                  # 25 16 36 4
 +
 +
for i in range(len(l)):
 +
    print l[i] ** 2
 +
                  # 25 16 36 4
 +
 +
i = 0
 +
while i < 5:
 +
    print i ** 3
 +
                  # 0 1 8 27 64
 +
</python>
 +
* Észrevételek:
 +
** Nem kellenek zárójelek a feltételek köré
 +
** A vezérlési szerkezet feje után (a blokk kezdete jelzéseként) kettõspont kell
 +
** Van elif
 +
** A for ciklus nem úgy megy mint C-ben, itt egy listán halad végig a ciklusváltozóval
 +
** A range függvény segíthet a listaindexeken való haladáson, így már inkább C szerû for-t kapunk
 +
** A while ciklus mint C-ben
 +
 +
 +
* Vannak dolgok amikre lehet emlékeztek, de nem fog mûködne, mert csak sage-ben volt és nem python-ban, ezekre pár példa:
 +
** 28.factor()
 +
** x = var('x')
 +
** expand, solve, plot, is_prime
 +
 +
== Python script futtatása ==
 +
 +
==== Interaktív ====
 +
* Amit kevésbé fogunk használni, de néha hasznos lehet az az interaktív python:
 +
** Terminálba írjátok be, hogy python
 +
** Itt bármilyen parancsot irogathattok, az adott sor eredményét kiírja mindig, vagy print-elhettek is
 +
** exit()-el lehet kilépni
 +
 +
==== Script file ====
 +
* Nyissatok egy gedit-et (terminálba: gedit& [az és jel azért kell, hogy tudjunk tovább dolgozni a terminálban])
 +
* Mentsétek el ezt az üres file-t valahova '''proba.py''' néven (a kiterjesztés a fontos)
 +
* Terminálban navigáljatok el oda ahova mentettétek (cd mappa, cd ..)
 +
* Írjátok be terminálba hogy '''python proba.py'''
 +
* Remélhetõleg semmi nem történt, akkor minden oké
 +
* Most írjátok a file-ba (gedit-ben), hogy '''print "Hello World"'''
 +
* Mentsétek el, majd terminálba újra '''python proba.py'''
 +
 +
 +
== Feladatok ==
 +
 +
=== Kiegészítés 1 ===
 +
 +
Egészítsd ki az alábbi kódot, hogy a függvény az adott l lista azon elemeibõl álló listát adja vissza, melyek kisebbek az adott n számnál!
 +
 +
<python>
 +
def kisebbek(l, n):
 +
    l2 = []
 +
    for <!>:
 +
        <!>:
 +
            l2.append(i)
 +
    return l2
 +
 +
print kisebbek([1,5,54,7,3,5,75,3,6,3,43], 10)
 +
</python>
 +
 +
=== Lista 1 ===
 +
Csinálj függvényt ami megfordítja a kapott lista elemeit. Ne a reverse függvényt használd!
 +
 +
Példa be és kimenet:
 +
<python>
 +
l = range(4)
 +
print fordit(l) # [3,2,1,0]
 +
</python>
 +
 +
=== Lista 2 ===
 +
Csinálj függvényt ami két listából csinál egy szótárat. Egyik lista a kucsokat tartalmazza, a másik az értékeket.
 +
 +
Példa be és kimenet:
 +
<python>
 +
l = [5, "macska", 8]
 +
l2 = [2, [2, 5], "c"]
 +
print szotar(l, l2) # {5:2, "macska":[2,5], 8:"c"}
 +
</python>
 +
 +
=== Kiegészítés 2 ===
 +
 +
Egészítsd ki az alábbi kódot, hogy egy olyan kódot kapjunk, mely megfordítja majd kiírja az adott '''s''' string-et!
 +
 +
<python>
 +
s = "Volt egyszer egy kiskutya, elment a vasarba"
 +
s2 = ""
 +
for <!>:
 +
    s2 = i + s2
 +
 +
<!>
 +
</python>
 +
 +
=== String 1 ===
 +
Írasd ki minden második betűjét egy kapott stringnek!
 +
 +
=== String 2 ===
 +
írasd ki egy string karaktereit úgy, hogy az i. sorban az első i darab betűje van
 +
 +
=== Random ===
 +
Dobj n-szer dobókockával és utána írd ki az esetek számát és az átlag értéket.
 +
 +
'''Használd:'''
 +
 +
<python>
 +
import random
 +
 +
random.randint(1, 6) # a végpontok is kiosztódnak
 +
</python>
 +
 +
=== Euklideszi alg ===
 +
Valosítsd meg az algoritmust egy függvénnyel. Használj segéd fv-t vagy rekurziót ha kell.
 +
[http://hu.wikipedia.org/wiki/Euklideszi_algoritmus Algoritmus leírása]

A lap jelenlegi, 2013. április 2., 03:53-kori változata

Tartalomjegyzék

Sage/Python Ismétlés

  • Mûveletek mint C-ben, ami itt még pluszban van: ** (hatványozás)
  • Függvényeknek nem kell visszatérési értéket adni:
def fv_neve(x, y):
    return x + y
 
fv_neve(2, 10)
  • Több dologra is emlékeztet az elõzõ 2 sor kód:
    • Általában nem kell változóknak a típusát megadnunk
    • A def kulcsszóval tudunk függvényt definiálni
    • Fontos a formázás, itt nincs kapcsos zárójel, a szóközök jelzik, hogy melyik blokkon belül vagyunk (itt a return a def-en belül van, de a függvényhívás már nem)
    • Nincs pontosvesszõ, így értelemszerûen a sortörés számít
    • függvényhívás mint C-ben.
  • Tömbök helyett vannak listáink, melyek hasonlóan mûködnek:
l = [4, 5, 7, 8, 9, 4, 6]
b = l[1] + l[0]
l[2] = 8
 
print l[2:5]
  • Észrevételek:
    • Változókat nem kell deklarálni, mint ahogy C-ben kellett (nem kell int b, ahhoz hogy használhassam b-t)
    • Listák szintén 0-tól indexelendõk
    • Részlistát lekérhetünk a fenti módon
    • print-el tudunk írni a kimenetre (terminálba a mi esetünkben)
  • További adatszerkezetek:
s = "The quick brown fox jumps over the lazy dog."  # string
t = (4, 5)  # tuple
 
d = {"alma":6, "korte":8, "banan":24}  # dictionary
print d["korte"]
  • Észrevételek:
    • Stringek és tuple-ök megváltoztathatatlanok, tehát nem írhatom, hogy t[0] = 7, vagy s[2] = 'c', de írhatom, hogy s = "Valami mas"
    • Dictionary, azaz szótárak nem 0-tól n-ig indexelnek, hanem valamilyen kulcs szerint indexelnek, új elemet könnyû rakni hozzájuk pl: d["eper"] = 34
    • Kommenteket a # jellel írhatunk, a sor végéig hatnak, több soros kommentet pl a """Tobbsoros""" módon lehet
  • Beépített függvények az adatszerkezeteken:
l = range(5) # [0, 1, 2, 3 ,4]
len(l) # 5
 
d = {"alma":6, "korte":8, "banan":24}
d.keys() # ["alma", "korte", "banan"]
d.values() # [6, 8, 24]
"korte" in d # True
  • Észrevételek:
    • range függvénnyel megkapjuk az adott hosszú tömb indexeinek a listáját
    • len függvény visszaadja a megadott lista hosszát (ilyen ugye C-ben nem volt)
    • szótár függvények magukért beszélne
  • Vezérlési szerkezetek:
x = 6
y = 43
if y > 21:
    print "y nagyobb"
elif y == 21:
    print "y egyenlo"
else:
    print "y kisebb"
 
l = [5, 4, 6, 2]
for i in l:
    print i ** 2
                  # 25 16 36 4
 
for i in range(len(l)):
    print l[i] ** 2
                  # 25 16 36 4
 
i = 0
while i < 5:
    print i ** 3
                  # 0 1 8 27 64
  • Észrevételek:
    • Nem kellenek zárójelek a feltételek köré
    • A vezérlési szerkezet feje után (a blokk kezdete jelzéseként) kettõspont kell
    • Van elif
    • A for ciklus nem úgy megy mint C-ben, itt egy listán halad végig a ciklusváltozóval
    • A range függvény segíthet a listaindexeken való haladáson, így már inkább C szerû for-t kapunk
    • A while ciklus mint C-ben


  • Vannak dolgok amikre lehet emlékeztek, de nem fog mûködne, mert csak sage-ben volt és nem python-ban, ezekre pár példa:
    • 28.factor()
    • x = var('x')
    • expand, solve, plot, is_prime

Python script futtatása

Interaktív

  • Amit kevésbé fogunk használni, de néha hasznos lehet az az interaktív python:
    • Terminálba írjátok be, hogy python
    • Itt bármilyen parancsot irogathattok, az adott sor eredményét kiírja mindig, vagy print-elhettek is
    • exit()-el lehet kilépni

Script file

  • Nyissatok egy gedit-et (terminálba: gedit& [az és jel azért kell, hogy tudjunk tovább dolgozni a terminálban])
  • Mentsétek el ezt az üres file-t valahova proba.py néven (a kiterjesztés a fontos)
  • Terminálban navigáljatok el oda ahova mentettétek (cd mappa, cd ..)
  • Írjátok be terminálba hogy python proba.py
  • Remélhetõleg semmi nem történt, akkor minden oké
  • Most írjátok a file-ba (gedit-ben), hogy print "Hello World"
  • Mentsétek el, majd terminálba újra python proba.py


Feladatok

Kiegészítés 1

Egészítsd ki az alábbi kódot, hogy a függvény az adott l lista azon elemeibõl álló listát adja vissza, melyek kisebbek az adott n számnál!

def kisebbek(l, n):
    l2 = []
    for <!>:
        <!>:
            l2.append(i)
    return l2
 
print kisebbek([1,5,54,7,3,5,75,3,6,3,43], 10)

Lista 1

Csinálj függvényt ami megfordítja a kapott lista elemeit. Ne a reverse függvényt használd!

Példa be és kimenet:

l = range(4)
print fordit(l) # [3,2,1,0]

Lista 2

Csinálj függvényt ami két listából csinál egy szótárat. Egyik lista a kucsokat tartalmazza, a másik az értékeket.

Példa be és kimenet:

l = [5, "macska", 8]
l2 = [2, [2, 5], "c"]
print szotar(l, l2) # {5:2, "macska":[2,5], 8:"c"}

Kiegészítés 2

Egészítsd ki az alábbi kódot, hogy egy olyan kódot kapjunk, mely megfordítja majd kiírja az adott s string-et!

s = "Volt egyszer egy kiskutya, elment a vasarba"
s2 = ""
for <!>:
    s2 = i + s2
 
<!>

String 1

Írasd ki minden második betűjét egy kapott stringnek!

String 2

írasd ki egy string karaktereit úgy, hogy az i. sorban az első i darab betűje van

Random

Dobj n-szer dobókockával és utána írd ki az esetek számát és az átlag értéket.

Használd:

import random
 
random.randint(1, 6) # a végpontok is kiosztódnak

Euklideszi alg

Valosítsd meg az algoritmust egy függvénnyel. Használj segéd fv-t vagy rekurziót ha kell. Algoritmus leírása

Személyes eszközök