functies en strings

Moderators: jkien, Xilvo

Reageer
Gebruikersavatar
Berichten: 257

functies en strings

Beste,
 
Ik moest een functie schrijven waarbij het de bedoeling is dat een woord eerst volledig wordt omgedraaid en ten 2de dat er voor zorgt dat
wanneer we de B zien in het begin en op het einde van de string dat we dan alles omdraaien wat ertussen zit..
 
Echter dit deel heb ik algeschreven:
maar ik vind niet zo goed hoe ik moet schrijven dat het eerste en het laatste deel weggaat..
MVG

Katrien

 
 
def <b>omdraaien</b>(zin):
<i>'''</i>
<i>>>> omdraaien('BRBBBRBBRB')</i>
<i>'RBRRRBRRBR'</i>
<i>>>> omdraaien('RBBRBRBBBRBRRRBRRRRBB')</i>
<i>'BRRBRBRRRBRBBBRBBBBRR'</i>
<i>>>> omdraaien('BBRBRBRBRBRBRBRRBRBRBRBRRBRBRRBRB')</i>
<i>'RRBRBRBRBRBRBRBBRBRBRBRBBRBRBBRBR'</i>
<i>'''</i>
nieuwezin = <i>''</i>
for letter in zin:
if letter == <i>'B'</i>:
nieuwezin += <i>'R'</i>
else:
letter == <i>'R'</i>
nieuwezin += <i>'B'</i>
return(nieuwezin)
 
def <b>volgende</b>(woordje):
<i>'''</i>
<i>>>> volgende('BRBBBRBBRB')</i>
<i>'BBRRRBRRBB'</i>
<i>>>> volgende('RBBRBRBBBRBRRRBRRRRBB')</i>
<i>'BRRBRBRRRBRBBBRBBBBBB'</i>
<i>>>> volgende('BBRBRBRBRBRBRBRRBRBRBRBRRBRBRRBRB')</i>
<i>'BBBRBRBRBRBRBRBBRBRBRBRBBRBRBBRBB'</i>
<i>'''</i>
nieuwezin = <i>''</i>
for letter in woordje:
if letter == <i>'B'</i>:
 
zin = omdraaien(woordje[1:-1])#de haakjes kloppen niet
# we moeten de functie maken waarvan als je een R hij deze omzet naar een B en dan de rest van de functie omdraait
# en een functie waarvan je als je van de achterkant een R tegenkomt deze omdraait naar een B en hierussen de functie omdraait..
 
return(zin)
 
 
if __name__ == <i>'__main__'</i>:
import doctest
doctest.testmod()
 
 

Berichten: 7.068

Re: functies en strings

Kun je de opdracht geven? Het is mij namelijk helemaal niet duidelijk wat je probeert te bereiken (Het "omdraaien" van een B is een R?)

Gebruikersavatar
Berichten: 257

Re: functies en strings

