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.'
Kokonaislukujen syöttöön raw_input + int, esimerkiksi:
luku1 = int(raw_input('Kirjoita ensimmäinen luku: '))
Lopun kaksi elifiä korvaisin elsellä.
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.'
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.
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?
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.'
Ei pilaa tekemisen iloa, oppii vain lisää. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.