Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

working with strings -python

Beste, 

Ik moet een programma schrijven zodat wanneer we de volgende zin inlezen er een nieuwe zin wordt gevormd:
deze zin start bij de indexering van de letter -3 en telt altijd 3 plaatsen af..
Ik weet eignelijk niet zo goed hoe ik hier aan moet beginnen? kan iemand me op wegzetten..
ik weet wel dat ik wrsch zal moeten werken met de range of met enumarate maar ik snap niet zo goed hoe ik dit concreet omet doen in dit voorbeeld
 
y luaeb h o dtyo aoosgl

-3

-3
(de zin wordt in dit geval say hello to good buy)
 
MVG

Katrien Van den Bossche
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: working with strings -python

dit is al wat ik heb.. maar het klopt niet echt ik dacht te werken met die extended slicing (heb het hoofdstuk wel gelezen maar snap nie zo goed hoe ik het tot uivoer moet brengen)
#zin inlezen
zin = input()
startletter = input()
n = int(startletter)
sprong = input()
x = int(sprong)
 
 
 
#regels één voor één inlezen en letters eruit filteren
for karakter in zin:
#de zin begint met de index waar het getal -3 staat dus:
    code = zin[n] 
    x = n + x
    zin[n+x] 
    print(code)
Emveedee
Artikelen: 0
Berichten: 703
Lid geworden op: do 08 jan 2009, 20:52

Re: working with strings -python

Snap je hoe je characters in een string kan opvragen? 
 
Kijk eens naar dit voorbeeldje:

Code: Selecteer alles

zin = "dit is een test"
for i in range(-20,20):

try:

  print(i,zin[i])

except IndexError as e:

  print(e, i)
Kun je uitleggen waarom het soms fout gaat? Welke indices zijn dus geldig, en welke niet?
Gebruikersavatar
Xenion
Artikelen: 0
Berichten: 2.609
Lid geworden op: za 21 jun 2008, 10:41

Re: working with strings -python

Kan je de lijst opbouwen met de juiste indexen? Dus starten op het juiste getal en dan met de juiste stapgrootte.
Dan is het gewoon een kwestie van door die lijst te gaan en de karakters op de indexen op te zoeken en aan een resultaat te appenden.
Benm
Artikelen: 0
Berichten: 12.262
Lid geworden op: za 21 okt 2006, 01:23

Re: working with strings -python

Dat lijkt me ook, je kunt bijvoorbeeld iets met een array uithalen: Je splits de string in een array met in ieder element 1 opvolgend karakter uit de input. 
 
Vervolgens doe je iets als 

Code: Selecteer alles

for ($k=3; $k<0; $k--)
{
  for (i=count($aArray)-3; i<count($aArray); i=i-3)
   {
     $output.=$aArray[$i + $k];  
   }
}
.. details en omzetten naar python syntax ter verdere oefening van de lezer ;)
Victory through technology
Emveedee
Artikelen: 0
Berichten: 703
Lid geworden op: do 08 jan 2009, 20:52

Re: working with strings -python

Sorry, maar je maakt het veel te moeilijk. In python kun je de karakters uit een string gewoon opvragen zonder dat je er een array van hoeft te maken. Verder kun je dit probleem makkelijk oplossen met slechts één loop, als je begrijpt welke indices geldig zijn en handig de modulo operator gebruikt.

Ik moest je code 5x lezen voor ik doorhad hoe het werkt, niet echt zen ;)
The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!
P.S. het antwoord is "say hello to a good buy" ;)
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: working with strings -python

Beste, zou u mij dan een beetje op weg kunnen helpen?

@emveedee?
Emveedee
Artikelen: 0
Berichten: 703
Lid geworden op: do 08 jan 2009, 20:52

Re: working with strings -python

Heb je het voorbeeldje in mijn eerste bericht gezien? Kun je uitleggen waarom sommige indices wel werken en andere niet?
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: working with strings -python

Ik denk dat dat niet zal gaan omdat er 21 karakters zijn..

Maar ik snap niet goed hoe ik die cijfers moet koppelen met die woorden ik snap wel dat die indices kunnen voorgesteld worden in een zin met die [] maar ik snap niet goed hoe ik concreet dit voorbeeld moet uitwerken
Emveedee
Artikelen: 0
Berichten: 703
Lid geworden op: do 08 jan 2009, 20:52

Re: working with strings -python

Als je dat scriptje runt, krijg je deze output:
 

