Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Algoritmit ja lista tehtävä

aurinkoinen1 [01.04.2019 13:02:02]

#

Hei, minulla on Windows alusta ja käytän python 3.7. Minulla on tällainen yksi tehtävä jota en osaa ratkaista ja tarvitsisin siinä apua. Tehtävänanto on seuraava:

Ask user for a list of integers. If user enters an integer, then append it into the list and ask for the next. If user enters something else and the list is at least 3 items long, then list is completed, stop asking for more. If the user enters not a number, but the list is too short, skip it and continue asking. Print the mean average of the values. Use integer division.

Valmiina sen kuuluisi näyttää toimiesssaan esim tältä:

Enter a number or something else to stop: 10
Enter a number or something else to stop: stop
Must be at least 3, type some more
Enter a number or something else to stop: -20
Enter a number or something else to stop: 50
Enter a number or something else to stop: 40
Enter a number or something else to stop: finish
Mean average = 20

Kiitos paljon jo etukäteen jos joku osaa tuon ratkaista ja auttaa :)

Teuro [01.04.2019 13:48:07]

#

Mikä osa tehtävässä tuottaa ongelmia? Laita tekemäsi koodilistaus esille, niin katsotaan miten asiaa kannattaisi lähestyä. Noin muutoin varsin suoraviivainen ja selkeä tehtävä. Kysyt vain silmukassa lukuja, kunnes listassa on ainakin 3 kokonaislukua. Tämän jälkeen lisäät luvun vain jos annettu syöte on kokonaisluku. Lopulta kun käyttäjä syöttää jotakin muuta kuin kokonaisluvun, niin lasket keskiarvon syötetyistä kokonaisluvuista.

aurinkoinen1 [01.04.2019 14:02:02]

#

Olen aloittelija koodauksessa, joten kaikissa osissa tehtävää on hieman ongelmia. En oikein tiedä mitä silmukkaa käyttää, kokeilin while-silmukkaa, mutta siihen en sitten osannut muodostaa sitä kohtaa, että listassa on kolme lukua. Tässä näkyy mitä olen yrittänyt.

#Ask user for a list of integers
while True:
    try:
        n=int(input('Enter a number or something else to stop: '))
    except:
        print('Must be at least 3, type some more')

jalski [01.04.2019 14:19:41]

#

aurinkoinen1 kirjoitti:

(01.04.2019 14:02:02): Olen aloittelija koodauk­sessa, joten kaikissa...

Päättymättömässä silmukassa lue syöte. Tarkasta onko syöte pelkkiä numeroita. Jos on, niin muunna luvuksi ja lisää listaan. Jos ei ole pelkkiä numeroita, niin tarkasta onko listan pituus 3 tai suurempi. Jos on niin poistu silmukasta, muuten tulosta viesti. Silmukan jälkeen laske ja tulosta keskiarvo.

Esimerkiksi 8th ohjelmointikielellä ohjelma voisi näyttää vaikka tältä:

needs math/mean


[] var, values


: get-line  \ -- s
  f:stdin f:getline nip ;


: numbers?  \ s -- s f
  dup /[0-9]/ r:match nip ;


: app:main
  repeat
    "Enter a number or something else to stop: " .
    get-line numbers? if
      values @ swap >n a:push drop
    else
      drop
      values @ a:len nip 3 n:< not if
        break
      else
        "Must be at least 3, type some more." . cr
      then
    then
  again
  values @ a:mean nip "Mean average = " . . cr
  bye ;

Teuro [01.04.2019 14:55:56]

#

Jalski aloittelijalle voisi olla parempi pitäytyä pyydetyssä kielessä tai pseudokoodilla. Harvinainen 8th-kieli ei välttämättä aukea aloittajalle.

Alla koodirunko tehtävään, jolla sinun pitäisi onnistua.

# Määritellään lista, jonne tallennamme luvut
lista = []
listan_koko = 0

while True:
	#kysy syote

	try:
		#muunna luvuksi heittään poikkeuksen jos epäonnistuu
		#lisää listaan luku
		#laske listan_koko len-funktio

	except ValueError:
		#jos listan koko on alle 3
			#Ilmoita virheestä
		#muuten
			#määrittele summamuutuja ja anna sille arvoksi nolla

			#käy lista läpi for-silmukalla
				#lisää summmaan vuorossa oleva luku

			#poistu while-silmukasta

#Tulosta keskiarvo

aurinkoinen1 [01.04.2019 21:44:35]

#

Suuret kiitokset ohjeista ja neuvoista, sain tehtävän niiden ansiosta ratkaistua. :)

Vastaus

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

Tietoa sivustosta