1 van 2
working with strings -python
Geplaatst: vr 14 okt 2016, 14:45
door katrien van den boss
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
Re: working with strings -python
Geplaatst: vr 14 okt 2016, 15:13
door katrien van den boss
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)
Re: working with strings -python
Geplaatst: vr 14 okt 2016, 20:38
door Emveedee
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?
Re: working with strings -python
Geplaatst: za 15 okt 2016, 20:09
door Xenion
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.
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 02:46
door Benm
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
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 04:19
door Emveedee
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"
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 09:22
door katrien van den boss
Beste, zou u mij dan een beetje op weg kunnen helpen?
@emveedee?
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 11:13
door Emveedee
Heb je het voorbeeldje in mijn eerste bericht gezien? Kun je uitleggen waarom sommige indices wel werken en andere niet?
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 13:02
door katrien van den boss
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
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 13:16
door Emveedee
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 aoo
sgl
2: y luaeb h o dtyo
aoosgl
3: y luaeb h o dt
yo aoosgl
Met welke indices kun je die drie letters het makkelijkste vinden? Hint: probeer gebruik te maken van de startletter en sprong
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 14:10
door Benm
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
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.
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 14:24
door Emveedee
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.
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 15:13
door katrien van den boss
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
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 15:21
door Emveedee
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?
Re: working with strings -python
Geplaatst: zo 16 okt 2016, 15:27
door katrien van den boss
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..