Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Kaivataan apuja Pythonin harjoitustehtävään

Thanatos [12.09.2015 12:28:40]

#

Hei,

ohessa linkki tehtävänantoon ja alla oma aikaansaannokseni, jonka kanssa olen auttamattomasti jumissa ja kaipailisin apuja siitä, miten jatkaa. Olen nyt tietoisesti tunkenut kaiken koodin mainiin.

Tehtävänanto

def main():
    mittausmäärä = input("Syötä mittausten lukumäärä: ")
    mittausmäärä = int(mittausmäärä)
    while mittausmäärä <= 0:
        print("Virhe: mittausten lukumäärän tulee olla positiivinen kokonaisluku.")

    i = 1
    summa = 0
    ekamittaus = 0
    tokamittaus = 7

    while i <= mittausmäärä:
            mittaus = input("Syötä " + str(i) + ". mittaustulos:")
            mittaus = float(mittaus)
            ekamittaus = tokamittaus
            tokamittaus = mittaus
            if 6 > mittaus or mittaus > 8:
                print("Olosuhteet eivät ole seeprakalalle sopivat.")

            elif abs(ekamittaus - tokamittaus) > 1:
                print("Olosuhteet eivät ole seeprakalalle sopivat.")

            else:
                summa += mittaus
                i += 1
                keskiarvo = summa/mittausmäärä

    print("Olosuhteet ovat seeprakalalle sopivat. Mittausten keskiarvo on ", keskiarvo)

main()

The Alchemist [12.09.2015 13:44:45]

#

Kerrohan nyt vielä sitten, että miten tuo koodisi ei toimi ja miten olet kokeillut korjata sitä. Vaikka viat ovatkin itsestään selviä (vai eivätkö olekaan?), niin olisi hyvä nähdä, että olet jotain tehnyt itsekin.

Voisit ainakin aloittaa siitä, ettet käytä while-silmukkaa if-tarkastelun sijaan.

P.S. Koodia on aika turha kääriä mihinkään funktioon, koska sen voi kirjoittaa suoraan tiedoston "ylätasollekin".

Thanatos [12.09.2015 14:16:30]

#

Pahoittelut puutteellisesta viestistä, en tajunnut tosiaan sen enempiä kertoa, kun tässä vähän ummikkona vielä. Tässä vähän selostusta siitä, mitä olen tähän saakka saanut tehtyä.

Tehtävänannon mukaan olen koettanut pilkkoa ohjelmaa pienemmiksi paloiksi ja saanutkin tuon mittausten määrän kyselyn toimimaan itsenäisenä sekä siitä seuraavan jatkon, jossa ohjelma kysyy yksittäisiä mittauksia. Mittaustulosten tarkistuksen lisäsin väliin, mutta väliltä 6.0-8.0 poikkeavan arvon syötettäessä tulisi ohjelman antaa virheilmoitus ja sitten lopettaa suoritus, mutta itselläni käy virheilmoituksen jälkeen niin, että ilmeisesti while-silmukka jatkaa mittaustulosten kyselyä virheellisen syötteen jälkeenkin.

Lisäksi toinen virheellisen pH:n mittaustapa, kahden perättäisen mittauksen erotuksen itseisarvon ollessa yli 1 tarkastelu ontuu ja en sitä saa yrityksistä huolimatta toimimaa. Käsittääkseni minun tulisi hyödyntää muuttujien rooleja niin että vain kahden edellisen mittauksen arvot saataisiin säilöttyä ja ne olisi täten aina joka kierroksella (paitsi ensimmäisellä) mahdollista laskea erotuksen itseisarvona ja siten taas tulostaa ilmoitus olosuhteiden sopimattomuudesta ja lopettaa ohjelman toisto.

En kysyisi apuja, jos virheet olisivat itselleni itsestäänselviä, joten kiitos jo etukäteen, jos vaikka jotain pieniä vinkkejä jatkosta olisi mahdollista saada. En tietenkään tarkoittanut, että koko tehtävä pitäisi valmiiksi ratkaista. :)

Metabolix [12.09.2015 14:24:08]

#

Thanatos kirjoitti:

En kysyisi apuja, jos virheet olisivat itselleni itsestäänselviä

Viestissäsi mainitsit jo kaksi kohtaa, joissa mielestäsi on virhe. (The Alchemist mainitsi myös yhden; koetapa antaa mittausten määräksi -1, niin näet.) Vielä jäi kysymykseksi, miten tarkalleen olet yrittänyt korjata niitä virheitä.

Thanatos kirjoitti:

ilmeisesti while-silmukka jatkaa mittaustulosten kyselyä virheellisen syötteen jälkeenkin.

Niin jatkaa, koska et ole siihen muuta ohjelmoinut. (Oliko jokin syy olettaa, että ohjelma itsestään silloin loppuisi?) Ratkaisu: virheellisen syötteen jälkeen keskeytä silmukka. Kyllä varmaan oppaassa lukee, että silmukan voi keskeyttää break-komennolla ja funktion return-komennolla.

Thanatos kirjoitti:

Lisäksi toinen virheellisen pH:n mittaustapa, kahden perättäisen mittauksen erotuksen itseisarvon ollessa yli 1 tarkastelu ontuu ja en sitä saa yrityksistä huolimatta toimimaa.

Kyllähän se toimii tuossa koodissasi.

Thanatos [12.09.2015 14:41:22]

#

Tuota en ollutkaan huomannut edes kokeilla!

Olen kokeillut, mihin kohtaan i-muutujan korotus kierroksen lopussa kannattaa sijoittaa, jotta korotus tapahtuisi oikein, mutta vain, jos sillä kierroksella mitattu arvo on sallitulla suljetulla välillä, eikä kahden ed. erotuksen its. arvo > 1. Nyt koodia muokattuani yritän etsiä oikeellisten syötteiden jälkeiselle loppuprintille(se joka kertoo olosuhteiden olevan oikeelliset ja mittaustulosten keskiarvon) paikkaa.


edit. muokkausten jälkeen näyttäisi toimivan nuo mainitsemani toiminnot

Vastaus

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

Tietoa sivustosta