Kevät 2011
1- Johdanto
Luennot Luennoija lauri.jetsu@helsinki.fi Yleistä Paikka: Physicum D211 Maanantaisin kello 10.15-12.00: 17.1-2.5.2011 Aikataulun muutokset ilmoitetaan luennoilla ja kurssin kotisivulla. Merkki luentomuistiinpanoissa kertoo linkistä www:hen Paljon linkkejä itseopiskeluun sopivaan materiaaliin
Kurssin suorittaminen Suorittaminen Laajuus 5 op Paljon harjoittelua luentojen aikana Läsnäolo vapaaehtoista (s.o. jos perusteet hallussa) Suoritus tapahtuu lopputyöllä, joka määrää arvosanan Lopputyön teko aloitetaan parin viikon sisällä Joka tunnin alussa samat rutiinit Jokainen oppii varmasti perusteet. Määrä ei korvaa laatua. Parempi oppia vähän, mutta perusteellisesti. Kiire ei merkitse tuloksellisuutta. Lähtökohta: törmäätte tähän ensi kertaa Lähtökohta: aloitetaan aivan alusta Lähtökohta: keskitytään tekemiseen. Vaara: Saman kurssin vaatimukset kasvavat sitä mukaan, kun luennoitsija itse ymmärtää asioita.
Suorituksen tavoite Tavoite Oppia laatimaan tieteellinen dokumentti Linux perusteet Latex perusteet Python perusteet Tieteellisen tiedon hankinnan perusteet Kaikkia sovellettu lopputyössä, koska osaamisen arvioiminen kynällä ja paperilla hankalaa Lopputyön laadinnassa käytetään Linux, emacs, Python ja www-taitoja Lopputyössä laaditaan LAT E X dokumentti (Teksti, kuvat ja taulukot) Lopputyössä analysoidaan fotometrisiä havaintoja Lopputyössä ohjelmoidaan tehospektri (Power Spectrum) ja havaintojen mallinnus (Least squares fit)
Yleistä kurssista Esitellään tutkijan tarvitsemat käytännön työkalut Tähtitieteessä koulutetaan tutkijoita FM-tutkinto FT-tutkinto Tutkija tarvitsee työssään huomattavan määrän erilaisia taitoja ja työkaluja Osaa näistä taidoista tarvitaan heti opintojen alussa. Perusteet näistä on hallittava viimeistään Luk-työtä laadittaessa. Parusteet helpottavat opinnäytetöiden laadintaa Opittuaan perusteet voi valita oman tiensä Kokemus: en ole koskaan tarvinnut yli 50% luennoilla esitetyistä asioista. Esimerkiksi: IDL (20 vuotta) Python (muutama kuukausi) Johtopäätös: esittelen ainakin sen, mitä olen tarvinnut. Opetettaviin asioihin on tarjolla omia kurssejaan (ohjelmointi, statistiikka) Käsitellään siis Linux, LAT E X ja Python perusteita, sekä tieteellisen tiedon etsintää, tulkintaa ja esittämistä. Käytännön harjoittelu ja itseopiskelu luennoilla annetuista linkeistä suositeltavaa
Tutkijan työ Mitä tutkija tekee? Tutkii................................. (asiantuntijataidot, koulutustaso, kokemus) Julkaisee tutkimustuloksia.............(tieteellinen kirjoittaminen, tiedonhankinta) Opettaa....................................... (pedagogiset taidot, esiintyminen) Ohjaa..................................... (pedagogiset taidot, sosiaaliset taidot) Hankkii rahoitusta................................. (kirjoittaminen, viestintätaidot) Johtaa ja suunnittelee................. (yksiköitä, ihmisiä, projekteja, prosesseja) Viestii............................... (esiintymistaidot, popularisoi, kirjoittaminen) Tutkijan ura LuK-tutkinto........................................................... 3 vuotta FM-tutkinto...................................................... 2 vuotta lisää FT-tutkinto....................................................... 5 vuotta lisää Tutkijatohtori eli Postdoc......................................... 3-5 vuotta lisää Yliopistonlehtori/Vanhempi Tutkija........................seuraavat n 35 vuotta Professori/Tutkimusjohtaja.......................... seuraavat n + m 30 vuotta
Miksi suurin osa työajasta tietokoneen ääressä? Tietokoneita tarvitaan esimerkiksi: Havaintojen teossa ja suunnittelussa Havaintojen käsittelyssä ja simuloinnissa Havaintojen mallintamisessa Teorioiden mallintamisessa Julkaisujen laadinnassa Oppimateriaalien laadinnassa Tiedon hankinnassa Harva ongelma selviää päässä laskulla tai paperilla laskettuna Käyttöympäristön (= Linux) perusteet tunnettava Julkaisun laadinnan (= LAT E X) perusteet tunnettava Ainakin yhden ohjelmointikielen (esim. Python) perusteet tunnettava
Linux Mikä Linux? Kehittynyt Unix-käyttöjärjestelmästä. Linux on ilmainen. Säästää rahaa, aikaa ja vaivaa. Suosittu luonnontieteissä Ilmaiset ohjelmointityökalut oletusasennuksessa Supertietokoneet pyorivät Linux- ja Unix-järjestelmin, mikä on tärkeää jos haluaa ajaa omia ohjelmiaan. Haittaohjelmia on vähän. Monia tähtitieteessä tarvittavia ohjelmia ei saa Windows-puolelle. Tämän on luokkahuoneen tietokoneiden käyttöjärjestelmä on Linux.
L A T E X Mikä L A T E X? Ladontaohjelma Käyttäjä hoitaa asiasisällön, L A T E X hoitaa ulkonäön Tuottaa mm. Postscript ja PDF muotoa Käytetään julkaisujen, hakemusten, raporttien ja materiaalin kirjoittamiseen Suurimmat tähtietieteen julkaisusarjat käyttävät L A T E X:ia Helposti ammattimainen dokumentti: julkaisu, kirja, pro-gradu Monimutkaisetkin yhtälöt suhteellisen helposti Taulukot ja kuvat suhteellisen helposti Paljon (tuhansia) valmiita paketteja eri tehtäviin
Python Mikä Python? Tulkattu, vuorovaikuttava olio-ohjelmointikieli Ilmainen Saatavilla kaikille yleisille käyttöjärjestelmille (Linux, Mac, Windows) Suhteellisen helppo oppia Hyvin monipuolinen Suosittu tähtitieteessä ja luonnontieteissä Paljon valmiita paketteja mitä erilaisimpiin tehtäviin. Monissa tähtitieteen ohjelmistoissa on Python-rajapinta. Voidaan yhdistää muihin kieliin: mahdollista kirjoittaa vaativaa laskentaa tarvitsevat osat tehokkaammalla käännetyllä kielellä (C,FORTRAN)
Astronomy in World Wide Web WWW:ssä esimerkiksi: Tämä ja monet muut kurssit: Esimerkiksi TSA I Julkaisutietokannat: Lopputyössä käytettävä ADS Kohdetietokannat: Lopputyössä käytettävä SIMBAD Tieteelliset julkaisut: Esimerkiksi Astronomy & Astrophysics Rahoitus: Esimerkiksi Suomen Akatemia Työpaikkoja: Esimerkiksi AAS Job Register Havaintodataa, työkaluja, ohjelmistoja, havaintolaitteiden manuaaleja, konferensseja,...
2- Linux
Linux Mikä on Linux? Tavoite: Tutustuttaa Linuxin perusteisiin. Tavoite: Kaikki oppivat. Linuxin perusteet ovat jo tutut jne... Lähdekoodi vapaasti saatavilla ja sitä kehitetään jatkuvasti Nykyisin standardiin pohjautuvat monien valmistajien käyttöjärjestelmät Suosittu luonnontieteissä Yleinen mm. yliopistoissa, yrityksissä, supertietokoneissa Samalla koneella voi olla monta yhtäaikaista käyttäjää Turvallinen: Käyttäjä ei pääse käsiksi järjestelmän tai muiden käyttäjien tiedostoihin Ei juuri haittaohjelmia Ohjelmoijaystävällinen: Ilmaisia ohjelmointiympäristöjä ja paljon valmiita kirjastoja. Tarkempaa tietoa esimerkiksi osoitteesta: http://www.linfo.org Linux info
Linux Komentotulkki Komentotulkki suorittaa käyttäjän terminaalilta kirjoittamia komentoja Jokainen komento tekee yhden asian hyvin: tulostus, tiedon siirtäminen, verkkoyhteys,.. Hyvin riippuu käyttäjästä, koska valinnanvaraa loputtomiin Asioita ei tarvitse keksiä uudelleen Suuri määrä komentoja: Osa opeteltava ulkoa sujuvaa käyttöä ajatellen Käytännössä komennot opeteltava yksi kerrallaan, s.o. mitä milloinkin sattuu tarvitsemaan Käytännössä monimutkaisemmat komennot kannattaa kirjoittaa ylös, koska vie aikansa ymmärtää ne ja saada ne toimimaan Yksi esimerkki alkeisopaasta
Tiedostorakenteista Kotihakemisto Terminaalissa komento: ssh -Y -lusername sky.astro.helsinki.fi Poistuminen komennolla: exit Käyttäjillä on kotihakemisto muotoa /home/username/ Sen alle luodut hakemistot ja tiedostot kuuluvat oletuksena käyttäjälle. Kotihakemisto on käyttäjän henkilökohtainen tila koneella. Oikeudet hakemistopuussa kotihakemiston ulkopuolella oleviin tiedostoihin ovat pääosin rajoitettuja. Linuxin tiedostorakenne on puumainen. Sen juurihakemisto on /. Kokeile komentoa: cd /. Erilliset kiintolevyt ja muut vastaavat ovat osa tätä puuta, eivätkä käyttäjälle ulkoisesti eroa hakemistoista.
Hakemistot Hakemistotermejä Tiedostot ja hakemistot on siis tallennettu puumaiseen rakenteeseen (directory tree) Juuri (root, /) Käyttäjän kotihakemisto (/home/) (home directory) Voidaan lyhentää ~ Työhakemisto (/home/username/) (work directory) Näkyy komentorivillä./ Ylähakemisto (/home/username/nimi/) (parent directiory) Hakemistoja luodaan komennolla mkdir Komennoissa isot ja pienet kirjaimet merkittäviä (case sensitive) Kokeile komentoja: MKDIR tai Mkdir Ei kaikkia tiedostoja kotihakemistoon Käytä hakemistoja tiedon järjestelemiseen, esim. aiheittain.
Perustermejä Absoluuttinen polku Ilmaisee tiedoston tai hakemiston sijainnin hakemistopuussa juuresta lähtien. Esimerkkipolku: /home/username/kurssit/ Suhteellinen polku Ilmaisee tiedoston tai hakemiston sijainnin hakemistopuussa siitä hakemistosta lähtien, missä työskentelet. Esimerkiksi../kurssit/ komento cd.. vaihtaa hakemistoa alaspäin (aina juureen asti) Kokeile: Toista komentoa cd.. kunnes olet juuressa Kokeile: komentoa ls.. Kokeile: komentoa ls../home/
Tiedosto ja hakemisto peruskomentoja Peruskomennot mkdir nimi luo hakemiston nimi Kokeile komentoa mkdir tkm pwd tulosta nykyinen työhakemisto cd nimi vaihda hakemistoa cd palaa kotihakemistoon /home/username/ ls listaa hakemiston sisältö ls *.dat tulosta kaikki.dat loppuiset tiedostot (* merkki on jokeri ) cp nimi1 nimi2 kopioi tiedoston mv nimi1 nimi2 siirtää tiedoston rm nimi tuhoaa tiedoston touch nimi luo tyhjän tiedoston nimi rmdir nimi tuhoaa hakemiston nimi
Hakemistojen idea Esimerkki hakemistoista Luodaan nyt tälläinen hakemistorakenne /home/username/ /home/username/tkm/ /home/username/jotainmuuta/ /home/username/tkm/ohjelmat/ /home/username/tkm/lahteet/ /home/username/tkm/lopputyo/ Harjoitellaan nyt edellisen sivun komentoja
Tietoa komennoista Kuinka ottaa selvää kommennoista Käyttö: komento -opt1 --opt2 argumentti Esimerkiksi: Mitä tiedostoja tai hakemistoja on hakemistossa /home/username/ mukaan lukien. merkillä alkavat tiedostot? ls -a /home/username/ Komento man arg näyttää komennon arg manuaalisivut Komento info arg näyttää komennon arg infosivut Tarvitaan tietoa siitä, kuinka tiedostoja tai hakemistoja kopioidaan Käytetään komentoja man cp tai info cp Poistuminen näiltä sivuilta komennolla q Kokeillaan komentoa cp -i
Komentotulkki Komentotulkin käyttö Komentoja voi täydentää sarkaimella (tabulator) Esimerkiksi ho tabulator tuottaa host Myös tiedoston tai hakemiston nimiä voi täydentää Annetut komennot tallentuvat komentopinoon Nuolinäppäimillä voi selata komentopinoa Nuolinäppäimillä voi editoida komentoa Esimerkiksi komento history 10 tulostaa näytölle 10 viimeiksi annettua komentoa:
Komentotulkin käyttö Komentotulkin käyttö Komennon ulosanti voidaan ohjata suoraan toiseen komentoon tai tiedostoon Esimerkki komennosta tiedostoon käytöstä: ls > aaa tulostaa hakemiston sisällön tiedostoon aaa Komento cat aaa tulostaa näyttöön syntyneen tiedoston aaa Komennosta komentoon esimerkki: grep abc /home/username/* sort - komento grep abc etsii ne tiedostot * hakemistossa /home/username/ joissa esiintyy merkkirivi abc ja sort - tulostaa löydetyt tiedostot aakkosjärjestykseen Komennoille voidaan siis putkittaa (pipe, ) toisen komennon tuloksia Putkeen voi liimata peräkkäin useita komentoja Putkia en ole juurikaan tarvinnut
Alias Alias Komennoilla on normaalisti oletuskäyttäytyminen (mm. oletusflagit) Oletuskäyttäytymistä voidaan muuttaa Komennoista saadaan useita eri muunnelmia Komento cp file1 file2 kopioi tiedoston file1 sisällön tiedostoon file2 Jos file2 on olemassa, kirjoitetaan mitään kysymättä tiedoston päälle Komento cp -i kysyy ensin, haluatko varmasti? alias cp= cp -i määrittelee uuden komennon cp, joka käyttäytyy kuten cp -i Pitkät usein käytetyt komennot kannattaa lyhentää alias nimi= pitkä_komento --ja --flagit Aliaksia on ikävä määritellä joka kerta erikseen Aliakset kannattaa laittaa tiedostoon /home/username/.bashrc /home/username/.bashrc on alustustiedosto, joka luetaan joka kerta kun komentotulkki käynnistyy
Alias Alustustiedosto Esimerkki (teillä samanlainen) alustustiedostosta /home/username/.bashrc #.bashrc # User specific aliases and functions alias c= clear alias cp= cp -i alias rm= rm -i export HISTSIZE=50 alias psp0= lpr -PHewlett-Packard-HP-Laserjet-1200 # Source global definitions if [ -f /etc/bashrc ]; then. /etc/bashrc fi Komento clear kommennoksi c Komento cp kommennoksi cp -i Komento rm kommennoksi rm -i Komento psp0 helpottaa printtaamista printterille Hewlett-Packard-HP-Laserjet-1200
Ympäristömuuttujat Ympäristömuuttujat tallentavat: Komentotulkin tarvitsemaa tietoa, lyhenteitä, polkuja,... Komento env kertoo, mitä ympäristömuuttujia on asetettu Ympäristömuuttujia ja asetuksia voi muuttaa alustustiedostossa.bashrc Kokeilkaa esimerkiksi alias emacs= emacs -fg black -bg yellow -cr black Esimerkiksi export HISTSIZE=50 Muuta tietoa alustustiedostoista Jos käytössä bash (kuten nyt): alustustiedosto.bashrc Jos käytössä chs: alustustiedosto.cshrc Kirjoittakaa www:hen what is bash in Linux ja jos kiinnostaa, yrittäkää ymmärtää loputtomat selitykset. Sen sijaan, jatketaan kohti lopputyön aloittamista.
Tekstin selaus komentoja less Käytetään tekstitulosteiden selaamiseen. less tiedosto Kokeile less.bashrc Kokeile ls -a less grep Käytetään tekstin etsimiseen tekstitulosteesta. grep sana tiedosto Kokeile grep a.bashrc Kokeile ls -a grep c head Tulostaa n riviä tiedoston alusta. head -n tiedosto Kokeile head -5.bashrc tail Tulostaa n riviä tiedoston lopusta. tail -n tiedosto Kokeile tail -4.bashrc wc Laskee rivit, sanat ja merkit tiedostosta. wc tiedosto Kokeile wc.bashrc Kokeile wc -m.bashrc (merkit) Kokeile wc -l.bashrc (rivit)
Muita Linux komentoja whatis Kertoo lyhyesti mitä komento tekee. whatis komento Kokeile whatis wc man Näyttää komennon manuaalisivut. man komento Kokeile man wc Ulos komennolla q info Näyttää komennon infosivut. info komento Kokeile info wc Ulos komennolla q help Tulostaa komennon opasteen. komento -h / --help Kokeile ls -h / --help version Tulostaa komennon version. komento -v / --version Kokeile ls -v / --version En ole... which Näyttää komennon sijainnin hakemistopuussa. which komento Kokeile which ls En ole...
Muita Linux komentoja clear Tyhjentää näytön Kokeile komentoa clear df Tulostaa vapaan levytilan. df df -h tulostaa ihmisystävällisessä muodossa. Kokeile komentoa df -h /home/username/ du Tulostaa levytilan käytön. du Kokeile komentoa df -h /home/username/tkm/ Kokeile komentoa du -h --summarize
Aloitetaan lopputyö, vaikka... Terroristit ja Marxin Pääoma : Mitä me tätä luetaan? Mennään ja... joku? Vaikka Linux, Python ja Latex ei hallussa, edioidaan emacs:lla tiedosto kokeilu1.tex % LATEX tiedoston kommenttirivit alkavat merkillä "%" \documentclass{article} % \documentclass[12pt,finnish]{article} % Ja näitähän riittää % \textwidth=16.5cm % Hyödyllisiä komentoja % \textheight=25.0cm % -"- % \voffset=-2.0cm % -"- % \hoffset=-2.0cm % -"- % \usepackage[utf8]{inputenc} % Näillä onnistuu skandit % \usepackage[finnish]{babel} % -"- % \usepackage[t1]{fontenc} % -"- % \usepackage{graphics} % Tällä onnistuu kuvien käyttö \newcommand{\apj}{apj} % 1. itse luotu LATEX-komento \begin{document} \section{olipa kerran} Tästä se lähtee \cite{app92} jne.. \cite{kra80} \cite{kui60} \bibliographystyle{plain} %\bibliographystyle{alpha} % Ja näitähän riittää... \bibliography{lahteet} \end{document} Selkeitä esimerkkejä bibliography komennon käytöstä löytyy vaikkapa täältä
Aloitetaan lopputyö, vaikka... Vaikka Linux, Python ja Latex... edioidaan emacs:lla toinenkin tiedosto lahteet.bib @article{app92, title={{a mechanism for orbital period modulation in close binaries}}, author={applegate, J.H.}, journal={\apj}, volume={385}, pages={621--650}, year={1992} } @book{kra80, title={{mean-field magnetohydrodynamics and dynamo theory}}, author={krause, F. and R{\"a}dler, K.-H.}, publisher={pergamon Press}, address={oxford}, year={1980} } @conference{kui60, title={{tests concerning random points on a circle}}, author={kuiper, N.H.}, booktitle={proc. Koningkl. Nederl. Akad. Van Wettenschappen, Ser. A}, volume={63}, pages={38--47}, year={1960} }
Aloitetaan lopputyö, vaikka... Vaikka Linux, Python ja Latex ei... kokeillaan komentoja: latex kokeilu1 bibtex kokeilu1 latex kokeilu1 latex kokeilu1 dvips kokeilu1 -o evince kokeilu1.ps Vaikka Linux, Python ja Latex ei... kokeillaan komentoja: pdflatex kokeilu1 bibtex kokeilu1 pdflatex kokeilu1 pdflatex kokeilu1 evince kokeilu1.pdf Vaikka... ei... Voitte nyt aloittaa lopputyön tekemisen! Kaikki (nämäkin) asiat selkenevät kyllä tulevien luentojen aikana.
Tiedostojen käyttöoikeudet Käyttäjät ja ryhmät Linuxissa jokainen käyttäjä (user) kuuluu yhteen tai useampaan ryhmään Eri ryhmillä on erilaisia oikeuksia suorittaa komentoja ja käsitellä tiedostoja, joten käyttäjän oikeudet tehdä asioita riippuvat siitä, mihin ryhmiin käyttäjä kuuluu. Komento groups kertoo mihin ryhmiin käyttäjä kuuluu. Jokaisella tiedostolla ja hakemistolla on omistaja muotoa käyttäjä ja/tai ryhmä. Käyttäjille (u), ryhmille (g), ja muille (o) on eri luku- (r) ja kirjoitus- (w) ja suoritusoikeudet (x). Listaa tiedostosi komennolla ls -ls Esimerkiksi -rwxr-x--x tarkoittaa: käyttäjällä on rwx oikeudet ryhmällä on r-x oikeudet muilla on --x oikeudet Tulos d-w-r-x--x tarkoittaa, että kyseessä on hakemisto (directory), koska alussa on d.
Tiedostojen käyttöoikeudet chmod Tiedoston omistaja voi muuttaa käyttöoikeuksia Sopiva komento on chmod [ugoa] (+-) [rwx] tiedosto (u)ser käyttäjä, (g)roup ryhmä, (o)thers muut, (a)ll kaikki (s.o. u, g ja o yhdessä) + lisää, - poista (r)ead lue, (w)rite kirjoita, e(x)ecute suorita Esimerkiksi komento chmod g+rwx nimi antaa ryhmällä luku-, kirjoitus- ja suoritusoikeudet tiedostoon tai hakemistoon nimi Esimerkiksi komento chmod go-rwx nimi poistaa ryhmällä ja muilta luku-, kirjoitus- ja suoritusoikeudet tiedostoon tai hakemistoon nimi
Prosessit Prosessit Jokainen komento käynnistää vähintään yhden prosessin. Jokaiselle prosessilla tunniste (pid), jolla prosessiin voidaan viitata. Jokaisella proseesilla on prioriteetti, joka kertoo kuinka paljon prosessi voi käyttää koneen resursseja muihin prosesseihin nähden. Normaalisti komento käynnistää prosessin aktiiviseksi. Komento komento & käynnistää komennon prosessin saman tien taustalle Esimerkiksi komento emacs nimi & siirtää editorin taustalle ja terminaalissa voi antaa muita komentoja. ctrl-z vie käynnissä olevan komennon taustalle. Esimerkiksi komento emacs nimi avaa editorin, mutta terminaalissa ei voi antaa käskyjä. Komento ctrl-z vie prosessin taustalle ja terminaalissa voi taas antaa muita komentoja. ps tulostaa käynnissä olevat aktiiviset prosessit top listaa tietoa käynnissä olevista prosesseista järjestettynä prosessorin käytön mukaan. kill pid lopettaa prosessin, jonka tunniste on pid, jos tähän on oikeudet.
Prosessit ctrl-c lopettaa aktiivisen prosessin. jobs tulostaa käynnissä olevat työt Jos kommento jobs esimerkiksi tulostaa [3]- Running acroread tiedosto1.pdf & [5]+ Running emacs tiedosto2.dat & niin tässä tilanteessa komento fg 5 palauttaa taustalla olevan komennon emacs tiedosto2.dat aktiiviseksi Taustalla olevat prosessit saattavat joskus pysähtyä bg ajaa taustalla olevia prosesseja Jos kommento jobs esimerkiksi tulostaa tiedon, että ohjelma nimisen tiedoston ajo on pysähtynyt [4]+ Stopped source ohjelma & niin tässä tilanteessa komento bg 4 aktivoi komennon source ohjelma. Jos tämän jälkeen annetaan uudelleen komento jobs, tulostus on [4]+ Running source ohjelma &
Prosessit Komennon suorittamisen prioriteetti on välillä 20 ja +19. Prioriteetin oletusarvo 0. Mitä pienempi prioriteetin arvo on, sitä tärkeämpi on prosessi. Käyttäjä voi muuttaa prosessin prioriteetin arvoa suuremmaksi, eli vähemmän tärkeäksi. (Ainoastaan käyttöjärjestelmän hoidosta vastaavat voivat muuttaa prosessien prioriteettia pienemmäksi.) Jos tietää prosessin vaativan aikaa, on hyvä muistaa muita käyttäjiä säätämällä prioriteettia ylöspäin, 19 on hyvä tunteja vaativiin ajoihin. nice arvo komento käynnistää komennon prioriteetilla arvo. renice arvo pid muuttaa prosessin pid prioriteetiksi arvo. Esimerkiksi komento nice -n +3 python käynnistää Python istunnon prioriteetilla +3. Jos tässä tilanteessa komento ps tulostaa 16631 pts/0 00:00:00 python muuttaa komento renice +5 16631 prioriteetin arvoon 5.
Linux: tar tar komennolla voi liittää useampia tiedostoja yhteen samaan arkistoon (engl. archive). Komento tar cvf arkisto.tar *.DAT tekee arkiston nimeltä arkisto.tar, joka sisältää kaikki.dat loppuiset tiedostot Tämän arkiston voi purkaa komennolla tar -xvf arkisto.tar takaisin yksittäisiksi tiedostoiksi. Komento tar cvzf arkisto.tar.gz *.DAT tekee suoraan kompressoidun (engl. compress) arkiston, jolloin se vie vähemmän levytilaa. Tämän kompressoidun arkiston voi purkaa komennolla tar -xvzf arkisto.tar.gz takaisin yksittäisiksi tiedostoiksi. Kaikkien komentojen kaikkia vaihtoehtoja ei tarvitse (eikä kannata!) opetella ulkoa, koska hyviä esimerkkejä tämänkin komennon käytöstä löytyy vaikkapa täältä Esimerkiksi tuon www-sivun alalaidassa ovat ohjeet gzip komennosta (kts. kompresssoi mutta samalla deletoi jne...)
Linux: kopiointi koneelta toiselle Komennoilla scp ja rcp voi siirtää tiedostoja ja hakemistoja koneelta toiselle. Esimerkiksi jos työskentelet koneella nimeltä sky hakemistossa /home/username/. Voit kopioida kaikki tämän hakemiston.dat päätteiset tiedostosi toisen koneen sky1 hakemistoon /home/username/hakemisto1/ komennolla scp *.DAT sky1:/home/username/hakemisto1/ Tämän komennon jälkeen täytyy vielä antaa koneen sky1 salasana. Esimerkiksi jos työskentelet koneella nimeltä sky hakemistossa /home/username/. Voit kopioida kaikki koneen sky1 hakemistossa home/username/hakemisto1/ olevat.pro loppuiset tiedostot koneen sky hakemistoon /home/username/hakemisto2/komennolla rcp username@sky1:/home/username/hakemisto1/*.pro /home/username/hakemisto2/ Tämän komennon jälkeen täytyy vielä antaa koneen sky1 salasana. Komennoissa on paljon vaihtoehtoja (s.o. to, from and between hosts ). Komennon rcp voi vaikkapa korvata scp komennolla, kuten tässä ohjeessa. Kopioitessa/siirrettäessä suuria määriä dataa/tietoa, kannattaa käyttää ensin tar komentoa.
3- Python
Ohjelmointi - perusteet Ohjelmoinnissa tarvitaan Tekstieditori ohjelmien laadintaa varten Tällä kurssilla opetetaan emacs teksti editorin käytön alkeet. Yksi monista sähköisistä emacs referenssiopaista. Kääntäjä tai tulkki, joka kääntää ohjelman lähdekoodin koneen ymmärtämään muotoon. Tällä kurssilla opetetaan Python ohjelmoitikielen alkeet. Yksi monista sähköisistä Python referenssiopaista
emacs:n alkeet emacs emacs nimi komento aloittaa tiedoston nimi editoinnin. Tällä komento valinnalla terminaaliin ei voi antaa uusia komentoja. Kokeile komentoa emacs nimi & Nyt terminaaliin voi antaa uusia komentoja, sekä editointi-ikkunaan lisätä tekstiä. Tiedostoon tehdyt muutokset voit tallentaa ikkunan valikosta kohdasta File valitsemalla Save Tallenna aina välillä editoidessa. Miksi? Voit tallentaa editoinnin tulokset ja poistua editorista ikkunan valikon kohdasta File valitsemalla Quit. Ohjelma kysyy tallennetaanko muutokset. Vastauksesi voi olla y tai n. Mieti, miksi voit joskus joutua vastaamaan n ja kokeile, mitä silloin tapahtuu. Tarjolla on loputtomasti komentoja. Kokeile esimerkiksi komentoa etsimiskomentoa ctrl s Usein käytettyjä ovat erityisesti cut ja paste Loput oppii pikku hiljaa editoidessa. Tulet pian huomaamaan, miksi emacs on Python ystävällinen editori.
Seuraava emacs sovellutus Seuraava emacs sovellutus Teillä pitäsi olla jokseenkin tämän tyyppinen alustustiedosto /home/username/.bashrc #.bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]; then. /etc/bashrc fi Ennen editointi komentoa emacs.bashrc & kannattaa antaa komento cp.bashrc.bashrcold. Miksi? Sen jälkeen edioidaan alustustiedostoon.bashrc rivin # User specific... alle omat alias määritelmä rivit. alias c= clear alias cp= cp -i alias rm= rm -i
Ohjelmoinnin peruskäsitteitä Lähdekoodi koostuu: - Muuttujista - Funktioista, aliohjelmista - Ohjausrakenteista Muuttuja Symboloi muuttuvaa suuretta, kuten lukua tai tekstinpätkää. Funktio, aliohjelma Tekee jonkin tietyn asian. Funktio ottaa vastaan muuttujan (tai useita), tekee jotain annetuilla muuttujilla, ja palauttaa tuloksen uutena muuttujana. Aliohjelma ottaa vastaan muuttujia, tekee jotain, ja muuttaa annettuja muuttujia. Ohjausrakenne Ohjaa ohjelman toimintaa. Voi mm. käskeä toistamaan tiettyä ohjelman kohtaa useita kertoja, tai valita useista mahdollisista suorituspoluista yhden.
Pythonin alkeet Python on Vapaaseen lähdekoodiin perustuva ilmainen tulkattu kieli Saatavilla Linuxille, Macille ja Windosille Tehokas oikein käytettynä Jatkuvasti kehittyvä python komento käynnistää Python tulkin >>> Python tulkista >>> pääsee ulos komennolla ctrl d 1. Käyttötapa: komentotulkissa komento: python tiedosto 2. Käyttötapa: Python komentotulkissa komento: >>>execfile( tiedosto ) 3. Käyttötapa: Ohjelman tiedosto ensimmäinen rivi kirjoitetaan muotoon #!/usr/bin/python/ Silloin ohjelma voidaan ajaa komennolla./tiedosto 1. Käyttötapa yleisin näiden luentomuistiinpanojen esimerkeissä
Ensimmäinen Python ohjelma Laadi emacs:lla seuraavanlainen ohjelma/tiedosto harjoitus1.py # komenttirivi: Tama on ohjelmani harjoitus1.py print "Hello world!" # ohjelmani paattyy tahan Käyttö suoraan komentotulkista: python harjoitus1.py Käyttö Python tulkista: >>> execfile( harjoitus1.py ) Tulos on sama jos annat Python tulkissa komennon >>>print "Hello world" Tulos on sama jos annat Python tulkissa komennon >>>print Hello world eli molemmat merkit ja toimivat. Editoi sana Tama muotoon Tämä ja aja ohjelma. Ohjelma ei toimi. Opetus: älä käytä skandeja tai erikoismerkkejä. Editoi yksi tyhjä merkki komennon print "Hello world!"eteen ja aja ohjelma. Ohjelma ei toimi. Opetus: rivien alussa ei saa olla tyhjää. Rivien sisennyksessä on omat sääntönsä. Kommenttirivit alkavat merkillä #. Python ohittaa ne. Kommenttirivejä kannattaa käyttää ohjelman selventämiseen.
Toinen Python ohjelma Laadi emacs:lla seuraavanlainen ohjelma/tiedosto harjoitus2.py # komenttirivi: Tama on ohjelmani harjoitus2.py from math import cos a = 1.0 b = 2.0 c = a + cos(c) print c # ohjelmani paattyy tahan Kun ajat ohjelman, saat virheilmoituksen File "harjoitus2.py", line 5, in <module> c = a + cos(c) NameError: name c is not defined Editoi rivi 5 muotoon c = a + cos(b) ja aja ohjelma uudelleen. Huomaa, että emacs-editorin alalaidassa näkyy rivin numero (tällä kertaa L5 ).
Python muuttujien alkeet Muuttuja Muuttuja on jokin olio koneen muistissa. Yksinkertaisin tapa luoda uusi muuttuja on sijoittaa tunnukseen halutun tyyppinen olio. Komento x = 1 luo kokonaislukumuuttujan arvolla 1 ja tunnuksella x. Komento x = int() luo tyhjän kokonaislukumuuttujan. Merkillä ; voi yhdistellä useita komentoja samalle riville. Kokeile Python tulkissa komentoa >>>a=1 ; b= abc ; print a ; print b Se tulostaa 1 abc Muuttujan voi myös halutessaan tuhota funktiolla del(muuttuja) Muuttujan tyyppi Muuttujan tyyppi määrittää minkälaista tietoa muuttuja pitää sisällään. Toisin kuin monissa muissa kielissä, muuttujan tyyppiä ei Pythonissa tarvitse erikseen määritellä ennen muuttujan käyttöönottoa, vaan tyyppi määräytyy automaattisesti luontivaiheessa. Muuttuja tyyppi saadaan selville funktiolla komennolla type(muuttuja)
Kokeile komentoa a=1 ; b=1.0; c="abc" ; print type(a),type(b),type(c) Se tulostaa <type int > <type float > <type str > Muuttujat ovat tyyppiä: a kokonaisluku (int), b reaaliluku (float) ja c merkkijono (str) Kokeile komentoa a=[1,1.0,"abc"] ; print a,type(a),type(a[0]),type(a[1]),type(a[2]) Se tulostaa [1, 1.0, abc ] <type list > <type int > <type float > <type str > Muuttuja a on tyyppiä lista (list). Listan alkiot ovat tyyppiä: ensimmäinen alkio a[0] kokonaisluku, toinen alkio a[1] reaaliluku ja kolmas alkio a[2] merkkijono. Tunnus Tunnus toimii osoittimena muuttujaan eli muuttujan nimenä. Yhteen muuttujaan voi osoittaa monta tunnusta. Tunnuksen voi vaihtaa osoittamaan johonkin toiseen muuttujaan kesken ohjelman. Toisin kuin monessa muussa kielessä, tunnus ei ole sidottu mihinkään tiettyyn muuttujatyyppiin.
Laadi emacs:lla seuraavanlainen ohjelma/tiedosto harjoitus3.py # komenttirivi: Tama on ohjelmani harjoitus3.py a = [1, ab ] ; b = a print Tassa vaiheessa I :, a=,a, ja, b=,b a[1]=1.0 # Muutetaan a:n toinen alkio reaaliluvuksi print Tassa vaiheessa II:, a=,a, ja, b=,b # ============= Yksi tapa valttaa tama ongelma: c = [1, cd ] ; d=tuple(c) # tuple tyyppista muuttujaa d ei voi muuttaa print Tassa vaiheessa III:, c=,c, ja, d=,d c[1]=2.0 # Muutetaan c:n toinen alkio reaaliluvuksi print Tassa vaiheessa IV:, c=,c, ja, d=,d # ============= Toinen tapa valttaa tama ongelma: e = [1, ef ] ; f=e[:] # Eli kopioidaan e:n kaikki alkiot muuttujaan f print Tassa vaiheessa V:, e=,e, ja, f=,f e[1]=3.0 # Muutetaan e:n toinen alkio reaaliluvuksi print Tassa vaiheessa VI:, e=,e, ja, f=,f
Kokeile komentoa python harjoitus3.py. Tulostus on Tassa vaiheessa I : a= [1, ab ] ja b= [1, ab ] Tassa vaiheessa II: a= [1, 1.0] ja b= [1, 1.0] Tassa vaiheessa III: c= [1, cd ] ja d= (1, cd ) Tassa vaiheessa IV: c= [1, 2.0] ja d= (1, cd ) Tassa vaiheessa V: e= [1, ef ] ja f= [1, ef ] Tassa vaiheessa VI: e= [1, 3.0] ja f= [1, ef ] Tunnukset a ja b viittasivat samaan muuttujaan, joten a:n toisen alkion arvon ja tyypin muutos a[1]=1.0 muutti myös b[1] arvon ja tyypin. Muuttujaan d kopioitiin c:n alkioiden arvot, mutta komento d=tuple(c) teki listan, jonka alkioita ei voi muuttaa. joten c:n toisen alkion muutos ei muuta ja d[1]= cd arvoa. Muuttujaan f kopioitiin e:n kaikki alkiot, jolloin e:n toisen alkion muutos ei muuta ja f[1]= ef arvoa. Käytännössä tämä tarkoittaa, että Python ohjelmat pitää laatia ja tarkastaa huolellisesti. Turha pohtia tätäkään liikaa. Jatketaan kohti lopputyön aloittamista.
Python modulit ja Ipython Pythonissa on paljon erilaisia valmiita moduleja Matemaattiset funktiot,... Numpy importoidaan komennolla import numpy Tieteellinen laskenta,... Scipy. importoidaan komennolla import scipy Tulosten visualisointi,... Pylab. importoidaan komennolla import pylab Pythonista on olemassa interaktiivinen versio IPython Kokeile suoraan komentotulkissa komentoa ipython -pylab Kun näyttöön ilmestyy In [1], Kokeile komentoa a=numpy.ones(3) ; print a Kokeile sen jälkeen komentoa a. SARKAIN, missä SARKAIN on näppäin Ipython kertoo interaktiivisesti, mitä kaikkea voit tehdä muuttujalle a, kun aloitat komennon muodolla a. Ipythonin sisällä voi vaikkapa kokeilla erilaisia komentoja ennen kuin kirjoittaa ne editoimansa ohjelman sisään
Numeeristen muuttujien tyypit Numeeriset tyypit pitävät sisällään lukuarvoja. Olennaisena tekijänä tyypin valinnassa on, halutaanko käsitellä kokonais- vai reaalilukuja. Kokonaisluvuissa pitää lisäksi valita kuinka suuria arvoja halutaan käsitellä. int - kokonaisluku a=4 long - pitkä kokonaisluku a=\long() float - reaaliluku a=3.45 complex - kompleksiluku a=complex(3,4) or a=3.+4j Kokeile a=1 ; b=1 ; print type(a),type(b),type(a+b),a,b Kokeile a=1 ; b=long()+10000 ; print type(a),type(b),type(a+b),a,b Kokeile a=1 ; b=2.2 ; print type(a),type(b),type(a+b),a,b Kokeile a=1 ; b=2e3 ; print type(a),type(b),type(a+b),a,b Tyyppi muuttuu tarkkuuden mukaan
Laskutoimitukset numeerisille tyypeille Peruslaskutoimitukset + summa - erotus * kertolasku ** potenssiin korotus / jakolasku Vertailuoperaattorit == yhtä suuri kuin < pienempi kuin > suurempi kuin >= suurempi tai yhtä suuri kuin <= pienempi tai yhtä suuri kuin Matemaattiset funktiot Hyödyllisiä funktioita saadaan käyttöön math-moduulista käskyllä from math import * cos() sin() tan() pow() sqrt() exp() log() radians() degrees() kosini sini tangentti potenssi neliöjuuri eksponentti logaritmi aste -> rad rad -> aste
Kokeiluja numeerisille tyypeille Laadi emacs:lla ohjelma # komenttirivi: Tama on ohjelmani harjoitus4.py from math import cos # math-modulista vain cos() funktio import math a=3.14 ; print cos(a) ; print sin(a) Jotta komento sin(a) toimisi, pitäisi lisätä rivi from math import sin # math-modulista vain sin() funktio Laadi emacs:lla ohjelma # komenttirivi: Tama on ohjelmani harjoitus5.py import math as mt # importoidaan koko math-moduli # aletaan kayttaa "math" sijasta lyhennetta "mt" a=3.14 ; print mt.cos(a) ; print mt.sin(a) b=mt.tan(a) ; print b c=mt.pow(2.,3.) ; print c d=mt.sqrt(2.) ; print d Mitään ei tarvitse muistaa ulkoa. Kokeile vaikka Googlessa hakua radians() in Python. Taidot lisääntyvät pikku hiljaa yritys ja erehdys periaatteella.
Sarja tyyppiset muuttujat Sarja tyyppinen (sequence types) muuttuja osoittaa listaan muita muuttujia. Sarja tyyppiset muuttujat voidaan jakaa muutettaviin (list) ja ei-muutettaviin (tuple) luokkiin sen mukaan, voidaanko tyypin yksittäisiä alkioita/elementtejä muuttaa. Merkkijonot (str) sisältävät vain merkkejä Listat voivat sisältää mitä tahansa pythonin olioita, kuten toisia listoja. str - merkkijono Esimerkiksi a = "jihuu" list - lista Esimerkiksi a = [1., 2, abc ] tuple - vakiolista Esimerkiksi a = (1., 2, abc )
Sarjatyypit - käsitteleminen Listan alkioihin viitataan hakasuluilla. Listan numerointi alkaa nollasta. a[0] = 1.0 asettaa listan ensimmäiseksi alkioksi liukuluvun 1.0. a[1:] = 2.0 asettaa listan alkiot lähtien toisesta listan loppuun. Kokeile a=[5.,1.] ; print a ; a[1]= jotain ; print a Kokeile a=(5.,1.) ; print a ; a[1]= jotain Ei onnistunut, koska kyseessä on tuple. Kokeile a=[5.,1.] ; b=[ jaaha, aha ] ; c=[a,b] ; print c ; print c[0] ; print c[1] Listan c ensimmäinen alkio c[0] on siis myös lista.
4- Python ohjelmoinnista
Ohjelman peruselementit Python-ohjelman peruselementtejä ovat muuttujat (int, float, list,...) operaattorit (+,-,*,/,...) funktiot (cos(), exp(),...) ohjausrakenteet (if, for,...) kommentit Lisäksi moduulit (math, numpy,...) luokat (numpy.array,...) metodit (string.find(),...) Esimerkki koodin pätkästä # komenttirivi: Tama on ohjelmani harjoitus6.py import math as mt # Modulin importointi import numpy as np # Modulin importointi s = "Meita odotellaan" # Merkkijono t = "Mina olen myyra" # Merkkijono a = np.array([1.0, 2.0]) # Numpy vektori b = 1.0 # Reaaliluku c = np.cos(a) + b # Numpy vektori if s.find("meita") >= 0: # Ohjaus komento ja metodi try: # Ohjaus komento: sisennys print c # toinen sisennys except: # Ohjaus komento: Ei suorita print "Virhe!" # toinen sisennys if t.find("myyra") >= 0: # Ohjaus komento ja metodi try: # Ohjaus komento print c[2] # Huom: ohjelma ei kaadu! except: # Ohjaus komento: Suorittaa print "Virhe!" #
Elementtien käyttö Sijoitusoperaattorit a [=, +=, -=, *=, /=] b Kokeile a=4 ;b=2 ; a*=b; print a Siis lyhennys komennosta a=a*b Laskuoperaattorit a = b [+, -, *, /, **] c Kokeile a=10. ;b=4. ; print a**b Ohjausrakenteet Esimerkiksi if for while try Funktio a = funktio(arg1, arg2,...) Metodi a = b.metodi(arg1, arg2,...) Moduuli import moduuli < as modu > from moduuli import [*, nimi] Merkintä [] tarkoittaa pakollinen Merkintä <> tarkoittaa valinnainen Esimerkkejä ohjausrakenteista, funktioista, metodeista ja moduleista seuraavilla sivuilla.
Koodin kommentointi Komentit Kommentit ovat tekstiä jonka tulkki jättää huomiotta. Kaikki # merkin jälkeen tuleva teksti lasketaan kommentiksi. Kommentit auttavat muita ymmärtämään koodin toimintaa. Kommentit auttavat koodin laatijaa ymmärtämään oman koodin toimintaa pitkänkin tauon jälkeen. Käytännössä vähemmän käytetyt komennot yms unohtuvat ja ne täytyy tarkistaa koodin kommenteista, mikäli edes enää löytyvät Kommentointi vähentää tulevaa työtä, kun ei tarvitse keksiä pyörää aina uudelleen. Tulevissa esimerkeissä on pyritty selkeään ja opastavaan kommentointiin
Koodin lohkorakenne Lohkot Ohjauskomentojen käyttö ja funktioiden määrittely vaativat tavan erottaa rakenteeseen kuuluvan osan muusta koodista. Ohjausrakenteen aloittava komentorivi päättyy merkkin : Ohjausrakenteet aloittavat aina uuden sisennetyn koodilohkon. Lohkot määräytyvät koodin sisennyksen perusteella. Sisennys on neljä tyhjää merkkiä. emacs tekee sisennyksen automaattisesti sarkaimella. Editoi koodi # komenttirivi: Tama on ohjelmani harjoitus7.py a=2 ; b=1 ; d=4 # Muuttujat a ja b print a=,a, b=,b, D=,d # Tulostetaan a, b, d if(a > b): # If ohjaus rakenne # Huomaa: Ohjaus rakenne paattyy merkkiin ":" c = 2.5 * (a + b) # 1. sisennys # Huomaa: Ohjaus rakenne paattyy merkkiin ":" if(c > d): # If ohjaus rakenne print c=,c # 2. sisennys alkaa a += 1.0 # 2. sisennyt jatkuu print a=,a # 2. sisennys jatkuu
Ohjausrakenne if on muotoa: if (looginen lause): lause elif (looginen lause): lause else: lause Editoi seuraava esimerkki if ohjausrakenteesta (Esimerkissä ylimääräistä: Modulilla sys yhteys komentotulkkiin, jotta annettua astelukua voidaan vaihtaa suoraan komentotulkissa): # komenttirivi: Tama on ohjelmani harjoitus8.py import sys # sys-modulilla luodaan yhteys komentotulkkiin. print sys.argv[0] # Printtaa komentotulkin 1. merkkijono a=float(sys.argv[1]) # Tulkin 2. merkkijono (str) reaaliluvuksi (float) import math as mt ; b=mt.radians(a) # math-moduli ja asteet radiaaneiksi if (mt.cos(b) >=0 and mt.sin(b)>=0): # Ohjaus rakenne print "1 neljannes" # Sisennys elif (mt.cos(b) <0 and mt.sin(b)>0): # Ohjaus rakenne print "2 neljannes" # Sisennys elif (mt.cos(b) <=0 and mt.sin(b)<=0): # Ohjaus rakenne print "3 neljannes" # Sisennys else: # Ohjaus rakenne print "4 neljannes" # Sisennys Kokeile python harjoitus8.py 179 tulostaa 2 neljannes Kokeile python harjoitus8.py -1790 tulostaa 1 neljannes
Ohjausrakenne for on muotoa for muuttuja in lista: lause 1 lause 2 Tällä ohjausrakenteella voidaan suorittaa sama koodi halutuille listan elementeille tai toistaa sen alla olevat komentorivit toivotun monta kertaa. Editoi ohjelma # Komenttirivi: Tama on ohjelmani harjoitus9.py for i in range(3): # - Yksinkertaisin for print looppi 1:, i=,i # looppi indekseilla. a=[ opetellaan, pythonia, koko, kevat ]# - Mika tahansa lista for b in a: # sopii for looppi print looppi 2:, b=,b # indeksiksi. k=0 # - Mika tahansa luku for j in range(2): # - Kaksi for looppia # sisakkain for c in a: # print c.find("a")=,c.find("a") # etsi c:sta kirjain "a" print k=,k # k:n nykyinen arvo k=k+1 # k=k+1 sisemmassa loopissa print j=,j ; print k=,k # printtaa ulommassa loopissa
Ohjausrakenne while on muotoa while (looginen lause): lause 1 lause 2 Ehdollista toistoa käytetään koodilohkon suorittamiseen niin kauan kun annettu ehto on tosi. Editoi ohjelma # Komenttirivi: Tama on ohjelmani harjoitus10.py k=20 # jokin muuttuja while (k >=9): # ohjausrakenne print 1. ehdolla jatketaan ja k=,k # 1. sisennys k-=3.2 # vahenna 3.2 while (k>-10.5 and k <=10): # ohjausrakenne print 2. ehdolla jatketaan ja k=,k # 2. sisennys k-=2.8 # vahenna 2.8 Jos jokin while looppi jää pyörimään loputtomiin, sen voi lopettaa komennolla ctrl c
Ohjauskomento try on muotoa try: lause(-ita) except errortype: lause(-ita) except: lause(-ita) Try yrittää suorittaa annetun lohkon. Käytännössä ohjauskomento try sopii erityisesti koodin virheiden etsintään. Jos lohkosta tulee virheilmoitus, sitä voi käsitellä exceptillä. Esimerkiksi ZeroDivisionError: tarkoittaa, että on jaettu nollalla. Kokeile a= abc ; import math ; print math.cos(a) ja tulosteessa on mukana tieto... TypeError... Virheiden koodaus vaihtoehtoja loputtomiin, joten seuraavan sivun esimerkin jälkeen jatketaan kohti lopputyön suorittamista.
Editoi ohjelma # Komenttirivi: Tama on ohjelmani harjoitus11.py a = [1,2] # a[0]=1,a[1]=2 mutta alkiota a[2] ei ole! # Esimerkki 1 try: # Ohjauskomento alkaa print a[2] # Sisennys except: # Jos komento ei onnistu, print "Ei onnistu." # niin printtaa tama teksti. # Esimerkki 2 try: # Ohjauskomento alkaa print a[2] # Sisennys except IndexError: # Jos virhetyyppi IndexError print "Indeksi virhe." # niin printtaa taman teksti, except: # jolloin tata printtaus print "Virhe tunnistamatta" # komentoa ei toteuteta # Esimerkki 3 try: # Ohjauskomento alkaa print a[2] # Sisennys except TypeError: # Jos virhetyyppi TypeError print "Arvo virhe." # niin printtaa taman teksti, except: # jolloin tata printtaus print "Virhe tunnistamatta" # komentoa ei toteuteta
Funktioista Funktio on aliohjelma. Funktio syö jotain sisäänsä. Tämä input voi olla muuttujia, tiedostoja, jne.. Funktio palauttaa jotain syömänsä perusteella. Tämä output voi olla muuttujia, jne.. Funktion voi myös muokata annettua input tietoa. Funktioden tarkoitus on jakaa ja jäsentää ohjelmaa, sekä vähentää ohjelmakoodin toistoa. Funktion aloitetaan def funktionimi(argumenttilista): Kaikki funktion seuraavien rivien komennot on sisennetty. Funktio palauttaa muuttujan (tai useita) käskyllä return muuttuja1, muuttuja2,..., muuttuja_n Seuraava esimerkki auttaa lopputyön suorittamisessa, koska tehospektrin kaava on vain hiukan monimutkaisempi. Esimerkin aliohjelma laskee Rayleigh n testi parametrin z(f ) = 1 [( n ) 2 ( n ) 2 ] cos θ i + sin θ i, n i=1 i=1 aikapisteille t 1, t 2,..t n, kun testattu frekvenssi on f ja vaihekulmat ovat θ i = 2πft i.
Funktion määrittely Editoi tämä ALIOHJELMA, joka laskee Rayleigh n testi parametrin z(f ) arvon, kun t i = i 1 (i = 1,..., 10) ja testattu frekvenssi on f = 1. # Komenttirivi: Tama on ohjelmani harjoitus12.py # import numpy as np # numpy importoitu import math as mt # math importoitu def rayleightest( t, f): # Funktio alkaa """ Input: t = aikapisteet, f = frekvenssi Output: z(f) = Rayleigh n testi parametri Tama teksti nakyy komennolla "help(rayleightest)" ja poistuu komennolla "q". """ pi=mt.pi ; x=2.0*f*pi*t z=(1.0/len(t))*(sum(np.cos(x))**2+sum(np.sin(x))**2) return z # f=1. ; print f=,f # Frekvenssi on f=1. t=np.arange(10.) ; print t=,t # Aikapisteet t=0,1,...,9 z=rayleightest(t,f) ; print z=,z # Rayleigh testin z(f) help(rayleightest) # Helpista ulos komento:"q"