strängar
Hej, har skrivit följande program:
mening = input("Mata in din rövarmening: ")
konsonanter = "bcdfghjklmnpqrstvwxz "
#for i in mening:
if konsonanter + "o" + konsonanter in mening:
print(mening.replace(konsonanter + "o" + konsonanter, konsonanter), end = "")
Vill alltså att konsonant + o + konsonant ska ersättas med endast en av konsonanterna, men min kod funkar inte. Vad gör jag för fel?
Vad gör koden nu? Vad får du för fel? Finns det mer kod i programmet? :)
Smutstvätt skrev:Vad gör koden nu? Vad får du för fel? Finns det mer kod i programmet? :)
ingenting skrivs ut. Detta är den enda koden!
Du testar alltså i praktiken
if "bcdfghjklmnpqrstvwxz obcdfghjklmnpqrstvwxz " in mening
Tycker du det ska vara sant? Det det betyder är att hela den strängen förekommer i 'mening'.
Laguna skrev:Du testar alltså i praktiken
if "bcdfghjklmnpqrstvwxz obcdfghjklmnpqrstvwxz " in mening
Tycker du det ska vara sant? Det det betyder är att hela den strängen förekommer i 'mening'.
men hur ska jag göra istället då? Själva grejen med en sträng är att jag ska kunna plocka ut tecken från den.
Laguna skrev:Du testar alltså i praktiken
if "bcdfghjklmnpqrstvwxz obcdfghjklmnpqrstvwxz " in mening
Tycker du det ska vara sant? Det det betyder är att hela den strängen förekommer i 'mening'.
Skrev detta istället:
for i in mening:
if i in konsonanter:
if i + "o" + i in mening:
print(mening.replace(i + "o" + i, i), end = "")
Det jag får ut nu är rätt men det dubbleras, dvs om jag skriver in "hohejoj" så får jag ut "hejojhejojhohejhohej"
Nu skriver du ut alla mellanresultat, utan radbyte, så det är svårt att se vad som händer. Vad får du om du skriver ut mening bara en gång, på slutet?
Laguna skrev:Nu skriver du ut alla mellanresultat, utan radbyte, så det är svårt att se vad som händer. Vad får du om du skriver ut mening bara en gång, på slutet?
förlåt, nu fårstår jag inte :()
Det jag tänkte fungerar inte, så det spelar ingen roll.
Men skriv ut utan end="" så du ser vad de olika utskrifterna ger.
Laguna skrev:Det jag tänkte fungerar inte, så det spelar ingen roll.
Men skriv ut utan end="" så du ser vad de olika utskrifterna ger.
Ser att den tar sig igenom varje konsonant. Hur förhindrar man det? Har tagit bort range nu, istället för mening skrev jag 1.
Nu vet jag varken vad du har gjort eller vad resultatet är.
Laguna skrev:Nu vet jag varken vad du har gjort eller vad resultatet är.
mening = input("Mata in din rövarmening: ")
konsonanter = "bcdfghjklmnpqrstvwxz "
for i in range(1):
for i in konsonanter:
if i + "o" + i in mening:
print(mening.replace(i + "o" + i, i))
Om jag skriver "hohejoj" nu får jag ut:
"hejoj
hohej"
den liksom går igenom varje konsonant och behåller föregående konsonant+o+konsonant när den går igenom nästa konstellation.
Du ska gå igenom bokstäverna i mening.
Är den aktuella bokstaven är en konsonant?
Om ja, byt ut den mot bokstav + o + bokstav.
Printa kan du göra efter loopen.
Dr. G skrev:Du ska gå igenom bokstäverna i mening.
Är den aktuella bokstaven är en konsonant?
Om ja, byt ut den mot bokstav + o + bokstav.
Printa kan du göra efter loopen.
Nej, jag tror det är tvärtom, den ska översätta tillbaka.
Laguna skrev:Nej, jag tror det är tvärtom, den ska översätta tillbaka.
Aha, det ser jag nu. Då blir det ju lite annorlunda.
Det finns flera lösningar till detta, här är pseudo-kod till en av dessa.
Låt svaret vara tomt.
MEDAN det finns bokstäver i meningen, repetera då följande:
Utöka svaret med den första bokstaven i meningen.
OM meningen har tre bokstäver eller fler OCH
andra bokstaven i meningen är ett 'o' OCH
första bokstaven i meningen är en konsonant OCH
första bokstaven i meningen är samma som tredje bokstaven i meningen, gör då följande:
Ta bort de första tre bokstäverna från meningen.
ANNARS, gör då följande:
Ta bort den första bokstaven från meningen.
Du kan även behöva ta hänsyn till versaler och gemener i meningen.
villsovaa skrev:Laguna skrev:Nu vet jag varken vad du har gjort eller vad resultatet är.
mening = input("Mata in din rövarmening: ") konsonanter = "bcdfghjklmnpqrstvwxz " for i in range(1): for i in konsonanter: if i + "o" + i in mening: print(mening.replace(i + "o" + i, i))
Om jag skriver "hohejoj" nu får jag ut:
"hejoj
hohej"den liksom går igenom varje konsonant och behåller föregående konsonant+o+konsonant när den går igenom nästa konstellation.
Lindehavens pseudokod är säkert bra, men jag ska se om man kan reparera den här koden. Till att börja med gör for i in range(0)
ingenting, den gör att du kör resten en gång, vilket skulle ske även utan den raden.
mening.replace byter ut och returnerar resultatet, men den ändrar inte originalsträngen. Så ingenting händer med 'mening'. Du kan göra så här:
mening = mening.replace(i + "o" + i, i)
Laguna skrev:villsovaa skrev:Laguna skrev:Nu vet jag varken vad du har gjort eller vad resultatet är.
mening = input("Mata in din rövarmening: ") konsonanter = "bcdfghjklmnpqrstvwxz " for i in range(1): for i in konsonanter: if i + "o" + i in mening: print(mening.replace(i + "o" + i, i))
Om jag skriver "hohejoj" nu får jag ut:
"hejoj
hohej"den liksom går igenom varje konsonant och behåller föregående konsonant+o+konsonant när den går igenom nästa konstellation.
Lindehavens pseudokod är säkert bra, men jag ska se om man kan reparera den här koden. Till att börja med gör
for i in range(0)
ingenting, den gör att du kör resten en gång, vilket skulle ske även utan den raden.mening.replace byter ut och returnerar resultatet, men den ändrar inte originalsträngen. Så ingenting händer med 'mening'. Du kan göra så här:
mening = mening.replace(i + "o" + i, i)
Tack för svaren. Har följande kod nu:
mening = input("Mata in din rövarmening: ")
konsonanter = "bcdfghjklmnpqrstvwxz "
for i in konsonanter:
if i in mening:
mening = mening.replace(i + "o" + i, i)
print(mening)
else:
print("fel")
Den delen fram till "print(mening)" funkar nu, men jag vill ju göra så att den säger "fel" när man skrivit in fel rövarmening. Varför funkar det inte nu?
bump
Om du ska ha "else" måste du ha en "if" tidigare på samma nivå.
Kan du beskriva i ord när det inte är en rövarmening?
Laguna skrev:Om du ska ha "else" måste du ha en "if" tidigare på samma nivå.
Kan du beskriva i ord när det inte är en rövarmening?
Vad jag har förstått av uppgiften så är det inte en rövarmening när det inte är konsonant + o + samma konsonant. Men jag menar det kan ju finnas namn som är så? Tex Lollo? Det är ju inte en rövarmening, men uppfyller ändå kravet? Antar att det ska vara så för alla konsonanter. Hursomhelst, ifall man bortser från det, hur gör man då? Följande är där jag ligger nu:
mening = input("Mata in din rövarmening: ")
konsonanter = "bcdfghjklmnpqrstvwxz "
for i in konsonanter:
if i + "o" + i not in mening:
print("felaktig rövarmening")
else:
mening = mening.replace(i + "o" + i, i)
print("din originalmening är: " + mening)
Men det verkar ändå inte funka. Jag blir galen.
Nej, "else" kan du som sagt inte ha på det viset. Vad menar du att det där betyder?
Om du modifierar koden du hade förra gången så att den dels bara gör utbytet om det är i+"o"+i som den har hittat, dels kommer ihåg att det blev ett utbyte, så kan du kolla efteråt om det blev nåt utbyte.
for i in konsonanter:
if i + "o" + i in mening:
print(mening.replace(i + "o" + i, i))
for i in konsonanter:
if i + "o" + i not in mening:
print("fel")
Det här är det jag kommer fram till. Problemet är att det printar "fel" för alla konsonanter. Ligger problemet i "for i in konsonanter" då?
Tolererar python verkligen den där indenteringen?
Problemet med koden är att den säger att det är fel så fort det är någon konsonant som inte förekommer. Den ska ge fel bara om ingen konsonant förekommer.
Laguna skrev:Tolererar python verkligen den där indenteringen?
Problemet med koden är att den säger att det är fel så fort det är någon konsonant som inte förekommer. Den ska ge fel bara om ingen konsonant förekommer.
Det är därför jag föredrar
mening = input("Mata in din rövarmening: ")
konsonanter = "bcdfghjklmnpqrstvwxz "
for i in konsonanter:
if i + "o" + i not in mening:
print("felaktig rövarmening")
else:
mening = mening.replace(i + "o" + i, i)
print("din originalmening är: " + mening)
som ju inte funkade, men som ändå är steget närmare? Eller?
Gå tillbaka till koden som fungerade, så ska vi lägga till logiken som säger att strängen inte är en rövarmening.
Hur såg den ut?
Laguna skrev:Gå tillbaka till koden som fungerade, så ska vi lägga till logiken som säger att strängen inte är en rövarmening.
Hur såg den ut?
Ok så här:
Följande kod ger mig rätt översättning från rövarmening:
for i in konsonanter:
if i in mening:
mening = mening.replace(i + "o" + i, i)
print("din originalmening är: " + mening)
Jag vill att den ger mig fel om jag matar in fel. Än så länge är jag med:)
Vi vill veta om vi verkligen bytte ut nånting. Det enklaste sättet är nog att spara originalvärdet på 'mening' i en variabel och jämföra med 'mening' på slutet.
villsovaa skrev:Jag vill att den ger mig fel om jag matar in fel. Än så länge är jag med:)
Ge ett exempel på ett sådant fel och vad du vill att programmet ska "ge".