Sida 1 av 1
[LÖST]variabel += 1 blir "invalid syntax" i Python
Postat: 05 feb 2011, 23:49
av viper
Är i färd med att lära mig grunderna i Python. Än så länge en mycket trevlig bekantskap!
Har dock stött på patrull i form av att en standardkodsnutt verkar driva med mig.
I det här fallet "variabel += 1":
Kod: Markera allt
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ch07e.py", line 179
count += 1
^
SyntaxError: invalid syntax
Inte ens det vanliga "variable = variabel + 1" fungerar
Kod: Markera allt
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ch07e.py", line 179
count = count + 1
^
SyntaxError: invalid syntax
Varför kan jag helt plötsligt inte räkna upp snurr-räknaren?
Raden är fö den enda raden under ett IF-villkor.
Vad kan det vara som jag inte ser?
Re: variabel += 1 blir "invalid syntax" i Python
Postat: 06 feb 2011, 00:01
av David Andersson
Kan du visa mer av programmet? Jag misstänker att felet är i if-satsen eller tidigare.
Re: variabel += 1 blir "invalid syntax" i Python
Postat: 06 feb 2011, 00:07
av viper
En av övningarna i kapitel 7 i "How to Think Like a Computer Scientist: Learning with Python v2nd Edition documentation" består i att räkna antalet förekomster av en substräng i en given sträng. Normalt kan jag ta fram koden med hjälp av en
Kod: Markera allt
if __name__ == '__main__':
import doctest
doctest.testmod()
i botten av modulen. Men i detta fallet går inte det enklaste igenom.
Kod: Markera allt
def countsub(sub, s):
count = 0
index = 0
while index < len(s):
if sub == s[index:index + len(sub):
count = count + 1
index += 1
return count
Re: variabel += 1 blir "invalid syntax" i Python
Postat: 06 feb 2011, 00:15
av viper
Hoppsan!
En hakparantes fattas i slutet av IF-satsen
Men visst borde en saknad hakparantes generera ett syntax error, eller?!
Re: variabel += 1 blir "invalid syntax" i Python
Postat: 06 feb 2011, 00:50
av David Andersson
viper skrev:
Men visst borde en saknad hakparantes generera ett syntax error, eller?
Japp, och det är precis vad python gjorde, eller hur?
Om ett uttryck omsluts av parenteser så kan det sträcka sig över flera rader. Python fortsatte helt enkelt att läsa uttrycket på nästa rad i förhoppningen att slutparentesen skulle finnas där, eller senare.
Re: variabel += 1 blir "invalid syntax" i Python
Postat: 06 feb 2011, 01:10
av David Andersson
viper skrev:
Kod: Markera allt
def countsub(sub, s):
count = 0
index = 0
while index < len(s):
if sub == s[index:index + len(sub):
count = count + 1
index += 1
return count
Du får förlåta att jag kikade lite på ditt program. Det ser rätt C-inspirerat ut, att explicit iterera över alla element/tecken i en lista/sträng, och att iterera med index i ställer för med en iterator. Det finns effektivare sätt.
Exempel 1. Låt 'find' söka, i stället för att leta själv.
Kod: Markera allt
def countsub(sub, s):
count = 0
index = s.find(sub)
while (index>=0):
count += 1
index = s.find(sub,index+1)
return count
Exempel 2. Låt 'split' söka efter alla förekomster på en gång. Resultatet är en lista i stället för ett nummer. Det nummer vi söker är egentligen antal mellanrum i listan, dvs dess längd minus 1.
Kod: Markera allt
def countsub(sub, s):
return len(s.split(sub))-1
Den sista, med 'split', ger inte alltid samma svar som de övriga varianterna av countsub. Ett exempel när svaret blir annorlunda sparas som övning åt läsaren.

Re: variabel += 1 blir "invalid syntax" i Python
Postat: 06 feb 2011, 19:51
av viper
David Andersson skrev:
Du får förlåta att jag kikade lite på ditt program. Det ser rätt C-inspirerat ut, att explicit iterera över alla element/tecken i en lista/sträng, och att iterera med index i ställer för med en iterator. Det finns effektivare sätt.
Ja, och det är dessa effektivare sätt jag måste få in i skallen, att använda funktionerna i string-modulen. Då skulle du sett mitt sätt att skriva i de första kapitlen.

Alldeles för mycket Basic, E+ och VbA genom åren.

Tack för tipset, David!
"Läsaren" sliter förtvivlat för att få ner antalet kodrader för att hitta alla substrängar när de går in i varandra, exv "ana" i "banana". 