qusba / Pakkausalgoritmi_harjoitustyo

Tiralabran harjoitustyö syksy 2021
0 stars 0 forks source link

Vertaisarvionti #1

Closed vaisest closed 9 months ago

vaisest commented 2 years ago

Projekti kloonattu 8.10, commit 1c5ce75cf06645f8ddf2855d5469dea05e4fd0d0.

Projekti ei ilmeisesti sisällä minkäänlaista Python-moduulia? Projektille kannattaisi tehdä __init__.py-tiedosto, jonka avulla koko projekti voidaan importata Pythoniin. Tällä hetkellä from Huffman import * eikä import Huffman toimi ollenkaan. Pythonin viralliset ohjeet tähän löytyvät täältä.

Huomasin myös top-level koodia tiedostossa huffman_purku.py. Veikkaisin, että projektin kehittäminen olisi myös helpompaa, jos sitä on helpompi kokeilla. __main__.py tiedoston tekeminen, jossa on yksinkertainen käyttöliittymä ainakin auttoi omaa projektiani.

Huomaisin, että projektissa käytetään paljon global-avainsanaa. En oikein usko, että Python-projektissa pitäisi lähes koskaan joutua tilanteeseen, jossa sitä tarvitaan. Nämä johtavat helposti bugeihin, monimutkaistavat jopa yksinkertaisia asioita ja jos niihin on tarve, kannattaisi varmaan käyttää luokkaa, jossa luokkamuuttujia voidaan käyttää samalla tavalla. Luokat saattaisivat myös yksinkertaistaa projektin rakennetta. Tällä hetkellä se vaikuttaa hieman liian monimutkaiselta.

En ole varma ymmärsinkö käyttötavan oikein. Ilmeisesti ideana olisi antaa HuffmanKoodaus-luokalle tiedostopolku, ja lähettää HuffmanKoodaus eteenpäin pakkausfunktiolle. Yksinkertaisempi ratkaisu käyttäjälle olisi, jos huffman_pakkaa() olisi ainoa mitä tarvitsee käyttää, eli se tekisi itse HuffmanKoodaus-olion.

Koodaus vaikuttaa vielä olevan kesken, koska huffman_purku() ei vaikuta toimivan, mutta toivottavasti tästä palautteesta on edes jotain hyötyä.

qusba commented 2 years ago

Hei! En ole ihan varma mitä tarkoitat python moduulilla joka importtaa koko projektin. Tiedostoissa on valmiina importit niihin moduuleihin, mitä kukin tiedosto tarvitsee. Käyttöliittymää tällä hetkellä ei ole.

Mitä tarkoitat top-level koodilla?

Luokkamuuttujan käyttäminen globaleiden välttämiseksi oli hyvä idea, toteutin juuri sen. Myöskin se, että huffman_pakkaa() loisi itse HuffmanKoodaus -olion on hyvä idea.

Itselläni pakkaus, että purku toimivat VSCodessa testatessani. Huffman_purku tiedoston loppuun jos kirjoittaa testaavaa koodia, niin saa hyviä tuloksia. Tosin jonkinnäiköinen index.py tiedosto olisi hyvä tehdä jossa funktioita voi kutsua ja kokeilla.

Itselläni ainakin seuraavanlainen kutsu tuottaa tulosta huffman_purku.py tiedoston lopussa. Screenshot from 2021-10-11 09-13-25

qusba commented 2 years ago

Muutin nyt vielä rakennetta niin, että Huffman_pakkaa ja huffman_purku luovat itse HuffmanKoodaus -oliot. Eli testaaminen onnistuu Huffman_purku tiedoston lopussa syötteellä: Screenshot from 2021-10-11 09-54-55

vaisest commented 2 years ago

Hei! En ole ihan varma mitä tarkoitat python moduulilla joka importtaa koko projektin. Tiedostoissa on valmiina importit niihin moduuleihin, mitä kukin tiedosto tarvitsee. Käyttöliittymää tällä hetkellä ei ole.

Tarkoitan, että ohjelma voitaisiin importata Pythoniin yhdellä komennolla. Tosin voi olla, että tarkoituksena ei ole tehdä kirjastoa, mutta siinä tapauksessa kannattaisi tehdä __main__.py tiedosto. Sitten ohjelmaa voi käyttää komennolla python -m Huffman, eikä import epäonnistu millekkään tiedostolle. if __name__ == '__main__' voisi toki olla muuallakin, mutta yleensä se laitetaan main.py tiedostoon.

Top level koodilla tarkoitan tuota tiedoston lopussa olevaa koodia, joka myös käydään läpi, kun tiedosto importataan Pythoniin, mikä tietenkin epäonnistui minulla tuon tiedoston puutteen takia.