Módulo propio de importación de Python – nombre no definido

Quiero actualizar mi juego de jumble básico. Ya hice que el script obtenga las palabras de un archivo de texto, ahora quiero separarlas en módulos ya que tengo diferentes archivos de texto con diferentes palabras.

Tengo mi script principal, jumble_game.py:

import random import amazement #Welcome the player print(""" Welcome to Word Jumble. Unscramble the letters to make a word. """) def wordlist(file): with open(file) as afile: global the_list the_list = [word.strip(",") for line in afile for word in line.split()] print(the_list) def main(): score = 0 for i in range(4): word = random.choice(the_list) theWord = word jumble = "" while(len(word)>0): position = random.randrange(len(word)) jumble+=word[position] word=word[:position]+word[position+1:] print("The jumble word is: {}".format(jumble)) #Getting player's guess guess = input("Enter your guess: ").lower() #congratulate the player if(guess==theWord): print("Congratulations! You guessed it") score +=1 else: print ("Sorry, wrong guess.") print("You got {} out of 10".format(score)) #filename = "words/amazement_words.txt" wordlist(filename) main() 

Quiero que el archivo amazement.py se importe a jumble_game.py porque quiero que el usuario seleccione el grupo, del cual se elegirán las palabras.

amazement.py:

 filename = "amazement_words.txt" 

Me sale este error:

 File "jumble_game.py", line 49, in  wordlist(filename) NameError: name 'filename' is not defined 

Si lo hago de la otra manera, importando el script principal en amazement.py y ejecutando el último, el código funciona sin problemas.

¿Alguna pista de qué me estoy perdiendo? Todavía soy un principiante de Python, así que ten paciencia conmigo. 🙂

Gracias por ayuda / sugerencias!

El problema que has declarado es un problema de espacio de nombres / ámbito estándar. Has creado una variable dentro del scope de amazement.py, pero no en el espacio de nombres jumble_game.py. Como resultado, no puede acceder a la variable de nivel superior en amazement.py sin decirle a su progtwig de dónde obtener esa variable.

Puedes hacer algunas cosas. Voy a enumerar dos:

1.

from amazement import filename

Esto le permitirá usar el término “nombre de archivo” como lo ha descrito.

o 2.

Reemplace cualquier referencia al filename de filename con amazement.filename .

Puede leer más sobre los ámbitos y el espacio de nombres aquí: http://sebastianraschka.com/Articles/2014_python_scope_and_namespaces.html