Forum >> Principianti >> SyntaxError: invalid syntax

Pagina: 1

:confused:

prima di tutto: un saluto a tutti da Vicenza (non trovo un posto "presentazioni", non c'è in questo forum?)!

sono un ormai "old-nerd" che si sta pian piano riavvicinando al mondo della programmazione (anni fa quando ero ancora alle superiori e poco dopo ho fatto qualcosina in turbo pascal, assembly z80, e poco poco in basic o lisp per autocad) per provare a trovare un nuovo sbocco occupazionale inerente ai miei vecchi studi di elettronica....

ho installato l'idle Python 3.5.1 e sto provando a scrivere un pò di codice e a fare il debug.
ho però un pò di problemi poichè la guida che sto seguendo è sicuramente vecchia (un file pdf trovato in rete: HowToThink_ITA), ma almeno in italiano (ormai ho carenze notevoli con l'inglese...) e trovo qualche incongruenza di sintassi a ripetere gli esempi della guida nell'idle installato...

però a complicare le cose è anche l'ide stesso...lo stesso esempio debuggato e funzionante alle prime righe, se lo ripeto dopo un pò di righe mi esce "SyntaxError: invalid syntax"...e non capisco il motivo...prima funzionava e mi restituiva un risultato, poi mi restituisce errore...
ho anche provato a fare il restart shell, però ottengo sempre il solito errore...

i tutorial e l'help dell'idle mi servono poco o nulla...tutto in inglese ci capisco poco poco, e mi viene il panico a vedere quanti contenuti ci sono nell'help....


vi riporto l'esempio funzionante alle prime righe e riscritto e debuggato un pò di righe sottostanti (dopo altri esercizi di esempio), non + funzionante:


>>> import math
>>> def areacerchio(raggio):
       return math.pi*raggio**2

areacerchio(2)
SyntaxError: invalid syntax



grazie anticipato a chi mi risponderà/aiuterà capire e risolvere (spero)!





--- Ultima modifica di Doc77 in data 2016-04-13 12:00:36 ---

--- Ultima modifica di Doc77 in data 2016-04-13 12:01:47 ---
prima di tutto: un saluto a tutti da Vicenza (non trovo un posto "presentazioni", non c'è in questo forum?)!

Giusta osservazione...

vi riporto l'esempio funzionante alle prime righe e riscritto e debuggato un pò di righe sottostanti (dopo altri esercizi di esempio), non + funzionante:
>>> import math
>>> def areacerchio(raggio):
       return math.pi*raggio**2

areacerchio(2)
SyntaxError: invalid syntax


Ti ho già risposto nell'altro thread, è chiaro sia solo un problema di indentazione del codice.

Seguendo il tuo esempio, il codice dovrebbe essere:
>>> import math
>>> def areacerchio(raggio):
...     return math.pi*raggio**2
... 
>>> areacerchio(2)
12.566370614359172
Sicuramente non dividi la funzione con il richiamo della stessa.

Dopo aver inserito return math.pi*raggio**2 e dato l'invio, devi dare un altro invio in presenza dei "...", in modo da avere nuovamente ">>>" per inserire areacerchio(2), altrimenti ottieni l'errore che riporti.

Ciao.
Daniele
:ok:perfetto riprovato ora dopo i tuoi suggerimenti e tutto ok!

per piccole "cavolate" mi si era spenta la luce in fondo al tunnel...


ora finalmente una fioca luce si è riaccesa sul fondo del lungo tunnel da percorrere per la programmazione...

grazie mille per l'aiuto!

spero di non "disperdermi"....e riuscire a capirci qualcosa in "breve tempo" e riuscire ad implementare qualcosa di utile/interessante...

ora torno a leggere/studiare/esercitarmi con la guida in pdf...
ciao ;)




--- Ultima modifica di Doc77 in data 2016-04-13 16:40:57 ---
ora sto cercando di svolgere l'esercizio "area del cerchio" ma sto facendo un casotto assurdo e mi continua ad uscire l'errore di sintassi, oppure mando in "crash" l'idle facendolo printare una marea di volte un risultato e poi mi esce una sfilza di errori ....
:angry:

proverò + tardi a inserire il codice che sto cercando di "progettare" magari qualcuno mi indica gli errori?

ciao e buona serata....


--- Ultima modifica di Doc77 in data 2016-04-13 19:45:20 ---
:(

eccolo ci ho riprovato inutilmente....

>>> def dist2punti(xc,yc,xp,yp):
	dx=xp-xc
	dy=yp-yc
	disquad=dx**2+dy**2
	ris1=math.sqrt(disquad)
	return ris1
	raggio=dist2punti(xc,yc,xp,yp)
	def areacerchio(raggio):
		ris_area=math.pi*raggio**2
	def areacerchio2(xc,yc,xp,yp):
		raggio=dist2punti(xc,yc,xp,yp)
		risultato=areacerchio(raggio)
		return risultato

	
>>> areacerchio2(1,2,4,6)
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    areacerchio2(1,2,4,6)
NameError: name 'areacerchio2' is not defined
>>> 
:angry:
Stai facendo ancora lo stesso errore, sbagli l'indentazione. Il codice di per se non è sbagliato (a parte per un raggio=dist2punti(xc,yc,xp,yp) dopo return ris1 del quale non ho capito il senso e la mancanza di un return in areacerchio), ma è tutto indentato ad minchiam.

Abbandona la console interattiva in questo caso e scrivi il tuo script dentro un file. Il tuo codice corretto dovrà apparire così:
import math

def dist2punti(xc,yc,xp,yp):
    dx=xp-xc
    dy=yp-yc
    disquad=dx**2+dy**2
    ris1=math.sqrt(disquad)
    return ris1

def areacerchio(raggio):
    return math.pi*raggio**2

def areacerchio2(xc,yc,xp,yp):
    raggio=dist2punti(xc,yc,xp,yp)
    risultato=areacerchio(5)
    return risultato

print(areacerchio2(1,2,4,6))
Se tu continui ad inserire le successive def() dentro la prima, non otterrai mai quello che speri, ed infatti Python ti dice che non conosce la funzione che stai richiamando.

L'indentazione, questo è il tuo grosso problema in questo momento, studiala con più attenzione.

Cya
intanto grazie infinite per la risposta e l'aiuto.

però è "nà parola"....

io scrivo il codice in file txt con le indentazioni corrette, poi lo riporto in idle (per provare il programmino realizzato) e comunque mi ripete il messaggio syntax error al successivo invio.... :(


ok ho riscritto tutto e finalmente non mi restituisce + il syntaxerror.
tuttavia il programmino non svolge l'operazione desiderata
>>> import math
>>> def dis2punti(xc,yc,xp,yp):
	dx=xp-xc
	dy=yp-yc
	disquad=dx**2+dy**2
	ris1=math.sqrt(disquad)

	
>>> def areacerchio(raggio):
	return math.pi*raggio**2

>>> def areacerchio2(xc,yc,xp,yp):
	raggio=dis2punti(xc,yc,xp,yp)
	risultato=areacerchio(raggio)
	return risultato

>>> areacerchio2(1,2,4,6)
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    areacerchio2(1,2,4,6)
  File "<pyshell#26>", line 3, in areacerchio2
    risultato=areacerchio(raggio)
  File "<pyshell#21>", line 2, in areacerchio
    return math.pi*raggio**2
TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'int'
>>> 
;(
è inutile non riesco!
sto cercando di fare l'esempio del testo pdf (pag 70) che sto seguendo, ma non mi funziona un tubo nell'idle....

;(


--- Ultima modifica di Doc77 in data 2016-04-15 16:38:53 ---
e finalmente sono riuscito a concludere qualcosa!!!!

>>> raggio=dis2punti
>>> import math
>>> def dis2punti(xc,yc,xp,yp):
	dx=xp-xc
	dy=yp-yc
	ris1=math.sqrt(dx**2+dy**2)
	return ris1

>>> raggio=dis2punti
>>> def areacerchio(raggio):
	ris2=math.pi*raggio**2
	return ris2

>>> def areacerchio2(xc,yc,xp,yp):
	return areacerchio(dis2punti(xc,yc,xp,yp))

>>> areacerchio2(1,2,4,6)
78.53981633974483
>>> 
:embarrassed:


Pagina: 1



Esegui il login per scrivere una risposta.