TypeError: pas assez d'arguments pour le format de chaîne de caractères à l'aide d'une Boucle While
Je suis en train de faire la vieille 99 bouteilles de chanson et d'essayer de le faire à l'aide d'une boucle While, pour m'aider à mieux apprendre que le type de la boucle.
Je me demande pourquoi je ne serais pas obtenir un TypeError alors que dans mon code ci-dessous et quels sont les arguments exactement ce que je suis absent?
Voici mon code:
# Get number of beers
bottles = int(raw_input("How many bottles of beer? "))
# return invalid response
if bottles < 1:
print "That's not a good number"
if bottles == 1:
s1 = "bottle"
s2 = "bottles"
elif bottles == 2:
s1 = "bottles"
s2 = "bottles"
# sing verses
while bottles > 0:
print "%d %s of beer on the wall," % bottles, s1
print "%d %s of beer." % bottles, s1
print "You take one down, pass it around,"
print "%d %s of beer on the wall." % (bottles - 1), s2
print
bottles -= 1
Et voici l'erreur:
Traceback (most recent call last):
File "beer.py", line 47, in <module>
print "%d %s of beer on the wall," % bottles, s1
TypeError: not enough arguments for format string
J'ai essayé d'utiliser la parenthèse autour de "bouteilles, s1" après l' %, mais ne peut toujours pas aider. Des suggestions?
- À l'aide de
(bottles, s1)
fonctionne pour moi. - Que faire si l'entrée de la bouteille est de 10. D'où vient
s1
ets2
obtenir défini? - Votre code va générer un NameError si vous définissez
bottles
à quelque chose de plus grand que 2, car, dans ce cas, ni de votre if/elif à exécuter. Vous devriez changer le elif à un si. Aussi il semble que vous avez un problème d'indentation. Le if/elif ne devrait pas être sous leif bottles < 1
. - Et il faudrait aussi ne jamais mettre à jour votre
s1
ets2
chaînes, car ils ne sont évaluées une fois à partir de la saisie de l'utilisateur. La boucle while peut seulement tourner jusqu'à ce qu'il avait fait. Vous auriez besoin de les déplacer à l'intérieur de lawhile
boucle de sorte qu'ils se définir correctement à chaque fois. - Je suppose que je suis toujours confus quant à la façon dont je devrais être la définition de mes conditions pour
s1
ets2
et puis, la façon dont ils sont censés être appelé dans la chanson.
Vous devez vous connecter pour publier un commentaire.
vous devez spécifier plusieurs arguments tuple, par exemple,
While
boucle était au mauvais endroit, doit avoir été en-dessous de l'angle de cas 2.) Je n'ai pas eu uneelse
clause permettant des numéros supérieurs à 2. Des acclamations.