Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python verkkokurssin tehtävä

anttu123 [06.10.2022 17:15:36]

#

Moi, opiskelen Lut universityn verkkokurssilla Python ohjelmointikieltä. Kirjoitan ensimmäistä koodiani if -rakenteella ja ohjeistus on seuraavanlainen:

Tässä tehtävässä jossittelemme merkkijonoilla.
1. Kysy haluaako käyttäjä lopettaa ohjelman suorittamisen ja mikäli käyttäjä antaa
kirjaimen ’k’ tai ’K’ niin lopeta ohjelman suoritus tulosteella ”Kiitos ohjelman
käytöstä.”
2. Muussa tapauksessa kysy käyttäjältä nimi ja salasana.
3. Mikäli nimi on ”Matti” ja salasana on ”salasana” niin tulosta teksti: ”Käyttäjä
tunnistettu.” sekä lopeta ohjelman suoritus. Muussa tapauksessa tulosta nimen pituus ja
tieto, ettei se tai salasana ollut oikein, esim. ”Antamasi nimi oli 5 merkkiä pitkä, mutta
se tai salasana ei ollut oikein.” Tässä yhteydessä voi olla tarvetta kerrata print-lauseen
käyttöä (L02) sekä tutustua oppaan taulukkoon 3.2 "Boolean-operaattorit".

Ja esimerkkituloste:

Haluatko lopettaa ohjelman suorittamisen (k/K): e
Anna nimi: matti
Anna salasana: salasana
Antamasi nimi oli 5 merkkiä pitkä, mutta se tai salasana ei ollut oikein.

Tässä kirjoittamani koodi:

lopetus = input("Haluatko lopettaa ohjelman suorittamisen (k/K): ")
if(lopetus=='k'):
	print("Kiitos ohjelman käytöstä.")
elif(lopetus=='K'):
	print("Kiitos ohjelman käytöstä.")
elif((lopetus!='k') and (lopetus!='K')):
	nimi = input("Anna nimi: ")
	salis = input("Anna salasana: ")
elif((nimi=='Matti') and (salis=='salasana')):
	print("Käyttäjä tunnistettu.")
else:
	print("Antamasi nimi oli", len(nimi), "merkkiä pitkä, mutta se tai salasana ei ollut oikein.")

Ohjelma toimii riville 9 asti oikein, mutta ei sen jälkeen enää tulosta tuota "Käyttäjä tunnistettu".. Osaisko joku auttaa missä on vika.. Jos otan sisennykset pois muuttujien nimi ja salis edestä, herjaa editori syntax erroria. Ja huom tää on tosiaan mun eka if else koodi.

peran [06.10.2022 17:30:40]

#

Entä jos muutat rivit...

elif((nimi=='Matti') and (salis=='salasana')):
	print("Käyttäjä tunnistettu.")
else:
	print("Antamasi nimi oli", len(nimi), "merkkiä pitkä, mutta se tai salasana ei ollut oikein.")

Seuraavanlaiseksi...

if (nimi=='Matti') and (salis=='salasana'):

Vielä oikeammin, kun sisennät lisää kyseisen ehtolauseen ja sen jälkeiset rivit, niin ohjelma menee oikeaan ohjelmalohkoon...

En viitsi antaa täysin valmista koodia, mutta yritä ymmärtää, että ohjelma-lohko määritellään Pythonissa sisennyksellä.

Edit - Olethan tutustunut Putkan Pythonohjelmointi-oppaaseen !?
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=python3_01

peran [06.10.2022 17:37:49]

#

print("Ohjelmalohko 1")
if True:
     print("Ohjelmalohko 2")
     if False:
         print("Ohjelmalohko 3, jota ei tulosteta, koska ei täytä ehtoa False.")
         if True:
            print("Ohjelmalohko 4, jota ei tulosteta, koska ohjelmalohkoa 3:akaan")
     if True:
         print("Tämä ohjelmalohko tulostetaan, koska Ohjelmalohko 2-tulostetaan, ja täyttää ehdon True.")

Metabolix [06.10.2022 19:53:20]

#

Ongelmahan juontuu siitä, että if-elif-else muodostaa ketjun, josta vain yhden osan sisältö suoritetaan. Kun suoritus ajautuu tuonne, missä salasanaa ja tunnusta kysytään, myöhempiä saman rakenteen elif-kohtia ei enää käsitellä, vaan nimeä ja salasanaa varten pitää aloittaa uusi if-lause näiden kysymisen jälkeen (myöskin sisennettynä, koska se kuuluu edelleenkin tuohon tapaukseen, jossa ensimmäinen vastaus ei ollut k/K).

anttu123 [06.10.2022 21:34:33]

#

Moi, kiitos kaikille vastanneille. Sain korjattua tehtävän oikein toimivaksi. Unohdin tuonne kuitenkin tuon rivin 4, onko se turha ohjelman toimimisen kannalta, eli jos pyyhkisin rivin 4 kokonaan pois niin toimisiko koodi silloinkin oikein? :D
Edit: vai mitä jos rivin 4 tilalla olisi else

lopetus = input("Haluatko lopettaa ohjelman suorittamisen (k/K): ")
if((lopetus=='k') or (lopetus=='K')):
	print("Kiitos ohjelman käytöstä.")
if((lopetus!='k') and (lopetus!='K')):
	nimi = input("Anna nimi: ")
	salis = input("Anna salasana: ")
	if((nimi=='Matti') and (salis=='salasana')):
		print("Käyttäjä tunnistettu.")
	else:
		print("Antamasi nimi oli", len(nimi), "merkkiä pitkä, mutta se tai salasana ei ollut oikein.")

peran [07.10.2022 07:33:29]

#

anttu123 kirjoitti:

(06.10.2022 21:34:33): Edit: vai mitä jos rivin 4 tilalla olisi else

Se ajaisi saman asian, mikäli tarkoitit seuraavaa...

lopetus = input("Haluatko lopettaa ohjelman suorittamisen (k/K): ")
if((lopetus=='k') or (lopetus=='K')):
	print("Kiitos ohjelman käytöstä.")
else:
	nimi = input("Anna nimi: ")
	salis = input("Anna salasana: ")
	if((nimi=='Matti') and (salis=='salasana')):
		print("Käyttäjä tunnistettu.")
	else:
		print("Antamasi nimi oli", len(nimi), "merkkiä pitkä, mutta se tai salasana ei ollut oikein.")

Vastaus

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

Tietoa sivustosta