Beste,
IK heb ondertussen mijn oefening al gevonden!
Echter had ik een nieuwe vraag..
Dit is mijn oefening (excuseer dat ik deze er de vorige keer niet had bijgetypt..
Opgave
De resultaten van bovenstaande studie zouden ons misschien kunnen leiden naar de oorsprong van <i>Turkey Irish</i>. Dr. James Bender vermeldt deze geheimtaal op 31 december 1944 in een van zijn artikels in New York Times Magazine. Deze gesproken taal zou naar verluidt door Engelse kinderen gebruikt worden om in het geniep te praten over dingen die niet voor de oren van volwassenen bestemd zijn.
Om een stuk tekst te vertalen naar <i>Turkey Irish</i> volstaat het om voor elke reeks van opeenvolgende klinkers een ab toe te voegen. Als de reeks klinkers echter begint met een hoofdletter, dan vervangen we die eerste hoofdletter door de corresponderende kleine letter, en voegen voor de reeks Ab toe. Als klinkers beschouwen we de letters a, e, i, o en u(zowel in kleine letters als in hoofdletters). Gevraagd wordt:
  • Schrijf een functie isKlinker waaraan een karakter moet doorgegeven worden. De functie moet een Booleaanse waarde teruggeven die aangeeft of het gegeven karakter al dan niet een klinker is.
  • Schrijf een functie codeer waaraan een woord of een zin moet doorgegeven worden (een string). De functie moet het gegeven woord of de gegeven zin teruggeven, vertaald naar <i>Turkey Irish</i>.
  • Schrijf een functie decodeer waaraan een woord of een zin in <i>Turkey Irish</i> moet doorgegeven worden (een string). De functie moet het originele woord of de originele zin teruggeven.
 
Ik heb de eerste 2 al gevonden
maar nu loop ik vast bij de functie decodeer..
Mijn debugger loopt vast wanneer ik typ isKlinker(woord[n]) (terwijl ik deze functie hier voorheen al heb ingebouwd..)
ik snap niet goed wat ik mis doe!

Code: Selecteer alles

def decodeer(woord):
    '''
    >>> decodeer('Fabababianabo')
    'Fabiano'
    >>> decodeer('CAbiA-abagabent')
    'CIA-agent'
    '''
    # we kijken verder in groepjes van 2 met 1 stapje
    vowel = 'aeiouAEIOU'
    n = 0
    zin = ''
    while n < len(woord):
        dubbel = woord[n:n+2]
        if dubbel.lower() == 'ab':
            klinker = woord[n+2]
            
            n = n + 3
            while n < len(woord) and isklinker(woord[n]):
                zin += woord[n]
                n += 1
        else:
            zin += woord[n]
            n += 1
    return zin

Gebruikersavatar
Berichten: 257

Re: functies en strings

Beste,
ik heb het ondertussen al gevonden!!
Toch bedankt voor de hulp! :D
ggroetjes

Gebruikersavatar
Berichten: 2.609

Re: functies en strings

Tip voor in de toekomst: zet je code tussen

Code: Selecteer alles

 [/ code] tags voor betere leesbaarheid.

Gebruikersavatar
Berichten: 257

Re: functies en strings

def cijfers(telefoon):

    '''

    >>> cijfers('0472/91.39.17')

    '0472913917'

    >>> cijfers('++32 (0)9 264 4779')

    '32092644779'

    '''

    tel = ''

    for s in telefoon:

        if s.isdigit():

            tel += s

        else:

            tel += ''

    return tel

        

def vervangen(nummer1, nummer2):

    '''

    >>> vervangen('0472/91.39.17', 1234567890)

    '1234/56.78.90'

    >>> vervangen('++32 (0)9 264 4779', 123456789)

    '++00 (1)2 345 6789'

    '''

    if len(cijfers(nummer1)) == 10:

        telefoon = '{}/{}.{}.{}'.format((nummer2[:5]), (nummer2[5:7]), (nummer2[7:9]), (nummer2[9:]))

    else:

        telefoon = '++00 ({}){} {} {}'.format((nummer2[2]), (nummer2[3]), (nummer2[4:7]), (nummer2[7:]))

    return telefoon
 
Beste,

De 2de code klopt niet helemaal maar ik snap niet zo goed wat ik mis doe?

Zou u mij soms kunnen helpen?
 
Katrien

Berichten: 7.068

Re: functies en strings

Nog even over de vorige opdracht: Als je de zin "Aab is geen nederlands woord." codeert en daarna het resultaat decodeert, krijg je dan de zin waarmee je begon met jouw code?

En over de nieuwe opdracht:
De 2de code klopt niet helemaal maar ik snap niet zo goed wat ik mis doe?
Zonder te weten wat je wilt bereiken, is het lastig helpen. Wat is de opdracht? (Ofwel: wat zou het stukje code moeten bereiken?)

Gebruikersavatar
Berichten: 257

Re: functies en strings

Beste,
 
op de eerste vraag is het antwoord ja,
 
Op de 2de vraag ondertussen heb ik de code al gevonden maar ik had de vraag verkeerd begrepen..

Dit was de vraag
Schrijf een functie vervangen waaraan twee argumenten moeten doorgegeven worden: een telefoonnummer en een natuurlijk getal (een int). De functie moet de opeenvolgende cijfers van het gegeven telefoonnummer vervangen door de opeenvolgende cijfers van het gegeven getal, en het resultaat daarvan teruggeven. Indien het gegeven telefoonnummer meer cijfers bevat dan het gegeven getal, dan moeten de extra cijfers vooraan vervangen worden door nullen. Indien het gegeven telefoonnummer minder cijfers bevat dan het gegeven getal, dan moeten de overtollige cijfers op het einde van het getal niet gebruikt worden bij de vervanging.

Berichten: 7.068

Re: functies en strings

Ik vroeg me namelijk af of hoofdletters ook goed gedecodeerd zouden worden, maar goed... nog even mijn oplossing (misschien heb je er wat aan):

Code: Selecteer alles

def isKlinker(c):
	return (c.lower() in "aeiou")

def codeer(zin):
	gecodeerdeZin = ''
	inKlinkerReeks = False
	for c in zin:
		if isKlinker(c) and (not inKlinkerReeks):
			if c.isupper():
				gecodeerdeZin += 'Ab' + c.lower()
			else:
				gecodeerdeZin += 'ab' + c
		else:
			gecodeerdeZin += c
		inKlinkerReeks = isKlinker(c)
	return gecodeerdeZin
	
def decodeer(zin):
	gedecodeerdeZin = ''
	n = 0
	inKlinkerReeks = False
	while n < len(zin):
		if (not inKlinkerReeks) and (zin[n:n + 2].lower() == 'ab'):
			n += 2
			if zin[n - 2].isupper():
				gedecodeerdeZin += zin[n].upper()
			else:
				gedecodeerdeZin += zin[n]
		else:
			gedecodeerdeZin += zin[n]
		inKlinkerReeks = isKlinker(zin[n])
		n += 1
	return gedecodeerdeZin
	
zin = 'Een of andere zin met Aaaabbabab.'
print(zin)
print(codeer(zin))
print(decodeer(codeer(zin)))
En:

Code: Selecteer alles

def telCijfers(nummer):
	teller = 0
	for c in nummer:
		if c.isdigit():
			teller += 1
	return teller
	
def vervangen(telefoonnummer, getal):
	nieuwNummer =''
	cijfers = str(getal)
	aantalNullen = telCijfers(telefoonnummer) - len(cijfers)
	p = 0
	for c in telefoonnummer:
		if c.isdigit():
			if aantalNullen > 0:
				nieuwNummer += '0'
			else:
				nieuwNummer += cijfers[p]
				p += 1
		else:
			nieuwNummer += c
	return nieuwNummer

Reageer