Informatica PO (print functie in for-loop)

Moderators: jkien, Xilvo

Reageer
Berichten: 1

Informatica PO (print functie in for-loop)

Beste, 
 
ik zit in 5 vwo en heb een klein probleempje bij het oplossen van desbetreffende opdracht:
 
Cijferwoorden In sommige woorden kun je als je een deel van de letters weglaat een cijfer herkennen. Een woord is een cijferwoord als je door één of meer letters weg te laten precies één van de woorden TWEE, DRIE, VIER, VIJF, ZES, ZEVEN, ACHT of NEGEN kunt maken.Schrijf een programma dat van standard input één woord inleest, geschreven in uitsluitend hoofdletters. Je programma schrijft naar standaard output één regel, met daarop als er een cijfernaam te vinden is in het woord van de invoer de naam van dat cijfer, uitgeschreven in hoofdletters. Als er geen cijfernaam te vinden is schrijft je programma het woord geen. Voorbeeld Invoer: ZWERVERS Uitvoer: ZES.
 
Ik heb het op deze manier gedaan:
 
lijst = ["TWEE", "DRIE", "VIER", "VIJF", "ZES", "ZEVEN", "ACHT", "NEGEN"]
def zoek(cijfer, invoer):
    index = 0
    for teken in cijfer:
        x = invoer.find(teken, index)
        if x == -1:
            return 'geen'
        index = x + 1
    return cijfer
 
 
invoer = input("")
 
for cijferwoord in lijst:
    if zoek(cijferwoord, invoer) == cijferwoord:
        print(cijferwoord)
   else: print('geen')
        
 
Maar hij print (geen) 8x omdat hij 8x niks in de lijst vindt. En het moet 1x geprint worden. Heeft iemand een tip?
 
alvast bedankt!

Berichten: 7.068

Re: Informatica PO (print functie in for-loop)

Zet een boolean (waar of onwaar) aan het begin van de loop en verander de waarde als je iets gevonden hebt. Print dan aan het eind iets als de waarde onveranderd is. Bijvoorbeeld:

Code: Selecteer alles

lijst = ["TWEE", "DRIE", "VIER", "VIJF", "ZES", "ZEVEN", "ACHT", "NEGEN"]
def zoek(cijfer, invoer):
    index = 0
    for teken in cijfer:
        x = invoer.find(teken, index)
        if x == -1:
            return 'geen'
        index = x + 1
    return cijfer
 
 
invoer = "ZWERVERS"

gevonden = False 
for cijferwoord in lijst:
    if zoek(cijferwoord, invoer) == cijferwoord:
        print(cijferwoord)
        gevonden = True

if not gevonden:
    print('geen')

Berichten: 12.262

Re: Informatica PO (print functie in for-loop)

Dat lijkt me wel de oplossing inderdaad. 
 
Maar kijk ook even naar hoe die zoekfunctie voor de cijfers werkt: als er meer cijferwoorden in een input zitten krijg je wellicht wat rare resultaten. Als je een woord als 'rivierwaterkracht' als input geeft wil je denk ik zowel matches voor 'vier' als 'acht', en het resultaat zou nu "vieracht" zijn. 
 
Wat ik zou doen is alle matches in een array gooien, en dan kijken wat de lengte van die array is op het einde. Is die lengte 0 dan geeft je "geen" weer, en is het meer dan nu een nette opsomming van de de elementen van die array. 
Victory through technology

Reageer