Práca so základnými datovými štruktúrami

Slovníky, zoznamy, reťazce

Máte zoznam, kde sa nachádzajú názvy farieb spolu s ich špecifikáciou farby podľa modelu RGB (red, green, blue):

colours = [
    ['red', 255, 0, 0 ],
    ['blue', 0, 0, 255],
    ['green' 0, 255, 0],
    ['red', 178, 34, 34],
    ['red', 139, 0, 0],
    ['green', 34, 139, 34],
    ['blue', 70, 130, 180],
    ['green', 50, 205, 50],
]

Názvy farieb sa v zozname opakujú. Napíšte program, ktorý takýto zoznam zmení (alebo vytvorí nový) tak, aby opakujúce sa farby mali index, napr.:

unique_colours = [
    ['red_1', 255, 0, 0 ],
    ['blue_1', 0, 0, 255],
    ['green_1' 0, 255, 0],
    ['red_2', 178, 34, 34],
    ...
]

Potom vytvorte slovník, ktorý mapuje názov farby na RGB a slovník opačný.

Bonusová fyzikálna otázka, ktorá nesúvisí s programovaním (aspoň nie počítačovým programovaním): Žltá farba je v modele RGB daná napr. [255, 244, 0], viz. link, čo je kombinácia červenej a zelenej farby. Monitor vám to (pravdepobne) zobrazuje podľa tejto špecifikácie (v monitore je, klasicky, červená, modrá a zelená LEDka). To znamená, že žltá, ktorú vnímate nemusí byť “žltý fotón,” ale stačí vám aj kombinácia zelenej a červenej. To dáva zmysel – vaše oko meria tiež len RGB (viz. napr. Feynmanove prednášky) a energia žltého fotónu je medzi energiou zeleného fotónu a červeného fotónu.

Fialová farba je v modele RGB daná napr. [128, 0, 128], viz. link. Z fyziky ale viete, že fialová farba je v spektre farieb až za modrou – jej fotón má väčšiu energiu. Ako je možné, že aj tu vám stačí len kombinácia? Nemala by byť kombinácia červenej a modrej farby zelená (alebo žltá) farba?

Z xkcd.com: “What if what I see as blue, you see as a slightly different blue because you’re using Chrome instead of Firefox and despite a decade of messing with profiles we STILL can’t get this right somehow.”

Kameň, papier, nožnice

1

Napíšte funkciu, ktorá náhodne vráti 'kameň','nožnice' alebo 'papier'.

Môžete využiť funkciu choice z balíčku random. Návod k použitiu je napr. na StackOverflow.

2

Napíšte funkciu, ktorá s Vami bude hrať kameň, papier, nožnice: To znamená:

kpn('papir') # vyhra / prehra
kpn('kulomet') # chybne gesto

Funkciu napíšte tak, aby volala predchádzajúcu funkciu.

3

Ďalej vylepšte hru použitím funkcie input.

4

Napíšte funkciu, ktorá bude počítať skóre a zastaví sa až vy alebo počítač dosiahnete 3 body.

5

Teraz modifikujte hru o voľby jašter, Spock.

Vysvetlenie Sheldona: “Scissors cuts paper, paper covers rock, rock crushes lizard, lizard poisons Spock, Spock smashes scissors, scissors decapitates lizard, lizard eats paper, paper disproves Spock, Spock vaporizes rock, and as it always has, rock crushes scissors.”

Web of Science a analýza metadat vedeckých článkov

Ako študenti Masarykovej univerzity máme dobrý prístup k vedeckým článkom a výborný prístup k ich metadatám cez stránku webofscience.com. Na tejto stránke si môžete nájsť základné informácie o článkoch, vyhľadávať napr. podľa témy, kľúčových slov, autorov, atď. (Mimo univerzitu by ste si za tieto služby platili. Existuje stránka crossref.org, ktorá je zadarmo, ale metadat je vačšinou menej a funkcionality tiež.)

Po vyhľadávaní je možné záznamy exportovať do roznych formátov (max. 500 záznamov). Záznam obsahuje informácie o každom článku - mená autorov, názov, aké články vo svojom článku referencujú, atď.

Vašou úlohou bude:

  1. Spracovať exportovaný súbor.
  2. Spočítať percento článkov, ktoré majú abstrakt.
  3. Nájsť 3 najčastejšie zmieňované články v referenciach.
Export pre balíček wosfile

Pre riešenie úlohy môžete využiť balíček wosfile, ktorý vám načíta typ súboru “Plain text” (viz. obrázky). Pracovať môžete s akýkoľvek exportom, alebo so súborom v štúdijných materiáloch v ISe, čo je export z požiadavku Topic: Python AND Topic: physics.

Načítavanie pomocou wosfile je jednoduché:

import wosfile

filename = "savedrecs.txt" # nazov exportovaneho suboru

data = []
for record in wosfile.records_from(filename):
    data.append(dict(record))

Abstrakt je pod heslom "AB", referencie pod heslom "CR" (cited references).