1
votes

Comment réparer NameError: le nom 'auteur' n'est pas défini lors de l'exécution du script python

J'essaye d'ouvrir ceci sur le terminal sur mon mac, mais je continue à obtenir le nom «auteur» non défini alors qu'il l'est clairement.

def bibformat_mla(author, title, city, publisher, year):
    author = input("enter author: ")
    title = input("enter title: ")
    city = input("enter city: ")
    publisher = input("enter publisher: ")
    year = input("enter year: ")
    answer = author + ' , ' + title + ' , ' + city + ': ' + publisher + ', ' + year
    return answer


bibformat_mla(author, title, city, publisher, year)
'author, title, city: publisher, year'

bibformat_mla("Jake, Matt", "Open Data ", "Winnipeg", "AU Press", 2013)
 'Morin, Pat. Open Data Structures. Winnipeg: AU Press, 2013'


1 commentaires

J'ai rendu le titre plus spécifique pour aider les gens à trouver ce problème, j'espère que cela ne vous dérange pas. Comme @Daniel Scott l'a dit ci-dessous, il semble que vous essayez de passer des variables non définies comme arguments dans le premier appel, vous devez soit les définir d'abord quelque part, soit les supprimer.


3 Réponses :


3
votes

Lorsque vous exécutez ce qui suit:

def bibformat_mla():

Vous dites au programme que vous avez une variable appelée "author" qui est prête à passer dans biblformat (). Cela provoque une erreur car la variable n'est pas définie avant que la fonction ne soit appelée.

Ie Vous dites à la fonction d'attendre une certaine variable, et cela vous renvoie une erreur car la variable ne le fait pas ' t existent encore.

D'après ce que vous essayez d'accomplir, vous pouvez simplement appeler la fonction comme ceci:

bibformat_mla()

Vous allez également besoin de changer votre définition pour que votre fonction n'attende plus les paramètres:

bibformat_mla(author,title,city,publisher,year)


5 commentaires

J'ai essayé cela mais, maintenant, lorsque j'essaie d'ouvrir le programme sur le terminal, je continue à recevoir TypeError: bibformat_mla () manque 4 arguments de position requis: 'auteur', 'titre', 'ville' et 'éditeur'


J'ai mis à jour la réponse. Vous devrez retirer les paramètres lorsque vous définissez la fonction.


D'accord, je l'ai compris, mais y a-t-il un moyen de faire apparaître le ("Enter Author") lorsque je déclare réellement la variable dans le programme, au lieu de le demander tout de suite quand j'ouvre le programme dans le terminal.


Vous décrivez ce que ce nouveau code devrait faire. L'avez-vous couru?


Oui, je l'ai couru



0
votes

Vous devez décider si votre fonction acceptera ces chaînes comme arguments ou si elle invitera l'utilisateur à les saisir? Il ne sert à rien d'exiger de l'utilisateur de fournir les valeurs en tant qu'arguments, puis de les écraser immédiatement par les valeurs qu'il saisit.

Vous avez donc le choix.

  1. effectue les entrées avant d'appeler la fonction et transmet les valeurs entrées à la fonction.
  2. supprimez les arguments de la fonction et autorisez l'utilisateur à saisir les chaînes dans le cadre de bibformat_mla .

code:

def bibformat_mla1 (author,title,city,publisher,year):
    return author + ' , ' + title + ' , ' + city + ': ' + publisher + ', ' + str(year)

def bibformat_mla2 ():
    author = input ("enter author: ")
    title = input ("enter title: ")
    city = input ("enter city: ")
    publisher = input ("enter publisher: ")
    year = input ("enter year: ")
    return author + ' , ' + title + ' , ' + city + ': ' + publisher + ', ' + year

print(bibformat_mla1("Jake, Matt", "Open Data ", "Winnipeg", "AU Press", 2013))
print(bibformat_mla2())


0 commentaires

0
votes

Avec les fonctions, vous pouvez passer des informations en tant que paramètres, dans la définition de votre fonction, vous indiquez que lorsque vous exécutez la fonction, vous passerez également 5 variables avec elle.

À première vue, vous définissez les variables par entrée utilisateur et ainsi vous n'avez pas besoin de passer des paramètres, leur suppression devrait faire fonctionner le code.

Ceci:

def bibformat_mla():

Dans ceci:

XXX


0 commentaires