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'
3 Réponses :
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)
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
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.
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())
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
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.