Python: fout in programma om strings te vergelijken
-
- Berichten: 1.336
Python: fout in programma om strings te vergelijken
Ik ben sinds kort weer mijn Python wat aan het opfrissen aan de hand van Pieter Sproncks "De programmeursleerling". In één van de opgaven (8.2) moet je een programma schrijven dat twee strings vergelijkt en het aantal overeenkomende tekens teruggeeft. Er zijn uitwerkingen van de opgaven, maar ik wil graag begrijpen wat er in mijn poging misgaat. Bij strings van gelijke lengte werkt de methode, maar bij strings van ongelijke lengte (zoals "een" en "twee") print de code dikwijls "0 tekens gemeen"; blijkbaar doet mijn for-lus (for i in range(lengte)) op regel 10 het niet goed, en mijn vraag is waarom. Zie hier onder de code.
def gemeen(string1,string2):
aantal = 0
if len(string1) < len(string2):
lengte = len(string1)
else:
lengte = len(string2)
for i in range(lengte):
if string1 == string2:
aantal += 1
return aantal
string1 = str(input("Geef woord 1: "))
string2 = str(input("Geef woord 2: "))
num = gemeen(string1, string2)
if num == 0:
print("Niks gemeen")
elif num == 1:
print("Eén teken gemeen")
else:
print(num, "tekens gemeen")
Alle input is welkom
def gemeen(string1,string2):
aantal = 0
if len(string1) < len(string2):
lengte = len(string1)
else:
lengte = len(string2)
for i in range(lengte):
if string1 == string2:
aantal += 1
return aantal
string1 = str(input("Geef woord 1: "))
string2 = str(input("Geef woord 2: "))
num = gemeen(string1, string2)
if num == 0:
print("Niks gemeen")
elif num == 1:
print("Eén teken gemeen")
else:
print(num, "tekens gemeen")
Alle input is welkom
-
- Berichten: 1.336
Re: Python: fout in programma om strings te vergelijken
De post vernaggelt mijn inspringen wat ik niet goed krijg, dus ik hoop dat het zo duidelijk is.
- Moderator
- Berichten: 10.632
Re: Python: fout in programma om strings te vergelijken
Code blijft goed als je code gebruikt '</>' in volledige bewerker & voorbeeld.
- Moderator
- Berichten: 10.632
Re: Python: fout in programma om strings te vergelijken
Wat is de bedoeling? Wat wordt precies bedoeld met 'overeenkomende tekens'?
Hoeveel overeenkomende tekens hebben "twee" en "twweede"? Is dat 3, een "w" en twee maal "e"?
Edit: 4, natuurlijk, ik vergat de "t".
Dit stukje klopt volgens mij al niet, je vergelijkt steeds de hele string.
Als je dit doet
vergelijk je steeds de tekens op dezelfde plaats in de string. Dat zal ook de bedoeling niet zijn.
Hoeveel overeenkomende tekens hebben "twee" en "twweede"? Is dat 3, een "w" en twee maal "e"?
Edit: 4, natuurlijk, ik vergat de "t".
Dit stukje klopt volgens mij al niet, je vergelijkt steeds de hele string.
Code: Selecteer alles
for i in range(lengte):
if string1 == string2:
aantal += 1
return aantal
Code: Selecteer alles
for i in range(lengte):
if string1[i] == string2[i]:
aantal += 1
return aantal
-
- Berichten: 1.336
Re: Python: fout in programma om strings te vergelijken
Poging twee:
Code: Selecteer alles
def gemeen(string1,string2):
aantal = 0
if len(string1) < len(string2):
lengte = len(string1)
else:
lengte = len(string2)
for i in range(lengte):
if string1[i] == string2[i]:
aantal += 1
return aantal
string1 = str(input("Geef woord 1: "))
string2 = str(input("Geef woord 2: "))
num = gemeen(string1, string2)
if num == 0:
print("Niks gemeen")
elif num == 1:
print("Eén teken gemeen")
else:
print(num, "tekens gemeen")
-
- Berichten: 1.336
Re: Python: fout in programma om strings te vergelijken
Dat had-ie ook al niet goed meegekopieerd, da's vreemd. Ik heb de code hierboven nog eens gezet, kan mijn OP irritant genoeg ook niet meer aanpassen.Xilvo schreef: ↑ma 06 mei 2024, 11:36 Wat is de bedoeling? Wat wordt precies bedoeld met 'overeenkomende tekens'?
Hoeveel overeenkomende tekens hebben "twee" en "twweede"? Is dat 3, een "w" en twee maal "e"?
Dit stukje klopt volgens mij al niet, je vergelijkt steeds de hele string.Als je dit doetCode: Selecteer alles
for i in range(lengte): if string1 == string2: aantal += 1 return aantal
vergelijk je steeds de tekens op dezelfde plaats in de string. Dat zal ook de bedoeling niet zijn.Code: Selecteer alles
for i in range(lengte): if string1[i] == string2[i]: aantal += 1 return aantal
Ik zie je punt overigens inderdaad, de string worden nu op dezelfde plaats vergeleken, dat gaat niet goed. Ook de volgorde van strings invoeren lijkt uit te maken, wat ook niet de bedoeling is; je zou met deze code eerst beide strings moeten verwisselen, wat omslachtig is. Ik begrijp nu in elk geval waarom de uitwerking van de opgave het over een andere boeg gooit.
- Moderator
- Berichten: 10.632
Re: Python: fout in programma om strings te vergelijken
Je zou van een van de strings de unieke letter moeten bepalen (van "twee" dus "t", "w", "e") en dan van ieder van die letters kijken hoe vaak ze in iedere string voorkomen. Dat gaat makkelijk met "set" maar zelf programmeren is misschien leerzamer.
Steeds het minimum van die aantallen nemen en optellen.
Gebruik ook zoveel mogelijk wat Python biedt, dus in plaats van
dit:
Steeds het minimum van die aantallen nemen en optellen.
Gebruik ook zoveel mogelijk wat Python biedt, dus in plaats van
Code: Selecteer alles
if len(string1) < len(string2):
lengte = len(string1)
else:
lengte = len(string2)
Code: Selecteer alles
lengte=min(len(string1),len(string2))
-
- Berichten: 7.081
Re: Python: fout in programma om strings te vergelijken
@flappelap: Mocht je in de toekomst vaker dit soort vragen willen stellen, zorg er dan voor dat het stukje code dat je post jouw probleem daadwerkelijk toont. Als ik nu jouw voorbeeld van "een" en "twee" ingeef dan krijg ik niet wat je beweert.
Daarbij is het vaak ook handig om de oorspronkelijke vraag te posten. Een deel van het probleem hier is dat jij iets anders aan het doen bent dan de opgave vraagt.
Daarbij is het vaak ook handig om de oorspronkelijke vraag te posten. Een deel van het probleem hier is dat jij iets anders aan het doen bent dan de opgave vraagt.
Schrijf een functie die twee strings krijgt als parameters. De functie retourneert het aantal tekens dat de strings gemeen hebben. Ieder teken wordt slechts eenmalig geteld, bijvoorbeeld, de strings "een" en "peer" hebben slechts één teken gemeen(de letter “e”). Je mag hoofdletters zien als verschillend van kleine letters.
Code: Selecteer alles
def numberOfSharedCharacters(string1, string2):
return len(set(string1).intersection(set(string2)))
string1 = str(input("Geef woord 1: "))
string2 = str(input("Geef woord 2: "))
num = numberOfSharedCharacters(string1, string2)
print("Aantal gedeelde tekens is", num)
-
- Berichten: 1.336
Re: Python: fout in programma om strings te vergelijken
Dank. Ja, ik probeer nog teveel om zelf zaken te programmeren in plaats van gebruik te maken van de functionaliteit van Python.Xilvo schreef: ↑ma 06 mei 2024, 12:03 Je zou van een van de strings de unieke letter moeten bepalen (van "twee" dus "t", "w", "e") en dan van ieder van die letters kijken hoe vaak ze in iedere string voorkomen. Dat gaat makkelijk met "set" maar zelf programmeren is misschien leerzamer.
Steeds het minimum van die aantallen nemen en optellen.
Gebruik ook zoveel mogelijk wat Python biedt, dus in plaats vandit:Code: Selecteer alles
if len(string1) < len(string2): lengte = len(string1) else: lengte = len(string2)
Code: Selecteer alles
lengte=min(len(string1),len(string2))
-
- Berichten: 1.336
Re: Python: fout in programma om strings te vergelijken
Ik heb de opgave niet letterlij gequote, maar "In één van de opgaven (8.2) moet je een programma schrijven dat twee strings vergelijkt en het aantal overeenkomende tekens teruggeeft." is toch de strekking van de opgave? Dank voor je oplossing, ik was nog niet bekend met de intersection methode, maar ik wou het ook graag met eigen code proberen.EvilBro schreef: ↑ma 06 mei 2024, 12:49 @flappelap: Mocht je in de toekomst vaker dit soort vragen willen stellen, zorg er dan voor dat het stukje code dat je post jouw probleem daadwerkelijk toont. Als ik nu jouw voorbeeld van "een" en "twee" ingeef dan krijg ik niet wat je beweert.
Daarbij is het vaak ook handig om de oorspronkelijke vraag te posten. Een deel van het probleem hier is dat jij iets anders aan het doen bent dan de opgave vraagt.Schrijf een functie die twee strings krijgt als parameters. De functie retourneert het aantal tekens dat de strings gemeen hebben. Ieder teken wordt slechts eenmalig geteld, bijvoorbeeld, de strings "een" en "peer" hebben slechts één teken gemeen(de letter “e”). Je mag hoofdletters zien als verschillend van kleine letters.Code: Selecteer alles
def numberOfSharedCharacters(string1, string2): return len(set(string1).intersection(set(string2))) string1 = str(input("Geef woord 1: ")) string2 = str(input("Geef woord 2: ")) num = numberOfSharedCharacters(string1, string2) print("Aantal gedeelde tekens is", num)
- Moderator
- Berichten: 10.632
Re: Python: fout in programma om strings te vergelijken
De oplossing van EvilBro is natuurlijk prima maar je leert meer over de logica van programmeren als je het zelf programmeert.
Natuurlijk is het wel handig te weten dat andere, vaak kortere methodes, bestaan en waar je die kunt vinden.
-
- Berichten: 7.081
Re: Python: fout in programma om strings te vergelijken
Misschien? Het kan natuurlijk aan mij liggen, maar als ik jouw parafrasering lees dan krijg ik het idee dat de bedoeling is dat je de strings over elkaar heenlegt en dan kijkt naar alle plekken waar hetzelfde teken staat. Dit dacht ik ook terug te zien in jouw code. Dat bleek echter niet de bedoeling te zijn.
-
- Berichten: 1.336
Re: Python: fout in programma om strings te vergelijken
Ah, ok. Dat was niet de bedoeling inderdaad, en in de code deed ik dat ook onbedoeld fout.EvilBro schreef: ↑ma 06 mei 2024, 14:28Misschien? Het kan natuurlijk aan mij liggen, maar als ik jouw parafrasering lees dan krijg ik het idee dat de bedoeling is dat je de strings over elkaar heenlegt en dan kijkt naar alle plekken waar hetzelfde teken staat. Dit dacht ik ook terug te zien in jouw code. Dat bleek echter niet de bedoeling te zijn.
- Moderator
- Berichten: 4.141
Re: Python: fout in programma om strings te vergelijken
Ik zou je eigenlijk wel aanraden om functionaliteit van Python te gebruiken vanaf het begin. Je algoritmes worden een stuk leesbaarder hierdoor, en je komt er later ook sneller op om zelf te gebruiken als je het al van begin af aan gebruikt. Je leert zelfs denken in sets, dictionaries en andere concepten die later zeer nuttig blijken te zijn.
- Moderator
- Berichten: 10.632
Re: Python: fout in programma om strings te vergelijken
Ik denk dat je beide moet doen. Natuurlijk is het handiger, sneller en (soms) leesbaarder als je ingebouwde functionaliteit van python, numpy etc. gebruikt.physicalattraction schreef: ↑di 07 mei 2024, 19:34 Ik zou je eigenlijk wel aanraden om functionaliteit van Python te gebruiken vanaf het begin. Je algoritmes worden een stuk leesbaarder hierdoor, en je komt er later ook sneller op om zelf te gebruiken als je het al van begin af aan gebruikt. Je leert zelfs denken in sets, dictionaries en andere concepten die later zeer nuttig blijken te zijn.
Maar je leert eerst programmeren door eerst allerlei probleempjes met elementaire bewerkingen uit te voeren.
Niet voor niets zie je vaak opgaven als worteltrekken met de methode van Newton, hoewel iedere taal wel een ingebouwde opdracht voor worteltrekken kent.