Informatika2-2016/Gyakorlat10Megold

A MathWikiből
A lap korábbi változatát látod, amilyen Kkovacs (vitalap | szerkesztései) 2016. május 16., 12:39-kor történt szerkesztése után volt.

Tartalomjegyzék

Feladatok

Ma is a Spyderben fogunk dolgozni. Viszont megtanuljuk, hogyan kell programozni, mint a nagyok. Ehhez szükség lesz a Konsole-ra is. Ha kész egy fáljunk, mentsük el, keressük ki a helyét a Konsole-ban, majd a python script.py módon tudjuk futtatni.

Bevezető

  • Írjunk egy write_to_file.py nevű scriptet, ami két poziciónális paramétert kap: az első a fájl neve, a másik pedig a szó, amit tároljon el a fájlban! Figyeljünk arra, hogy az első paraméter mindig a script neve!
import sys
filename = sys.argv[1]
word = sys.argv[2]
with open(filename, "w") as f:
    f.write(word)

vagy

import sys
filename = sys.argv[1]
word = sys.argv[2]
f = open(filename, "w")
f.write(word)
f.close()

futtatás:

python write_to_file.py kutya.txt kuty
    • Módosítsuk úgy, hogy tetszőlegesen sok szót meg tudjunk adni a fájl után, ezeket továbbra is írja a fájlba, vesszővel elválasztva!
import sys
filename = sys.argv[1]
with open(filename, "w") as f:
    f.write(",".join(sys.argv[2:]))

vagy

import sys
filename = sys.argv[1]
with open(filename, "w") as f:
    s = ""
    for word in sys.argv[2:]:
        s += word + ","
    f.write(s[:-1])

futtatás:

python write_to_file.py kutya.txt kuty macs sajt
    • Legyen egy opcionális --delimiter, vagy röviden -d paraméterünk, amivel az elválasztójelet tudjuk megváltoztatni (vessző helyett tetszőleges).


(Lehet erre volt egyszerûbb megoldás...de nem emlékszem, az is lehet, hogy kihagytuk.)

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--filename", action="store", type=str)
parser.add_argument("-w", "--words", action="store", type=str)
parser.add_argument("-d", "--delimiter", action="store", type=str, default=',')
args = parser.parse_args()
 
with open(args.filename, "w") as f:
    words = args.words.split()
    f.write(args.delimiter.join(words))

futtatás:

python write_to_file.py -d . -f kutya.txt -w "kuty macs eger"

Foci, újból

Ponttáblázat

Töltsük le a data fájlunkat - Ez ugyanaz, amiből alőadáson dolgoztunk. Nyissunk meg egy új fájlt, legyen a neve tables.py és mentsük el az E0.csv mellé!

  • Olvassuk be a tartalmát a csv.DictReader-rel szótárakba! Ez könnyű, volt előadáson.
import csv
L=[]
with open('E0.csv', 'rb') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        L.append(row)
  • Módosítsuk, hogy fájl nevét a --file vagy a -f argumentumon keresztül kérjük el és parancssoron olvassuk be!
import csv
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--filename", action="store", type=str)
args = parser.parse_args()
L=[]
with open(args.filename, 'rb') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        L.append(row)

futtatás:

python tables.py -f E0.csv
  • Tároljuk el egy listában a csapatok neveit, minden csapatét egyszer!
import csv
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--filename", action="store", type=str)
args = parser.parse_args()
L=[]
with open(args.filename, 'rb') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        L.append(row)
teams = []
for x in L:
    if x['HomeTeam'] not in teams:
        teams.append(x['HomeTeam'])
    if x['AwayTeam'] not in teams:
        teams.append(x['AwayTeam'])
print teams

futtatás:

python tables.py -f E0.csv

Most ki fogjuk számolni az idény ponttáblázatát, persze lépésenként haladunk.

  • Számoljuk ki, hogy hány gólt lőtt és hány gólt kapott egy adott csapat eddig. Az eredményt tároljuk el {"csapat":{"Goals Scored":lőtt, "Goals Conceded":kapott}} formában, azaz szótárak szótáraként!
import csv
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--filename", action="store", type=str)
args = parser.parse_args()
L=[]
with open(args.filename, 'rb') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        L.append(row)
teams = []
for x in L:
    if x['HomeTeam'] not in teams:
        teams.append(x['HomeTeam'])
    if x['AwayTeam'] not in teams:
        teams.append(x['AwayTeam'])
goals = {}
for team in teams:
    goals[team] = {"Goals Scored": 0, "Goals Conceded": 0}
for x in L:
    goals[x['HomeTeam']]["Goals Scored"] += int(x['FTHG'])
    goals[x['HomeTeam']]["Goals Conceded"] += int(x['FTAG'])
    goals[x['AwayTeam']]["Goals Scored"] += int(x['FTAG'])
    goals[x['AwayTeam']]["Goals Conceded"] += int(x['FTHG'])
print goals

futtatás:

python tables.py -f E0.csv
  • Számítsuk ki, hogy hány pontot szerzett egy csapat (győzelem 3, döntetlen 1, vereség 0 pont). Bővítsük az eddigi adatainkat egy {"Points":pont} rekorddal!
Személyes eszközök