Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

geboortestenen bij de juiste maand zetten in python

Beste,

Deze code die ik heb uitgewerkt lukt enkel voor de maand januari en februari vanaf een andere invoer is alles maart..

Ziet iemand wat ik verkeerd doe..

Of hoe het ook een beetje korter kan mss?
 
steen = input('geef hier de naam van de steen aub:')
 
if steen == 'granaat':
    print('{} is een geboortesteen van de maand januari'.format(steen))
elif steen == 'amethist':
    print('{} is een geboortesteen van de maand februari'.format(steen))
elif steen == 'bloedsteen' or 'aquamarijn':
    print('{} is een geboortesteen van de maand maart'.format(steen))
elif steen == 'diamant' or 'kwarts':
    print('{} is een geboortesteen van de maand april'.format(steen))
elif steen == 'smaragd' or 'chrysopraas':
    print('{} is een geboortesteen van de maand mei'.format(steen))
elif steen == 'parel' or 'maansteen' or 'alexandriet':
    print('{} is een geboortesteen van de maand juni'.format(steen))
elif steen ==  'robijn' or 'carneool':
    print('{} is een geboortesteen van de maand juli'.format(steen))
elif steen == 'sardonyx' or 'peridotiet' or 'spinel':
    print('{} is een geboortesteen van de maand augustus'.format(steen))
elif steen == 'saffier':
    print('{} is een geboortesteen van de maand september'.format(steen))
elif steen == 'opaal' or 'toermalijn':
    print('{} is een geboortesteen van de maand oktober'.format(steen)) 
elif steen == 'topaas' or 'citrien':
    print('{} is een geboortesteen van de maand november'.format(steen))
elif steen == 'turkoois' or 'zinkoon' or 'tanzaniet':
    print('{} is een geboortesteen van de maand december'.format(steen))
else: 
    print('{} is een geboortesteen van de maand september of december'.format(steen))
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: geboortestenen bij de juiste maand zetten in python

katrien van den boss schreef:  
Beste,

Deze code die ik heb uitgewerkt lukt enkel voor de maand januari en februari vanaf een andere invoer is alles maart..

Ziet iemand wat ik verkeerd doe..

Of hoe het ook een beetje korter kan mss?
 
steen = input('geef hier de naam van de steen aub:')
 
if steen == 'granaat':
    print('{} is een geboortesteen van de maand januari'.format(steen))
elif steen == 'amethist':
    print('{} is een geboortesteen van de maand februari'.format(steen))
elif steen == 'bloedsteen' or 'aquamarijn':
    print('{} is een geboortesteen van de maand maart'.format(steen))
elif steen == 'diamant' or 'kwarts':
    print('{} is een geboortesteen van de maand april'.format(steen))
elif steen == 'smaragd' or 'chrysopraas':
    print('{} is een geboortesteen van de maand mei'.format(steen))
elif steen == 'parel' or 'maansteen' or 'alexandriet':
    print('{} is een geboortesteen van de maand juni'.format(steen))
elif steen ==  'robijn' or 'carneool':
    print('{} is een geboortesteen van de maand juli'.format(steen))
elif steen == 'sardonyx' or 'peridotiet' or 'spinel':
    print('{} is een geboortesteen van de maand augustus'.format(steen))
elif steen == 'saffier':
    print('{} is een geboortesteen van de maand september'.format(steen))
elif steen == 'opaal' or 'toermalijn':
    print('{} is een geboortesteen van de maand oktober'.format(steen)) 
elif steen == 'topaas' or 'citrien':
    print('{} is een geboortesteen van de maand november'.format(steen))
elif steen == 'turkoois' or 'zinkoon' or 'tanzaniet':
    print('{} is een geboortesteen van de maand december'.format(steen))
else: 
    print('{} is een geboortesteen van de maand september of december'.format(steen))
 
Beste,
 
