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.
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()
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".
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. :)
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.