1 van 1

geboortestenen bij de juiste maand zetten in python

Geplaatst: wo 05 okt 2016, 18:57
door katrien van den boss
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))

Re: geboortestenen bij de juiste maand zetten in python

Geplaatst: wo 05 okt 2016, 19:29
door katrien van den boss
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 ==

Re: geboortestenen bij de juiste maand zetten in python

Geplaatst: do 06 okt 2016, 02:31
door Benm
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?

Re: geboortestenen bij de juiste maand zetten in python

Geplaatst: do 06 okt 2016, 09:05
door EvilBro

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)))

Re: geboortestenen bij de juiste maand zetten in python

Geplaatst: do 06 okt 2016, 13:07
door Benm
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. 

Re: geboortestenen bij de juiste maand zetten in python

Geplaatst: do 06 okt 2016, 14:16
door katrien van den boss
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?

Re: geboortestenen bij de juiste maand zetten in python

Geplaatst: do 06 okt 2016, 15:00
door EvilBro
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.

Re: geboortestenen bij de juiste maand zetten in python

Geplaatst: do 06 okt 2016, 15:04
door katrien van den boss
Okee super bedankt! Ik snap het!