28 svar
416 visningar
villsovaa är nöjd med hjälpen
villsovaa 911
Postad: 30 sep 2021 21:41

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?

Smutstvätt 23802 – Moderator
Postad: 30 sep 2021 21:59

Vad gör koden nu? Vad får du för fel? Finns det mer kod i programmet? :)

villsovaa 911
Postad: 30 sep 2021 22:00
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 Online 28552
Postad: 30 sep 2021 22:17

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

villsovaa 911
Postad: 30 sep 2021 22:18
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. 

villsovaa 911
Postad: 30 sep 2021 22:22
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 Online 28552
Postad: 30 sep 2021 22:24

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?

villsovaa 911
Postad: 30 sep 2021 22:25
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 Online 28552
Postad: 30 sep 2021 22:29

Det jag tänkte fungerar inte, så det spelar ingen roll.

Men skriv ut utan end="" så du ser vad de olika utskrifterna ger.

villsovaa 911
Postad: 30 sep 2021 22:31
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. 

Laguna Online 28552
Postad: 30 sep 2021 22:32

Nu vet jag varken vad du har gjort eller vad resultatet är.

villsovaa 911
Postad: 30 sep 2021 22:35
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. 

Dr. G 9348
Postad: 30 sep 2021 22:57

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. 

Laguna Online 28552
Postad: 30 sep 2021 23:10
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.

Dr. G 9348
Postad: 30 sep 2021 23:33
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. 

Lindehaven 820 – Lärare
Postad: 1 okt 2021 14:59

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.

Laguna Online 28552
Postad: 1 okt 2021 15:44
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)

villsovaa 911
Postad: 2 okt 2021 18:51
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?

villsovaa 911
Postad: 3 okt 2021 19:09

bump

Laguna Online 28552
Postad: 3 okt 2021 19:13

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?

villsovaa 911
Postad: 3 okt 2021 19:18 Redigerad: 3 okt 2021 19:18
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 Online 28552
Postad: 3 okt 2021 19:22

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.

villsovaa 911
Postad: 3 okt 2021 19:33
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å?

Laguna Online 28552
Postad: 3 okt 2021 19:35

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.

villsovaa 911
Postad: 3 okt 2021 20:41
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?

Laguna Online 28552
Postad: 3 okt 2021 20:44

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?

villsovaa 911
Postad: 3 okt 2021 20:51
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:)

Laguna Online 28552
Postad: 3 okt 2021 22:09

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.

Lindehaven 820 – Lärare
Postad: 4 okt 2021 08:17
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".

Svara Avbryt
Close