Tie koodariksi

Ohjelmoinnin alkeet

Luku 10: Tietotyypit

Jokaisella ohjelman muistissa olevalla tiedolla on tyyppi, joka vaikuttaa sen käsittelyyn. Tähän mennessä olemme käsitelleet kahden tyyppistä tietoa: lukuja ja merkkijonoja.

Luvun ja merkkijonon ero

Luvun ja merkkijonon erona on, että voimme tehdä laskutoimituksia luvuilla ja käsitellä merkkijonoa merkki kerrallaan. Seuraava koodi havainnollistaa eroa:
print(18+4)
print("18"+"4")
Koodin tulostus on seuraava:
22
184
Koodissa 18 ja 4 ovat lukuja, joten +-merkki laskee ne yhteen. Vastaavasti "18" ja "4" ovat merkkijonoja, joten +-merkki yhdistää niiden merkit peräkkäin.

Merkkijonon merkit

Funktio len antaa merkkijonon pituuden eli merkkien määrän. Lisäksi merkintä [] kertoo, mikä on tietyssä kohdassa merkkijonoa oleva merkki. Kohdat on numeroitu kokonaisluvuin 0:sta alkaen.

Esimerkiksi seuraava koodi tulostaa merkkijonon pituuden ja kaksi ensimmäistä merkkiä:

x = "apina"
print(len(x))
print(x[0])
print(x[1])
Ohjelman tulostus on seuraava:
5
a
p
Voimme myös käydä läpi kaikki merkkijonon merkit for-silmukalla:
x = "apina"
for c in x:
    print(c)
Ohjelma toimii näin:
a
p
i
n
a

Luvusta merkkijonoksi

Voimme muuttaa luvun merkkijonoksi funktiolla str, jolloin pääsemme käsiksi luvun numeroihin.

Esimerkiksi seuraava ohjelma ilmoittaa luvun 123123 numeroiden määrän:

x = 123**123
print(x)
s = str(x)
print(len(s))
Ohjelman tulostus on seuraava:
11437436793461719009988029522806627674621807845185...
258
Luvussa 123123 on siis 258 numeroa.

Merkkijonosta luvuksi

Voimme vastaavasti muuttaa numeroista muodostuvan merkkijonon luvuksi funktiolla int.

Voimme vaikkapa laskea, mikä on luvun 123123 numeroiden summa:

x = 123**123
summa = 0
for c in str(x):
    summa += int(c)
print(summa)

Tässä meidän täytyy muuttaa tyyppiä kahdesti. Ensin muutamme luvun merkkijonoksi, jotta pääsemme käsiksi sen numeroihin. Tämän jälkeen muutamme kunkin numeron luvuksi, jotta voimme laskea ne yhteen.

Ohjelma antaa seuraavan tuloksen:

1242

Luvun 123123 numeroiden summa on siis 1242.


Tehtävä 1 Ratkaisematon

Luvun 5 kertomassa 1*2*3*4*5 = 120 on kolme numeroa. Montako numeroa on luvun 1000 kertomassa?

Kirjoita ohjelma tähän:


Tehtävä 2 Ratkaisematon

Luvussa 37827 esiintyy kaksi kertaa numero 7. Montako kertaa luvussa 999999 esiintyy numero 7?

Kirjoita ohjelma tähän:


Tehtävä 3 Ratkaisematon

Luvussa 22785 esiintyy kolme parillista numeroa. Montako parillista numeroa esiintyy luvussa 999999?

Kirjoita ohjelma tähän:


Tehtävä 4 Ratkaisematon

Luvuissa 1,2,...,10 on yhteensä 11 numeroa. Montako numeroa on yhteensä luvuissa 1,2,...,1000?

Kirjoita ohjelma tähän:


Tehtävä 5 Ratkaisematon

Lukujen 1,2,...,10 numeroiden summa on 1+2+3+4+5+6+7+8+9+1+0 = 46. Mikä on lukujen 1,2,...,1000 numeroiden summa?

Kirjoita ohjelma tähän:


Tehtävä 6 Ratkaisematon

Positiivinen kokonaisluku on onnenluku, jos sen jokainen numero on 4 tai 7. Ensimmäiset onnenluvut ovat 4, 7, 44, 47, 74 ja 77.

Tee ohjelma, joka tulostaa pienimmästä suurimpaan onnenluvut, jotka ovat pienempiä kuin 10000.

Kirjoita ohjelma tähän: