Kemian tekniikan kandidaattiohjelman ohjelmointikurssi (5 op) Antti Karttunen ja Juhani Teeriniemi Osa 1 Ohjelmoinnin peruskäsitteitä, Python, Spyder-kehitysympäristö, tulostaminen, syötteen lukeminen, muuttujat, perusoperaatiot.
Kurssisuunnitelma Luennot/harjoitukset 12 luentokertaa (tiistaisin ja perjantaisin) Alustus päivän aiheeseen ja käytännön ohjelmointitehtäviä Luentotehtävät: MyCourses Tavoitteena tehdä luentotehtävät (jos ei ehdi, voi jatkaa omalla ajalla) Opastusta tehtäviin paikan päällä (Antti ja Juhani) Viikkoharjoitukset MyCourses (ohjelmointitehtäviä ja mahdollisesti muita kysymyksiä) Ohjelmointitehtävät tarkistetaan MyCoursesin Coderunner-toiminnon avulla Projektityö Kemiaan ja kemian tekniikkaan kytkeytyvä pieni projektityö Viimeinen palautuspäivä 22.12. Arvostelu Luentotehtävät 33.3% Viikkotehtävät 33.3% Projektityö 33.3% 2
Kurssikalenteri Aika: 13.00-15.00. Sali: R011 (CHEM tietokoneluokka 3) # Päivä Teema 1 Ti 1.11. Ohjelmoinnin peruskäsitteitä. Pythonin perusteet (tulkki, IDE). Tulostaminen, syötteen lukeminen, muuttujat, perusoperaatiot. 2 Pe 4.11. Kontrollirakenteet (if-elif-else, for, while), vertailuoperaattorit 3 Ti 8.11. Tietorakenteet (lists, tuples, dictionary) 4 Pe 11.11. Tietorakenteet (lists, tuples, dictionary) 5 Ti 15.11. Funktiot, erityyppiset argumentit, moduulit, math-moduuli 6 Pe 18.11. Tiedostojen käsittely 7 Ti 22.11. Datan käsittely yleisemmin, virheenkäsittely 8 Pe 25.11. Numpy (matriisit) + Scipy + Matplotlib 9 Ti 29.11. Numpy (matriisit) + Scipy + Matplotlib 10 Pe 2.12. Olio-ohjelmointi 11 Ke 7.12. Sovellukset kemian tekniikassa 12 Pe 9.12. Klo 9-11! Sovellukset kemian tekniikassa 3
Ohjelmointi & kemian tekniikka Tietotekniikan merkitys yhteiskunnassa näyttää kasvavan jatkossakin Etenkin teollisuudessa yhä useammat työtehtävät tullaan jatkossa automatisoimaan Asioiden automatisointi vaatii ohjelmointia Ohjelmointitaidoilla on jatkossa entistä suurempi merkitys Kemian tekniikassa ohjelmoinnilla merkittävä rooli jo nykypäivänä. Esimerkkejä: Kemian teollisuuden prosessien ohjaus Prosessien simulointi (mallinnus): kemiallinen prosessi mallinnetaan ensin tietokoneella ja siirrytään vasta sitten kalliimpaan kokeelliseen työhön Erilaisten kemiallisten tietokantojen tehokas käyttö vaatii ohjelmointia: materiaali- ja kemikaalitietokannat, rakenne-ominaisuustietokannat Mittausdatan edistynyt käsittely vaatii usein ohjelmointia (tai ainakin se on huomattavasti tehokkaampaa ohjelmoimalla kuin käsityönä Excelillä) Keksitkö lisää esimerkkejä? Kemiallisissa tieteissä ohjelmoinnilla keskeinen rooli monilla osa-alueilla Laskennallinen kemia, mittausdatan käsittely, spektroskopia, prosessimallinnus, tiedonlouhinta (data mining), koneoppiminen (machine learning), 4
Mitä ohjelmointi on Ohjelmoinnissa luodaan tarkka toimintaohje ( ohjelma ), jonka avulla tietokone suorittaa siltä pyydetyn tehtävän Luodaan, koska ohjelmointi on (toivottavasti) luovaa työskentelyä, ei mekaanista suorittamista Ohjelma täytyy kirjoittaa ohjelmointikielellä, joita on satoja Alkuaikoina ohjelmat kirjoitettiin keskusprosessorin konekielellä (esim. bittijonoina 011001 ) Nykyisin käytetään pääasiassa korkeamman tason lausekieliä (kuten Python, Java, C) Lausekielen käskyt muunnetaan konekieleksi Käännetyissä kielissä, kuten C, tämän tekee kääntäjä (compiler) ennen ohjelman suoritusta Tulkatuissa kielissä, kuten Python, tämän tekee tulkki (interpreter) suorituksen aikana Minkä ohjelmointikielen opettelen? Mikä tahansa moderni lausekieli on varsin hyvä valinta. Tärkeintä on oppia ohjelmoinnissa tarvittava ajattelutapa. Ajattelutavan opittuasi uusien ohjelmointikielten oppiminen on varsin helppoa Figure: AJK/wordclouds.com 5
Python-ohjelmointikieli Tällä kurssilla käytetään Python-ohjelmointikieltä. Sen etuja ovat Selkeä kielioppi (syntax). Pythonilla kirjoitettu ohjelma, koodi, on siis varsin luettavaa, ainakin jos hyviä ohjelmointikäytäntöjä on noudatettu Erittäin matala aloituskynnys. Aloittelijakin saa heti aikaan näkyviä tuloksia Python-tulkki itsessään on vapaa ohjelmisto, eli sen lähdekoodi on kaikkien saatavilla. Tämän seurauksena sen voi hankkia ilmaiseksi ja kuka tahansa voi ehdottaa siihen parannuksia. Erittäin vahva ja aktiivinen yhteisö kehittää Pythonia koko ajan Pythonille on saatavissa valtava määrä kirjastoja (library) joita voi hyödyntää omissa ohjelmissa Python soveltuu sekä pieniin että valtaviin ohjelmointiprojekteihin Pythonilla voi toteuttaa myös suurta laskentatehoa vaativia tieteellisiä ohjelmistoja, mutta tällöin raskas laskenta on parasta hoitaa erillisten tieteellisten kirjastojen avulla (NumPy / SciPy, hyödynnetään myös tällä kurssilla!) 6
Anaconda Kurssilla hyödynnämme Anaconda-nimistä Python-jakelupakettia (distribution) Paketti on asennettuna Kemian tekniikan rakennuksen mikroluokkaan 3 (R011) Jakelupaketti sisältää Python-tulkin ohjelmien ajamista varten Valtavan määrän kirjastoja joita voi hyödyntää omissa ohjelmissa Erityisen kattavan kirjastokokoelman tieteellistä ohjelmointia varten Graafisen Spyder-kehitysympäristön, joka helpottaa omien ohjelmien luomista Anacondan perusversio on ilmainen: https://www.continuum.io/downloads Saatavilla Windows-, Linux-, OSX-versiot. Paketin voi asentaa helposti omalle koneelleen Kannattaa ottaa 64-bittinen versio (Python 3.5 tai uudempi!) Tällä kurssilla käytetään Pythonin versiota 3.5. Myös vanhempaa 2.X sarjaa käytetään paljon. 3.X- ja 2.X-versiot eivät ole täysin yhteensopivia 7
Spyder-ohjelmointimpäristö Aja ohjelma tästä (tai paina F5) Vie kursori funktion päälle ja Ctrl+I näyttää ohjeen Ohjelma kirjoitetaan tähän Ohjelma pyörii konsolissa Sekä Console että IPython Console toimivat alkupään tehtävissä. Kun ajat ohjelman, Spyder tallentaa sen ennen ajamista Kannattaa tehdä kurssia varten hakemisto omalle verkkolevylle Kokoa jokaisen harjoituskerran materiaalit omaan alihakemistoonsa 8
Luentotehtävät (avaa MyCourses) Luennoilla tehdään luentotehtäviä, apua saatavilla! Alkuun lämmittelykysymys 9
Ensimmäinen ohjelma Ohjelmakoodi Ajon tulos (kokeile itse, tämä on myös luentotehtävä!) Kurssin ohjelmointitehtävät tarkistetaan tästä eteenpäin Coderunner-toiminnolla. Sitä voi harjoitella MyCoursesissa (sivun alalaidassa): print-funktio tulostaa arvoja konsoliin. Tässä esimerkissä tulostamme merkkijonon (string) Opimme lisää funktioista myöhemmin Ohjelmakoodiin voi lisätä kommentteja joko #-merkin jälkeen tai monirivisiä kommentteja kommentti merkinnällä. Ohjelmien huolellinen kommentointi on ensiarvoisen tärkeää! Muut ymmärtävät, mitä kirjoittamasi koodi tekee Muistat itse, mitä kirjoittamasi koodi tekee! 10
Tulostaminen (print) 11
Syötteen lukeminen (input) Puhutaan seuraavaksi lisää muuttujista 12
Muuttujat Ohjelmoidessa tallennamme tietoa muuttujiin (variable) Esim. input-funktio tallentaa käyttäjän syötteen merkkijonona nimi-muuttujaan: nimi = input( Anna nimesi\n ) Tavallisia muuttujatyyppejä Pythonissa ovat Merkkijonot, string, merkitään lainausmerkeillä ( hei! tai hei! ) Kokonaisluvut, int (2, -2, 1000000) Liukuluvut, float (1.0, -3.00003, 1258.941662) eli desimaaliluvut Kompleksiluvut, complex (2.0 + 3.0j) Totuusarvot, boolean, bool (True, False) HUOM! Älä käytä koodissa koskaan ääkkösiä (ä, ö, å)! 13
Tyyppimuunnokset Helpoin vaihtoehto lukujen lukemiseen input-funktiolla Puhutaan seuraavaksi pyöristämisestä Huh? 14
Kokonaisluvut ja liukuluvut round-funktion ohje (Ctrl+I) 15
Perusoperaatiot Operaatio Kokeile konsolissa + Yhteenlasku 5 + 5 - Vähennyslasku 1000 1 * Kertolasku 11 * 11 / Jakolasku 11 / 5 (tulos = 2.2 = float) // Katkaiseva jakolasku 11 // 5 (tulos = 2 = int) % Jakojäännös 11 % 5 (tulos = 1 = int) ** Potenssiin korotus 2 ** 4 abs(x) Itseisarvo abs(4-16) 16
Vielä print- ja input-funktioista 17
Muuttujat vs. vakiot Usein ohjelmissa on hyvä määritellä joitain kiinteitä arvoja, jotka eivät muutu ajon aikana. Tässä esimerkissä lounaan ja kahvin hintaa on helppo päivittää 18
Tärkeitä Python-resursseja https://docs.python.org/3/ Pythonin virallinen dokumentaatio https://docs.python.org/3/tutorial/index.html (tutorial) https://docs.python.org/3/reference/index.html ( kielioppi ) https://www.tutorialspoint.com/python3/ Varsin selkeä tutoriaali Google Valtavan käyttäjämäärän ansiosta netti on täynnä koodikysymyksiä ja vastauksia niihin (esim. http://stackoverflow.com/) MUISTUTUS! Älä käytä koodissa koskaan ääkkösiä (ä, ö, å)! 19