keskiviikko 27. huhtikuuta 2016

Koodikerho: Ensimmäinen python tunti

Ensimmäisellä Python tunnilla opetellaan kielen perusteita kuten ruudulle tulostamista, muuttujien luomista sekä if-rakenteita.

Käytämme perusteiden opetteluun selainpohjaista python-kääntäjää. Mene osoitteeseen www.codeskulptor.org ja seuraa ohjeita:


1. tehtävä: Tulosta ruudulle valitsemasi teksti

print "moi"
print ("moi")
print 'moi'

2. tehtävä: Tulosta tyhjä rivi tervehdysten väliin

print

3. tehtävä: Laita kone kysymään sun nimeä?


nimi = input('Anna nimesi')

..ja tervehtimään sua:

print 'moi', nimi,'olet aika tyyppi'


4. Tehdään pieni peli, joka kysyy sormiesi määrää.

sormet = input('Montako sormea sinulla on?')
sormetlukuna = int(sormet)
if sormetlukuna == 10:
    print ('Loistavaa! =)')
if sormetlukuna < 10:
    print ('Huijaat! =D')
if sormetlukuna > 10:
   print nimi,', tarkoitus ei ollut laskea varpaita mukaan..'

5. Äskeisessä esimerkissä vastauksen pitää olla numero tarkemmin kokonaisluku. Mitäs jos vastauksen pitääkin olla kirjaimia?

pelimies = input('Pelaatko Minecraftia (Joo/Ei)?')
if pelimies == 'Joo' or pelimies == 'joo':
    print nimi, 'Hieno, se on todella cool peli'
else:
    print ('Kannattaa kokeilla. Ihan paras peli!')





Satunnaismuuttuja - lottopeli 0.1

Tällä tunnilla teemme lottokoneen versio 0.1:

1. Tee koodi, joka kysyy sinulta seitsemän veikkaustasi loton oikeaksi riviksi. 


Olemme aikaisemmin oppineet, että voimme syöttää muuttujille arvoja input-funktiolla. '

Esimerkiksi:
arvaus = input('Veikkaa numeroa')

Koska lottopelissä valitaan seitsemän numeroa, voimme toki tehdä seitsemän muuttujaa ja antaa näille seitsemän arvoa. Mutta on olemassa helpompikin tapa: lista.

Listassa yhdelle muuttujalle annetaan seitsemän eri arvoa ja arvot on indeksoitu numerojärjestyksessä. Ensimmäinen indeksi -järjestysnumero on aina 0. Esimerkiksi muuttuja[1] = 4 tarkoittaa, että muuttujan toinen indeksi on saanut arvon 4. Ei kuitenkaan pidä sekoittaa indeksiä ja muutujan arvoa toisiinsa.

Teemme nyt listan:

lista = [0,0,0,0,0,0,0] 

Tämä tarkoittaa, että muuttujalle lista on seitsemän eri arvoa ja ne kaikki ovat tällä hetkellä 0. Jos haluaisimme nyt esimerkiksi antaa muuttujalle lista seitsemän eri arvoa voisimme kirjoittaa:

lista[0]=4
lista[1]=5
lista[2]=29 ...

Lista näyttäisi tämän jälkeen tältä:
lista = [4,5,29,0,0,0,0]

Nyt kyselijämme saa siis muodon:

for i in range (6)
      lista[i] = input('Arvaa oikea numero');

for-silmukka toistaa kysymyksen seitsemän kertaa aloittaen 0:sta ja antaen muuttujalle i aina kyseisen kyselykerran arvon eli 0, 1, 2, 3, 4, 5, 6.

Tämän jälkeen voimme kirjoittaa

print lista[i];

Tämä tulostaa kulloisenkin for-silmukan mukaisen listan arvon sen mukaan minkä olet itse lista- muuttujalle antanut.

2. Tee koodi, jolla kone arvoo jonkun satunnaisen luvun väliltä 0-39:

Seuraavaksi laitamme koneen arpomaan satunnaisesti lukuja väliltä 1-39.

Ensin kutsumme random-kirjastoa, jotta saamme koneen arpomaan satunnaisesti:

import random; #kutsuu import kirjaston

Sen jälkeen teemme jälleen listan, johon tallennamme koneen arpomat seitsemän lukua. Tämä edustaa oikeaa riviä.

satunnainen_arvo = [0,0,0,0,0,0,0];
for ii in range(6):
      satunnainen_arvo[ii] = random.randint(1, 39); #antaa satunnaisen arvon muuttujalle satunnainen_arvo

3. Tee koodi, jolla kone vertailee sinun antamaasi numeroa ja koneen arpomaa numeroa, arvasitko numeron oikein?

Ensiksi, määrittele muutuja, joka laskee kuinka monta arvausta sait oikein.

oikein = 0
kierros = 0

Sen jälkeen teet for-silmukan, jolla tarkistat, että onko arvauksesi oikein. Nyt tarvitset avuksesi vielä yhden muuttujan eli kierroksen. Kierros-muuttuja on sellainen, jolla varmistat, että silmukka ottaa ensin yhden arvauksesi ja vertaa sitä kaikkiin koneen arpomiin lukuihin. Vain jos arvauksesi on oikein niin se lisää oikein muuttujan arvoa yhdellä.

for iii in range(7):
    if int(lista[iii]) == int(satunnainen_arvo[kierros]):
        print 'oikein'
        oikein = oikein +1;
    kierros = kierros+1;
    
print 'Sait lotto pelissä oikein ', oikein

4. Pelimme eteenpäin kehittäminen

Peli on nyt valmis, mutta sitä voi kehittää vielä eteenpäin.

  1. Peli ei estä arvaamasta eikä arpomasta samoja lukuja useaan kertaan. Tämä pitäisi oikeassa lotopelissä estää. Miten sen tekisit?
  2. Peli on pelkkä tekstipeli. Seuraava vaihe on luonnollisesti grafiikka...