Ik heb het ondertussen al gevonden maar ik snap niet goed waarom ik  er telkens steen == 'turkoois or steen == 'zirkoon' or..

 
moet voorzetten? en niet gewoon mag typen steen ==
Benm
Artikelen: 0
Berichten: 12.262
Lid geworden op: za 21 okt 2006, 01:23

Re: geboortestenen bij de juiste maand zetten in python

Het is een eigenaardige eigenschap van python. Talen als c, perl, php en dergelijke hebben allemaal een switch/case/default systeem om te voorkomen dat je steeds de vergelijking moet herhalen achter een elseif, maar python kent dat concept niet. 
 
Overigens doe je op het eind wel een soort 'default', als ik voor de variable steen '123123' definieer krijgt ik als antwoord december - wellicht ook niet helemaal wenselijk?
Victory through technology
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: geboortestenen bij de juiste maand zetten in python

Code: Selecteer alles

elif steen == 'bloedsteen' or 'aquamarijn':
Het bovenstaande statement is gelijk aan:

Code: Selecteer alles

elif (steen == 'bloedsteen') or ('aquamarijn'):
'aquamarijn' wordt altijd gezien als true, dus zal deze clause altijd worden uitgevoerd.

De aanpak is echter niet praktisch. Het is verstandiger om een 'dictionary' te gebruiken:

Code: Selecteer alles

def vindMaand(s):
	return {
		'granaat': 'januari',
		'amethist': 'februari',
		'bloedsteen': 'maart',
		'aquamarijn': 'maart',
		'diamant': 'april',
		'kwarts': 'april',
		'smaragd': 'mei',
		'chrysopraas': 'mei',
		'parel': 'juni',
		'maansteen': 'juni',
		'alexandriet': 'juni',
		'robijn': 'juli',
		'carneool': 'juli',
		'sardonyx': 'augustus',
		'peridotiet': 'augustus',
		'spinel': 'augustus',
		'saffier': 'september',
		'opaal': 'oktober',
		'toermalijn': 'oktober',
		'topaas': 'november',
		'citrien': 'november',
		'turkoois': 'december',
		'zinkoon': 'december',
		'tanzaniet': 'december'
	}.get(s, 'onbekend')
	
steen = input('geef hier de naam van de steen aub:')
print('{} is een geboortesteen van de maand {}'.format(steen, vindMaand(steen)))
Benm
Artikelen: 0
Berichten: 12.262
Lid geworden op: za 21 okt 2006, 01:23

Re: geboortestenen bij de juiste maand zetten in python

Wat praktisch is is natuurlijk weer een ander punt. Alles in een array gooien, of in een database tabel, is soms ook wel handig. Het laatste zeker als je zoiets wilt uitbreiden zonder aan de code te hoeven sleutelen. 
Victory through technology
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: geboortestenen bij de juiste maand zetten in python

Benm schreef: Wat praktisch is is natuurlijk weer een ander punt. Alles in een array gooien, of in een database tabel, is soms ook wel handig. Het laatste zeker als je zoiets wilt uitbreiden zonder aan de code te hoeven sleutelen. 
 
Beste,
 
Alvast bedankt voor de respons! Dictionary hebben we nog niet geleerd maar dat zal wel nog komen! idd handiger om het zo op te lossen zodat ik niet moet copypasten heel de tijd..

ik snap alleen niet zo goed de .get(s, onbekend) onderaan?

Zou u dit nog kunnen uitleggen?
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: geboortestenen bij de juiste maand zetten in python

get(a, b) is een functie van een dictionary. Deze functie zoekt in het dictionary naar de 'key' die gelijk is aan a. Als deze gevonden wordt dan wordt teruggegeven wat er bij die key hoort. Als deze niet gevonden wordt dan geeft get() b terug. Dit doe ik dus om ervoor te zorgen dat de functie 'vindMaand()' altijd iets teruggeeft.
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: geboortestenen bij de juiste maand zetten in python

Okee super bedankt! Ik snap het!

Terug naar “Informatica en programmeren”