Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Ensimmäinen ohjelma

severij [05.06.2008 17:49:49]

#

Tämä on ensimmäinen ohjelmani ja ohjelmointikielenä on Python. Hain googlella tehtäviä ja löysin tehtävän jossa pitäisi tehdä nelilaskin.

Olisiko koodin voinut kirjoittaa lyhyemmin ja voisiko ohjelmaa parantaa?

# -*- coding: cp1252 -*-
#nelilaskin.py

luku1 = input('Kirjoita ensimmäinen luku: ')
luku2 = input('Kirjoita toinen luku: ')
print '''
Nelilaskin osaa seuraavat toiminnot:
1 - summa
2 - erotus
3 - tulo
4 - osamäärä

Valitsemasi luvut ovat''', luku1, 'ja', luku2
toiminto = input('Valitse haluamasi toiminto: ')
if toiminto == 1:
	print luku1, '+', luku2, '=', luku1 + luku2
elif toiminto == 2:
	print luku1, '-', luku2, '=', luku1 - luku2
elif toiminto == 3:
	print luku1, '*', luku2, '=', luku1 * luku2
elif toiminto == 4:
	print luku1, '/', luku2, '=', luku1 / luku2
elif toiminto == 0:
	print 'Toimintoa ei tunnistettu.'
elif toiminto > 4:
	print 'Toimintoa ei tunnistettu.'

Chiman [05.06.2008 18:19:08]

#

Kokonaislukujen syöttöön raw_input + int, esimerkiksi:

luku1 = int(raw_input('Kirjoita ensimmäinen luku: '))

Lopun kaksi elifiä korvaisin elsellä.

hunajavohveli [05.06.2008 18:21:01]

#

Ensinnäkin sisennys puuttuu, mutta se kaiketi on alkuperäisessä koodissa, koska muutenhan tuo ei toimisikaan. Mieleen ei tule juuri nyt muuta, kuin että viimeiset neljä riviä eivät kata kaikkia poikkeustilanteita, joissa toiminto on jotain muuta kuin luku väliltä 1-4. Vaihtaisin ne yksinkertaisesti seuraavaan:

else:
   print 'Toimintoa ei tunnistettu.'

Chiman [05.06.2008 18:24:42]

#

On siinä sisennys, mutta Putkan kooditagit eivät näytä tabulaattoreita (viestin lainaus paljastaa). Neljä välilyöntiä taitaa olla yleisimmin käytetty sisennys Pythonissa.

severij [05.06.2008 19:29:05]

#

hunajavohveli kirjoitti:

Ensinnäkin sisennys puuttuu, mutta se kaiketi on alkuperäisessä koodissa, koska muutenhan tuo ei toimisikaan. Mieleen ei tule juuri nyt muuta, kuin että viimeiset neljä riviä eivät kata kaikkia poikkeustilanteita, joissa toiminto on jotain muuta kuin luku väliltä 1-4. Vaihtaisin ne yksinkertaisesti seuraavaan:

else:
   print 'Toimintoa ei tunnistettu.'

Juu siis sisennys on koodissa. Mites muuten saa sellaisen, kun yrittää jakaa nollalla niin ohjelma ilmoittaa että "Nollalla ei voi jakaa?" Ja jakojäännökset?

Chiman [05.06.2008 20:02:16]

#

Jakojäännös on %. Virhetilanteet hoidetaan poikkeuksilla, try-except-lohkoilla. Tässä kenties helpommin laajennettava runko, toivottavasti ei pilaa tekemisen iloa:

# -*- coding: cp1252 -*-
# nelilaskin.py

operaatiot = {1: '+', 2: '-', 3: '*', 4: '/'}
luku1 = int(raw_input('Kirjoita ensimmäinen luku: '))
luku2 = int(raw_input('Kirjoita toinen luku: '))
print '''
Nelilaskin osaa seuraavat toiminnot:
1 - summa
2 - erotus
3 - tulo
4 - osamäärä

Valitsemasi luvut ovat''', luku1, 'ja', luku2
toiminto = int(raw_input('Valitse haluamasi toiminto: '))
try:
    lauseke = '%d %s %d' % (luku1, operaatiot[toiminto], luku2)
    print lauseke, '=', eval(lauseke)
except ZeroDivisionError:
    print 'Nollalla ei voi jakaa'
except KeyError:
    print 'Toimintoa ei tunnistettu.'

severij [05.06.2008 20:11:34]

#

Ei pilaa tekemisen iloa, oppii vain lisää. :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta