Python oefening mysterieuze slogan

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • ana567890
  • Registratie: Oktober 2020
  • Laatst online: 20-10-2020
Mijn vraag
Afbeeldingslocatie: https://tweakers.net/i/95M3NacBacctu-7HFa4Yq7yDsQI=/800x/filters:strip_exif()/f/image/tdsimSNxlKPv2C7Qt3rWa3hq.png?f=fotoalbum_large

In bijlage vind je de opdracht. Ik snap niet goed waarom m'n code niet werkt. Ik heb al geprobeerd de 23 weg te laten, maar dan krijg ik enkel 'say hel'.
...

Relevante software en hardware die ik gebruik
PYTHON
...

Wat ik al gevonden of geprobeerd heb
Mijn code is:

x = str(input("geef de misterieuze slagan "))
#y luaeb h o dtyo aoosgl => 23
p = int(input("startpositie p in de slaogan "))
s = int(input("startpgrootte s in de slaogan "))

print(x[p::s])
...

Alle reacties


Acties:
  • +1 Henk 'm!

  • ydderf
  • Registratie: December 2017
  • Laatst online: 20:01
Je loopt nu maar 1x de input van achter naar voor door. In het voorbeeld doen ze dat meerdere keren.

P.s. Voor het posten van code, kun je het beste de code tags gebruiken. Dan leest het wat makkelijker

Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat


Acties:
  • 0 Henk 'm!

  • ana567890
  • Registratie: Oktober 2020
  • Laatst online: 20-10-2020
@ydderf Bedankt voor je antwoord :)

Ahja dus ik gebruik het best een while loop om de code te herhalen tot het de juiste zin zegt. Hoe zorg ik er dan voor dat hij dit enkel doet tot het volledig woord gevonden en welke voorwaarde geef ik aan de loop?

< while print < 24:
print(x[p::s]) >

als ik dit doe krijg ik foutmelding


< a = x[p::s]
while a < 24:
print(a) >

Ook dan krijg ik foutmelding, heeft u nog tips voor de loop?

Acties:
  • +1 Henk 'm!

  • exydrax
  • Registratie: Oktober 2020
  • Laatst online: 19-10-2020
@ana567890 Kan je een verband zien tussen het aantal letters in de zin en het aantal sprongen dat er moeten gemaakt worden? Zoja, gebruik dan een begrensde iteratie(for loop) om over je originele zin te loopen. Elke iteratie(sprong) veranderd er iets aan de index.

Het enige waar je mee moet werken is de index. Er moet dus niks veranderen aan de originele zin.

Elke sprong veranderd de index van waarde (+ of - de stapgrootte). Wanneer de index een waarde heeft die groter is dan de lengte van de string kom je in de problemen: index out of range. Dat probleem ga je dus moeten oplossen.

Je weet dat index 25 == 2 wanneer de lengte van de string 23 is. Index 50 == 4. Wat heb je als je 50/23 doet?

Maak een nieuwe zin en vul het stap voor stap aan met het karakter dat op de huidige index staat.

Acties:
  • +2 Henk 'm!

  • ydderf
  • Registratie: December 2017
  • Laatst online: 20:01
Ik heb het vermoeden dat dit een schoolopdracht oid is. Dus verwacht niet de complete uitwerking als reactie....
Zelf ben ik ook geen scripting professional, maar de while loop zou een mogelijke oplossing kunnen zijn.

Om tot de juiste oplossing te komen, kun je beginnen met voor je zelf alle stappen op te schrijven. Ofwel stap voor stap zeggen (gewoon in woorden) hoe je dit zou oplossen. Probeer hierbij ook aan de details te denken.
Ga vervolgens voor elke stap een oplossing in code bedenken. Probeer dan ook weer je denk methode als comment toe te voegen.

Bijvoorbeeld:
Stap 1: Lees invoer
Stap 2: Bepaal lengte van invoer.
Stap 3: enz.

Dit kun je weer omzetten naar code:
Python:
1
2
x=str(input("geef de misterieuze slagan ")) #stap 1: Lees invoer
inputLength = len(x) #stap 2: Bepaal lengte van invoer


En bij je huidige code (welke dan niet werkt), probeer ook hier voor je zelf duidelijk te krijgen wat je doet in elke regel.

Python:
1
2
while print < 24: #zolang print < 24 dan       
print(x[p::s]) #print letter uit x, begin op pos "p" en vervolgens elke keer "s" opschuiven

Ik denk dat dit waarschijnlijk werkt niet omdat print een commando is en geen variabele.

Python:
1
2
3
a = x[p::s] #A = letter uit x, begin op pos "p" en vervolgens elke keer "s" opschuiven
while a < 24: #zolang a < 24 doe:
print(a)  #geef a weer

Kijk hier kritisch naar het resultaat van print. Hoe vaak wordt die weergegeven en welke waarde geeft die?

Edit: Ik vond hem zelf ook wel leuk om te doen, en heb een oplossing voor elkaar gekregen. Wat ook handig kan zijn, is om tussendoor in je code ook wat te debuggen. (dus als je bijv. de lengte hebt bepaald, print dan ook ff de lengte om te controleren of deze overeenkomt met wat je verwacht)

[ Voor 8% gewijzigd door ydderf op 18-10-2020 15:29 ]

Soms gaat het niet zoals het moet, maar moet het maar zoals het gaat


Acties:
  • 0 Henk 'm!

  • ana567890
  • Registratie: Oktober 2020
  • Laatst online: 20-10-2020
Oke super, bedankt voor alle hulp @ydderf @exydrax ! Ik zal nog wat verder proberen :)

Acties:
  • +1 Henk 'm!

  • 0xDEADBEEF
  • Registratie: December 2003
  • Niet online
De functie zal er ongeveer als volgt uitzien, op elke regel met '# ...' hoort code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
s = 'y luaeb h o dtyo aoosgl'
size = len(s)

def f(p):
# ...
# ...

    while i >= 0:
# ...
# ...

# ...
# ...
# ...
# ...
# ...
# ...

    print(...)

f(s)

[ Voor 8% gewijzigd door 0xDEADBEEF op 18-10-2020 19:37 ]

"Religion is an insult to human dignity. With or without it you would have good people doing good things and evil people doing evil things. But for good people to do evil things, that takes religion." - Steven Weinberg

Pagina: 1