[LÖST]variabel += 1 blir "invalid syntax" i Python

Här diskuteras programmering och utveckling
viper
Inlägg: 394
Blev medlem: 22 nov 2009, 16:41
OS: Ubuntu
Utgåva: 20.04 Focal Fossa LTS
Ort: Torslanda

[LÖST]variabel += 1 blir "invalid syntax" i Python

Inlägg 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?
Senast redigerad av 1 viper, redigerad totalt 6 gånger.
Oortodox generalist
1 x 20.04 Desktop, 2 x 18.04 Desktop, 2 x 18.04 Server
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: variabel += 1 blir "invalid syntax" i Python

Inlägg av David Andersson »

Kan du visa mer av programmet? Jag misstänker att felet är i if-satsen eller tidigare.
viper
Inlägg: 394
Blev medlem: 22 nov 2009, 16:41
OS: Ubuntu
Utgåva: 20.04 Focal Fossa LTS
Ort: Torslanda

Re: variabel += 1 blir "invalid syntax" i Python

Inlägg 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
Oortodox generalist
1 x 20.04 Desktop, 2 x 18.04 Desktop, 2 x 18.04 Server
viper
Inlägg: 394
Blev medlem: 22 nov 2009, 16:41
OS: Ubuntu
Utgåva: 20.04 Focal Fossa LTS
Ort: Torslanda

Re: variabel += 1 blir "invalid syntax" i Python

Inlägg av viper »

Hoppsan!
En hakparantes fattas i slutet av IF-satsen :-[

Men visst borde en saknad hakparantes generera ett syntax error, eller?!
Oortodox generalist
1 x 20.04 Desktop, 2 x 18.04 Desktop, 2 x 18.04 Server
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: variabel += 1 blir "invalid syntax" i Python

Inlägg 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.
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: variabel += 1 blir "invalid syntax" i Python

Inlägg 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. :)
viper
Inlägg: 394
Blev medlem: 22 nov 2009, 16:41
OS: Ubuntu
Utgåva: 20.04 Focal Fossa LTS
Ort: Torslanda

Re: variabel += 1 blir "invalid syntax" i Python

Inlägg 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". ;)
Oortodox generalist
1 x 20.04 Desktop, 2 x 18.04 Desktop, 2 x 18.04 Server
Skriv svar

Återgå till "Programmering och webbdesign"