Forum >> Principianti >> Global Name non definito

Pagina: 1

Salve a tutti...
premetto mi sono da poco affacciato a python, volevo realizzare un modulo "generatore di funzioni", quindi inizio con una classica sinusoide:





def sinwave(N, fc, freq): # genera funzione seno

result = [ ]

for x in range(N):

result.append(32000*sin(2*pi*freq*x/fc))

return result





l'errore che mi restituisce:





Traceback (most recent call last):

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

File "genwave.py", line 12, in squarewave

for x in range(N):

NameError: global name 'sin' is not defined





Consigli??









Ciao h (ma sei uno degli agenti dei Man in Black?), l'errore è molto chiaro se leggi con attenzione.

Python non sa cosa sia quel sin (e neanche il pi dopo) che provi ad inserire nella lista, visto che non lo espliciti prima:
result.append(32000*sin(2*pi*freq*x/fc))
Se ti riferisci a sin (ed anche pi) del modulo math, devi importarlo nel tuo codice con un:
import math
oppure:
from math import sin
from math import pi

Ciao.
Daniele
Caio Daniele...
ho aggiunto import math in questo modo:





# modulo generatore di funzioni

from math import *




def sinwave(N, fc, freq): # genera funzione seno

result = []

for x in range(N):

result.append(32000*cos(2*pi*freq*x/fc-pi/2))

return result




def squarewave(N,fc,freq,dc): # genera funzione quadra

result=[]

for x in range(N):

if x<N/2 :

result.append(32000)

if x>=N/2:

result.append(0)

return result


(ho aggiunto anche una squarewave non corretta, era solo per fare una prova) risulta corretta la prima ma non la seconda con un errore simile:


Traceback (most recent call last):

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

File "genwave.py", line 16, in squarewave

result.append(0)

NameError: name 'result' is not defined





perchè?






Tralasciando alcuni errori sintattici e/o logici, se in Python non mostri l'indentazione, parte integrante della sintassi, non se ne viene a capo del tuo script e dei relativi errori.

Assomiglia al codice sotto, che ti ho messo anche su Pastebin per comodità?

from math import *

def sinwave(N, fc, freq): # genera funzione seno
    result = []
    for x in range(N):
        result.append(32000*cos(2*pi*freq*x/fc-pi/2))
    return result

def squarewave(N,fc,freq,dc): # genera funzione quadra
    result = []
    for x in range(N):
        if x<N/2 :
            result.append(32000)
        if x>=N/2:
            result.append(0)
    return result


Ciao Daniele, innanzitutto grazie.
Il codice è identico... l'indentazione sparisce quando passo dalla bozza all'anteprima, aggiungendo tra l'altro, non so perché, un certo numero di spazi.
Il codice è identico... l'indentazione sparisce quando passo dalla bozza all'anteprima, aggiungendo tra l'altro, non so perché, un certo numero di spazi.
Prima della tavolozza dei colori, hai un pulsante code (quello con i segni <> sopra un foglio bianco), che ti permette di mantenere gli spazi e quindi l'indentazione.

Ciao.
Daniele


Pagina: 1



Esegui il login per scrivere una risposta.