Created
May 4, 2018 16:16
-
-
Save jO-Osko/3522a7f4f530b490bc0593bf034b65c1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Ni nujno, da se class imenuje enako kot datoteka, je pa to smiselna navada, ce imamo zgolj en class | |
class Task(object): | |
def __init__(self, title, done=False): | |
self.title = title | |
self.done = done | |
def output_nice(self): | |
if self.done: | |
return self.title + ": Done" | |
return self.title + ": Not done" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pickle | |
from Task import Task | |
# Pripravimo malo boljsi program, ki omogoci, da si na koncu shranimo opravila | |
# Ideja dela: | |
# Uporabimo pickle, v tem primeru je datoteka sicer vecja, v primeru vecjih objektov pa je vecinoma manjsa, predvsem pa je serializacija lazja | |
# !!!! POZOR !!!! pri uporabi pickla je potrebno biti previden, ce datoteka prihaja iz drugih virov, | |
# saj lahko izvede poljubno python kodo, kar zna prinesti tezave... | |
# Pripravimo si pomozne spremenljivke | |
SAVED_FILE_NAME = "task_list_simple_pickle.txt" # koncnica .txt je popolnoma poljubna (lahko bi izbrali karkoli, a take koncnice prepozna in odpira vecina programov) | |
# Raje si naredmio pomozno funkcijo, saj je koda tako bolj berljiva | |
def load_saved(): | |
# Manjsa tezavica, kaj naredimo, ce datoteka iz katere beremo se ne obstaja? | |
# Tole sicer presega snov, a ideja je sledeca: | |
# Poskusamo jo vseeno odpreti (try), in jo prebrati | |
# Ce pa gre kaj narobe, napako ulovimo (catch) in nadaljujemo z znanjem, da je slo nekaj narobe -> v nasem primeru ni datoteke | |
try: | |
# Preberemo datoteko za branje (crka "r"ead) | |
f = open(SAVED_FILE_NAME, "r") | |
# Uporabimo pickle, ki bo uspesno prebral, kaj je prej zapisal | |
tasks = pickle.load(f) | |
return tasks | |
except IOError: | |
print("NI NOBENE SHRANJENE DATOTEKE, ZACEL BOM S PRAZNO") | |
return [] | |
def save_tasks(tasks_to_save): | |
# Odpremo z crko "w"rite (za pisanje) | |
# Tu ni tezav pri neobstojeci datoteki, saj jo bo sistem ustvaril sam, ce ne obstaja (prazno) | |
# !!POZOR, klic te funkcije zbrise vse kar je dosedaj bilo v tej datoteki POZOR!! | |
f = open(SAVED_FILE_NAME, "w") | |
# Preprosto zapisemo vse stvari v datoteko (pozor, tu so v ozadju podrobnosti, kako tocno zadeva funkcionira, kako je z import objektov...) | |
# Ampak celotna zadeva deluje preprosto | |
pickle.dump(tasks_to_save, f) | |
# D.N. preglej vsebimo pcikle datoteke, vecinoma je ni mogoce razumeti | |
# Datoteko zapremo, s tem zagotovimo, da se stvari res zapisejo vanjo in jo damo na voljo ostalim programom. | |
f.close() | |
load_old = raw_input("Ali zelis naloziti sharanjena opravila?") | |
if load_old == "da": # Preberemo stare | |
task_list = load_saved() | |
else: # Uporabimo prazen seznam | |
task_list = [] | |
while 1: | |
title = raw_input("Vpisi naslednje opravilo") | |
print("Opraviti moras se: " + title) | |
done = raw_input("ali je opravilo opravljeno") | |
if done == "da": | |
# Opravljeno | |
task = Task(title, True) | |
else: | |
task = Task(title, False) | |
# V seznam dodamo trenut o opravilo | |
task_list.append(task) | |
end = raw_input("Zelis koncati (da/ne)?") | |
if end.lower() == "da": | |
break | |
print("POROCILO O OPRAVILIH") | |
print("Opravljena") | |
for sample_task in task_list: | |
if sample_task.done == True: # To bi lahko nadomestili kar z: if sample_task.done: | |
print(sample_task.title) | |
print("Neopravljena") | |
for sample_task in task_list: | |
if sample_task.done == False: # To bi lahko nadomestili kar z: if !sample_task.done: (Torej ce je res negacija sample_task.done) | |
print(sample_task.title) | |
print("Vsa opravila") | |
# Izpisemo vsa opravila (ne glede na njihovo opravljenost) s pomocjo definirane funkcije | |
for sample_task in task_list: | |
print(sample_task.output_nice()) | |
# DN: vprasaj uporabnika, ali res zeli shraniti nova opravila (in upostevaj njegovo zeljo) | |
print("SHRANUJEM") | |
save_tasks(task_list) | |
print("SHRANJEVANJE KONCANO") | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from Task import Task | |
# Pripravimo malo boljsi program, ki omogoci, da si na koncu shranimo opravila | |
# Ideja dela: | |
# Preden zacnemo, uporabnika vprasamo, ali zeli naloziti ze prej shranjena opravila | |
# Na koncu prepisemo stara opravila | |
# DN: Razmisli, kako bi dodal v stara opravila (namig: poglej dokumentacijo funkcije open) | |
# Pripravimo si pomozne spremenljivke | |
# Po dogovoru konstante (spremenljivke, ki jih nocemo spreminjati) pisemo Z_VELIKIMI_CRKAMI (tako dodatno povemo, da gre za konstanto) | |
SAVED_FILE_NAME = "task_list_simple.txt" # koncnica .txt je popolnoma poljubna (lahko bi izbrali karkoli, a take koncnice prepozna in odpira vecina programov) | |
# Raje si naredmio pomozno funkcijo, saj je koda tako bolj berljiva | |
def load_saved(): | |
# Manjsa tezavica, kaj naredimo, ce datoteka iz katere beremo se ne obstaja? | |
# Tole sicer presega snov, a ideja je sledeca: | |
# Poskusamo jo vseeno odpreti (try), in jo prebrati | |
# Ce pa gre kaj narobe, napako ulovimo (catch) in nadaljujemo z znanjem, da je slo nekaj narobe -> v nasem primeru ni datoteke | |
try: | |
# Preberemo datoteko za branje (crka "r"ead) | |
f = open(SAVED_FILE_NAME, "r") | |
# To ja zgolj zacasna spremenljivka, ki jo bomo vrnili | |
tasks = [] | |
# Gremo po vseh vrsticah | |
for line in f: | |
# Vemo, da so vrstice oblike: title,dokoncanost | |
# Zato jih locimo po vejici, in vsako zapisemo v svoj del | |
title, done = line.split(",") | |
if done == "True": | |
task = Task(title, True) | |
else: | |
task = Task(title, False) | |
tasks.append(task) | |
return tasks | |
except IOError: | |
print("NI NOBENE SHRANJENE DATOTEKE, ZACEL BOM S PRAZNO") | |
return [] | |
def save_tasks(tasks_to_save): | |
# Odpremo z crko "w"rite (za pisanje) | |
# Tu ni tezav pri neobstojeci datoteki, saj jo bo sistem ustvaril sam, ce ne obstaja (prazno) | |
# !!POZOR, klic te funkcije zbrise vse kar je dosedaj bilo v tej datoteki POZOR!! | |
f = open(SAVED_FILE_NAME, "w") | |
for task in tasks_to_save: | |
# Posamezeno opravilo zapisemo v datoteko, loceno z vejico, na koncu opravila pa novo vrstico | |
f.write(task.title + "," + str(task.done) + "\n") | |
# Datoteko zapremo, s tem zagotovimo, da se stvari res zapisejo vanjo in jo damo na voljo ostalim programom. | |
f.close() | |
load_old = raw_input("Ali zelis naloziti sharanjena opravila?") | |
if load_old == "da": # Preberemo stare | |
task_list = load_saved() | |
else: # Uporabimo prazen seznam | |
task_list = [] | |
while 1: | |
title = raw_input("Vpisi naslednje opravilo") | |
print("Opraviti moras se: " + title) | |
done = raw_input("ali je opravilo opravljeno") | |
if done == "da": | |
# Opravljeno | |
task = Task(title, True) | |
else: | |
task = Task(title, False) | |
# V seznam dodamo trenut o opravilo | |
task_list.append(task) | |
end = raw_input("Zelis koncati (da/ne)?") | |
if end.lower() == "da": | |
break | |
print("POROCILO O OPRAVILIH") | |
print("Opravljena") | |
for sample_task in task_list: | |
if sample_task.done == True: # To bi lahko nadomestili kar z: if sample_task.done: | |
print(sample_task.title) | |
print("Neopravljena") | |
for sample_task in task_list: | |
if sample_task.done == False: # To bi lahko nadomestili kar z: if !sample_task.done: (Torej ce je res negacija sample_task.done) | |
print(sample_task.title) | |
print("Vsa opravila") | |
# Izpisemo vsa opravila (ne glede na njihovo opravljenost) s pomocjo definirane funkcije | |
for sample_task in task_list: | |
print(sample_task.output_nice()) | |
# DN: vprasaj uporabnika, ali res zeli shraniti nova opravila (in upostevaj njegovo zeljo) | |
print("SHRANUJEM") | |
save_tasks(task_list) | |
print("SHRANJEVANJE KONCANO") | |
# Tezava takega nacina je v tem, da moramo vedno natancno vedeti, kako opravila shranjujemo | |
# Ena se malo dfugacna tezava je v primeru, ko naslov opravila vsebuje vejico "," | |
# Razmisli, kako bi lahko postopal v tem primeru |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from Task import Task | |
# Pripravimo prazen seznam | |
task_list = [] | |
while 1: | |
title = raw_input("Vpisi naslednje opravilo") | |
print("Opraviti moras se: " + title) | |
done = raw_input("ali je opravilo opravljeno") | |
if done == "da": | |
# Opravljeno | |
task = Task(title, True) | |
else: | |
task = Task(title, False) | |
# V seznam dodamo trenut o opravilo | |
end = raw_input("Zelis koncati (da/ne)?") | |
if end.lower() == "da": | |
break | |
print("POROCILO O OPRAVILIH") | |
print("Opravljena") | |
for sample_task in task_list: | |
if sample_task.done == True: # To bi lahko nadomestili kar z: if sample_task.done: | |
print(sample_task.title) | |
print("Neopravljena") | |
for sample_task in task_list: | |
if sample_task.done == False: # To bi lahko nadomestili kar z: if !sample_task.done: (Torej ce je res negacija sample_task.done) | |
print(sample_task.title) | |
print("Vsa opravila") | |
# Izpisemo vsa opravila (ne glede na njihovo opravljenost) s pomocjo definirane funkcije | |
for sample_task in task_list: | |
print(sample_task.output_nice()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment