Forum >> Principianti >> Operatore bit shifter

Pagina: 1 2 Avanti

Di nuovo salve a tutti...
imparando a utilizzare python avevo pensato di cimentarmi nella scrittura di una fft...

il mio iniziale problema in fase di compilazione si è rilevato l'operatore di bit shift, la riga imputata:

# modulo fft
from math import *	

def fft(m, f=[]): #genera fft
	result = []	 
    n=2<< ;(m-1)	
	nesp=0.5
	for k in range(1,m+1):....
l'errore:


>>> import fft

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "fft.py", line 6
n=2<< ;(m-1)
^
IndentationError: unindent does not match any outer indentation level


ma come può essere un errore di indentazione???
vi ringrazio in anticipo...









--- Ultima modifica di h in data 2015-07-07 20:19:29 ---

--- Ultima modifica di h in data 2015-07-07 20:19:55 ---
IndentationError: unindent does not match any outer indentation level

C'è sicuramente uno spazio malandrino che ti ha scombussolato il codice, ci punto un centesimo.

Cya
mi sono accorto che la mia domanda non aveva senso...
ho un errore di indentazione ma non capisco perchè...

l'intero codice:


# modulo fft

from math import *




def fft(m, f=[]): #genera fft

result = []

n=2<<(m-1)

nesp=0.5

for k in range(1,m+1):

d=n/(2<<(k-1)

nesp=nesp*2

s=0

for i in range(1,nesp+1):

r=s

z1=r>>(m-k)

z=0

for q in range(k):

z=(((z1>>q) & 01) | (z<<1)



w=2*pi*z/(2<<(k-1))

e=cos(w)-sin(w)j

for l in range (d):

r=l+s

r1=r+d

t=e*fr1

fr1=fr-t

fr=fr+t

s=s+2*d

#bitReversal(n, m, f=[])

for x in range(1, n-1):

y=0

for i in range(m):

y=(((x>>i) & 01) | (y<<1))

if x<y :

t=fx

fx=fy

fy=t

#Ampiezze fasi

nmezzi=n/2

for i in range(n):

f=f/nmezzi

A0=f0.real

phi0=0

for k in range(1, nmezzi+1):

Ak=sqrt(fk.real*fk.real+fk.imag*fk.imag])

result.append(Ak)

if fk.real == 0:

if fk.imag>0:

phik=pi

if fk.imag==0:

phik=0

if fk.imag<0:

phik=2*pi-pi/2

if fk.real>0:

if fk>=0:

phik=atan(fk.imag, fk.real)

if fk<0:

phik=2*pi + atan(fk.imag, fk.real)

if fk.real<0:

phik=atan(fk.imag, fk.real)

return result




mi sono accorto che la mia domanda non aveva senso...
ho un errore di indentazione ma non capisco perchè...
No h, così diventiamo matti nel leggere il codice.

Se non usi il pulsante apposito postalo su PasteBin e metti il link.

Cya
capito quale era il mio errore: l'indentazione era visivamente corretta ma ottenuta, per quell'unico rigo, con lo spazio invece che tramite tab... ho postato il codice su pastebin, perchè ho un errore di sintassi: http://pastebin.com/dKWyMGbi

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "fft.py", line 10

nesp=nesp*2

^

SyntaxError: invalid syntax


dove ho cercato di posizionare ^ sotto la p del primo nesp

Daniele sono nelle tue mani.
capito quale era il mio errore: l'indentazione era visivamente corretta ma ottenuta, per quell'unico rigo, con lo spazio invece che tramite tab... ho postato il codice su pastebin, perchè ho un errore di sintassi: http://pastebin.com/dKWyMGbi

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "fft.py", line 10

nesp=nesp*2

^

SyntaxError: invalid syntax


dove ho cercato di posizionare ^ sotto la p del primo nesp

Daniele sono nelle tue mani.
Guarda la riga immediatamente precedente a quella che ti viene segnalata come errata...
THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Come ti ha suggerito C8E, guarda con attenzione il tuo codice.

Contiene una moltitudine di indentazioni diverse, passando da spazi a TAB. Con Python devi essere preciso nella scrittura e non lasciare spazi e TAB a caso. Dopo il primo result=[] dai un tab e uno spazio a fine riga e la riga successiva, n = 2 << (m-1), ha l'indentazione con gli spazi (oltretutto sono dispari). Questo è male.

Scegli uno standard (se accetti un consiglio butta via i TAB ed usa indentazioni a 4 spazi) e segui sempre quello, altrimenti Python non perdona.

Ciao.
Daniele

P.S. Non se nelle mie, ma nelle tue mani. ;)


--- Ultima modifica di Daniele aka Palmux in data 2015-07-08 09:51:32 ---
dunque ho reindentato tutto il codice passando dal tab ai 4 spazi, ho ripostato il codice: http://pastebin.com/YfG4aaTq
mi da sempre lo stesso errore di sintassi:


Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "fft.py", line 10

nesp=nesp*2

^

SyntaxError: invalid syntax


cosa vuole?



dunque ho reindentato tutto il codice passando dal tab ai 4 spazi, ho ripostato il codice: http://pastebin.com/YfG4aaTq
mi da sempre lo stesso errore di sintassi:
Sei sicuro, vedo ancora un sacco di TAB nel tuo codice, vedo commenti allineati a caso, controlla meglio.

Una curiosità, ma che editor usi? Con un editor un minimo senziente, questi problemi li elimini facilmente e ti accorgi al volo della "sporcizia" lasciata nel codice.

Cya


--- Ultima modifica di Daniele aka Palmux in data 2015-07-08 13:10:47 ---
Oltre a questa riga:
d=n/(2<<(k-1)
Come vedi manca una parentesi in chiusura.

Cya


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.