Skip to content

Εργαστηριακό τμήμα μαθήματος

Στο εργαστήριο του μαθήματος οι γλώσσες προγραμματισμού που εξετάζονται είναι η Python, η Haskell και η Prolog, ως εκπρόσωποι του προστακτικού, του συναρτησιακού και του λογικού προγραμματισμού αντίστοιχα.

Python

Haskell

Prolog

Εργαστηριακές ασκήσεις 2023-2024

template για το my_re_functions.py

my_re_functions_template.py
a_pgn_game = """
[Event "WCh 2023"]
[Site "Astana KAZ"]
[Date "2023.04.09"]
[Round "1.1"]
[White "Nepomniachtchi,I"]
[Black "Ding Liren"]
[Result "1/2-1/2"]
[WhiteElo "2795"]
[BlackElo "2788"]
[ECO "C85"]

1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6 5.O-O Be7 6.Bxc6 dxc6 7.Re1 Nd7 8.d4 exd4
9.Qxd4 O-O 10.Bf4 Nc5 11.Qe3 Bg4 12.Nd4 Qd7 13.Nc3 Rad8 14.Nf5 Ne6 15.Nxe7+ Qxe7
16.Bg3 Bh5 17.f3 f6 18.h3 h6 19.Kh2 Bf7 20.Rad1 b6 21.a3 a5 22.Ne2 Rxd1 23.Rxd1 Rd8
24.Rd3 c5 25.Qd2 c6 26.Rxd8+ Nxd8 27.Qf4 b5 28.Qb8 Kh7 29.Bd6 Qd7 30.Ng3 Ne6
31.f4 h5 32.c3 c4 33.h4 Qd8 34.Qb7 Be8 35.Nf5 Qd7 36.Qb8 Qd8 37.Qxd8 Nxd8
38.Nd4 Nb7 39.e5 Kg8 40.Kg3 Bd7 41.Bc7 Nc5 42.Bxa5 Kf7 43.Bb4 Nd3 44.e6+ Bxe6
45.Nxc6 Bd7 46.Nd4 Nxb2 47.Kf3 Nd3 48.g3 Nc1 49.Ke3  1/2-1/2
"""


def winner(a_pgn_game):
    pass


def date_of_game(a_pgn_game):
    pass


def diff_elo(a_pgn_game):
    pass


def moves(a_pgn_game):
    pass


if __name__ == "__main__":
    print(f"ΔΙΑΦΟΡΑ ΔΥΝΑΜΙΚΟΤΗΤΑΣ: {diff_elo(a_pgn_game)}")
    print(f"ΝΙΚΗΤΗΣ: {winner(a_pgn_game)}")
    print(f"ΗΜΕΡΟΜΗΝΙΑ ΑΓΩΝΑ: {date_of_game(a_pgn_game)}")
    print(f"ΠΛΗΘΟΣ ΚΙΝΗΣΕΩΝ: {moves(a_pgn_game)}")
Θα πρέπει να εμφανίζει:
ΔΙΑΦΟΡΑ ΔΥΝΑΜΙΚΟΤΗΤΑΣ: 7
ΝΙΚΗΤΗΣ: ΙΣΟΠΑΛΙΑ
ΗΜΕΡΟΜΗΝΙΑ ΑΓΩΝΑ: 09-04-2023
ΠΛΗΘΟΣ ΚΙΝΗΣΕΩΝ: 49

ανάγνωση και εκτύπωση ημερομηνιών

datetime_example.py
from datetime import datetime

# διάβασε μια ημερομηνία της μορφής ΕΕΕΕ.ΜΜ.ΗΗ 
# και εμφάνισε την ημερομηνία σε άλλες μορφές, 
# δείτε το https://strftime.org/
date1 =datetime.strptime("2024.4.10", "%Y.%m.%d")
print(date1.strftime("%d/%m/%Y"))
print(date1.strftime("%-d|%-m|%y"))
print(date1.strftime("%d-%B-%y"))
print(date1.strftime("%a %-d %b %Y"))
Ένα παράδειγμα εκτέλεσης
$ python datetime_example.py
10/04/2024
10|4|24
10-April-24
Wed 10 Apr 2024

ορίσματα γραμμής εντολών με το sys.argv

command_line_arg_example1.py
1
2
3
4
5
6
7
import sys


if __name__ == "__main__":
    print(f"ΠΛΗΘΟΣ ΟΡΙΣΜΑΤΩΝ: {len(sys.argv)}")
    for i, argv in enumerate(sys.argv):
        print(f"όρισμα {i} με τιμή {argv}")
Ένα παράδειγμα εκτέλεσης
$ python command_line_arg_example1.py 1 a bcde
ΠΛΗΘΟΣ ΟΡΙΣΜΑΤΩΝ: 4
όρισμα 0 με τιμή /Users/.../command_line_arg_example1.py
όρισμα 1 με τιμή 1
όρισμα 2 με τιμή a
όρισμα 3 με τιμή bcde

ορίσματα γραμμής εντολών με το argparse

argparse_example.py
import argparse


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--input_file', '-i', type=str, help='διαδρομή προς αρχείο εισόδου')
    parser.add_argument('--output_file', '-o', type=str, help='διαδρομή προς αρχείο εξόδου')
    args = parser.parse_args()

    print('Αρχείο εισόδου:', args.input_file)
    print('Αρχείο εξόδου:', args.output_file)
Ένα παράδειγμα εκτέλεσης
$ python argparse_example.py -i a.txt -o b.txt
Αρχείο εισόδου: a.txt
Αρχείο εξόδου: b.txt

απλό γράφημα με το matplotlib

matplotlib_example1.py
1
2
3
4
5
6
7
import matplotlib.pyplot as plt

days = ['Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή']
values = [10, 40, 50, 20, 35]
plt.bar(days, values, color='skyblue')
plt.ylabel('Περιστατικά')
plt.show()
Ένα παράδειγμα εκτέλεσης (θα πρέπει να έχει προηγηθεί η εγκατάσταση με το pip της βιβλιοθήκης matplotlib)
$ python matplotlib_example1.py
matplotlib example 1

χρονομέτρηση κώδικα στην Python με το time.time()

time_execution1.py
import time
import random


def be_busy():
    sleep_time = random.uniform(1, 3)
    time.sleep(sleep_time)


start_time = time.time()
be_busy()
end_time = time.time()

elapsed_time = end_time - start_time
print(f"Execution time: {elapsed_time} seconds")
Ένα παράδειγμα εκτέλεσης
$ python time_execution1.py
Execution time: 2.0694435829936992 seconds

χρονομέτρηση κώδικα στην Python με το timeit.default_timer()

time_execution2.py
from timeit import default_timer

import time 
import random


def be_busy():
    sleep_time = random.uniform(1, 3)
    time.sleep(sleep_time)


start_time = default_timer()
be_busy()
end_time = default_timer()

elapsed_time = end_time - start_time
print(f"Execution time: {elapsed_time} seconds")
Ένα παράδειγμα εκτέλεσης
$ python time_execution2.py
Execution time: 1.9552855410147458 seconds