Code: Selecteer alles

string index out of range -20
string index out of range -19
string index out of range -18
string index out of range -17
string index out of range -16
-15 d
-14 i
-13 t
-12 
-11 i
-10 s
-9 
-8 e
-7 e
-6 n
-5 
-4 t
-3 e
-2 s
-1 t
0 d
1 i
2 t
3 
4 i
5 s
6 
7 e
8 e
9 n
10 
11 t
12 e
13 s
14 t
string index out of range 15
string index out of range 16
string index out of range 17
string index out of range 18
string index out of range 19
 
Zoals je ziet, het eerste karakter uit de zin kun je opvragen met zin[0], de tweede met zin[1], etc. De laatste kun je opvragen met zin[-1], de voorlaatste met zin[-2], etc. Zodra je zin[15] probeert krijg je een error, want er is geen 16e karakter in de zin. Hetzelfde met zin[-16], de string index is dan 'out of range' zoals de error zegt.
 
Als we kijken naar jouw opdracht:
y luaeb h o dtyo aoosgl
 
Ik geef met bold even de letters aan die je wil hebben:
1: y luaeb h o dtyo aoosgl
2: y luaeb h o dtyo aoosgl
3: y luaeb h o dtyo aoosgl
 
Met welke indices kun je die drie letters het makkelijkste vinden? Hint: probeer gebruik te maken van de startletter en sprong ;)
Benm
Artikelen: 0
Berichten: 12.262
Lid geworden op: za 21 okt 2006, 01:23

Re: working with strings -python

Emveedee schreef: Sorry, maar je maakt het veel te moeilijk. In python kun je de karakters uit een string gewoon opvragen zonder dat je er een array van hoeft te maken. Verder kun je dit probleem makkelijk oplossen met slechts één loop, als je begrijpt welke indices geldig zijn en handig de modulo operator gebruikt.

Ik moest je code 5x lezen voor ik doorhad hoe het werkt, niet echt zen ;)

P.S. het antwoord is "say hello to a good buy" ;)
 
Tja, meer Zend dan Zen :D
 
Maar hoe ga je dit met 1 loop doen? Die modulo-oplossing wil ik toch wel zien, ook in gevallen waarbij de lengte deelbaar door 3 is. 
 
Dat je posities in een string direct kunt lezen is overigens wel  handig, dat zou ik zeker gebruiken. In php kan het ook (al weet in niet of het unicode safe is), in c kan het eigenlijk niet. 
Victory through technology
Emveedee
Artikelen: 0
Berichten: 703
Lid geworden op: do 08 jan 2009, 20:52

Re: working with strings -python

Zie je PB. Als Katrien een antwoord heeft gevonden wil ik mijn oplossing ook wel hier posten. Overigens, volgens mij werkt deze methode van 'encryptie' juist omdat de lengte van de string géén veelvoud van de stapgrootte is. Of zie ik daar iets over het hoofd?
 
Edit: 
Niet alleen geen veelvoud, ze moeten relatief priem zijn.
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: working with strings -python

Hallo,

Ja wat je tot nu toe zet begrijp ik..

Ik wou echter aan de staartletter bv n toekennen en aan de sprong X

Dus dan zou ik doen

For ... In ....

start = [x]

[X] = [X] + [n] ( voor het volgende karakter )

Start += start
Emveedee
Artikelen: 0
Berichten: 703
Lid geworden op: do 08 jan 2009, 20:52

Re: working with strings -python

Ok, dus elke stap in de loop tel je er de stapgrootte bij op, dat is prima. Let wel even op je syntax. Die haken gebruik je om een element uit een lijst op te vragen, [x] gaat python niet begrijpen.
 
Van waar tot waar moet je for loop gaan lopen?
 
Jouw zin is 23 tekens lang. Na een aantal stappen zal je x kleiner worden dan -23 en dan ga je dat karakter niet meer kunnen opvragen, wat doe je dan?
Gebruikersavatar
katrien van den boss
Artikelen: 0
Berichten: 257
Lid geworden op: wo 08 jun 2016, 11:56

Re: working with strings -python

Ja wel,

Zou u mij eerst al kunnen helpen hoe ik dan die syntax moet dan moet beschrijven.. [] wat er hier dan juist tussen moet staan..

Ja voor dat de Loop zou blijven doorlopen zou ik -23 gelijk stellen aan -1..

Terug naar “Informatica en programmeren”