添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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?

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!

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"

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

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.

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.

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.

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)

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?

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.

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

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".