J'ai créé un programme simple dans lequel un utilisateur peut ajouter des articles à sa liste d'épicerie. Une fois qu'un élément est ajouté, on leur demande s'il est terminé. S'ils saisissent "oui", les éléments de la liste sont imprimés et le programme se ferme. S'ils saisissent non, ils peuvent ajouter d'autres éléments à la liste. Le problème est que je ne veux que oui ou non comme seule option. Si l'utilisateur écrit quelque chose d'autre, je veux qu'un message s'imprime disant que vous ne pouvez écrire que "Oui" ou "Non". La façon dont j'ai le code écrit puisque le message est en bas quand il est imprimé, le programme se termine. Je ne sais pas où le placer. J'ai essayé de placer à l'intérieur de la boucle while mais cela est en contradiction avec la condition.
mylist = []
are_you_done = "no"
while are_you_done == "no":
grocery_item = input("Add to Grocery ")
are_you_done = input("Are you done? ")
mylist.append(grocery_item)
if are_you_done == "yes":
for item in mylist:
print(item)
else:
print("Please type Yes or No")
3 Réponses :
Définir:
grocery_items = []
while True:
grocery_item = input("Add to Grocery ")
print("Are you done? ", end="")
if ask_yes_no():
break
grocery_items.append(grocery_item)
Ensuite, utilisez ask_yes_no () de la manière suivante:
def ask_yes_no():
while True:
x = input()
if x == "yes":
return True
if x == "no":
return False
print("Expecting yes/no")
Et cela ajoute quoi à quoi?
@roganjosh N'est-ce pas ce qu'ils demandent dans la description?
Le titre est «Ajout d’éléments à la liste à l’aide de la boucle while» et affiche le code ajouté à une liste
@roganjosh La majorité de la description dit: «Après l'ajout d'un élément, on leur demande si c'est fait. S'ils saisissent "oui", les éléments de la liste sont imprimés et le programme se ferme. S'ils saisissent non, ils peuvent ajouter d'autres éléments à la liste. Le problème est que je ne veux que oui ou non comme seule option. Si l’utilisateur écrit quelque chose d’autre, je souhaite qu’un message soit imprimé disant que vous ne pouvez écrire que "Oui" ou "Non". ' Si vous voulez que je réponde au titre < / i>, c'est .append () , bien que l'OP semble déjà le faire. En outre, la question a été fermée en double avec presque la même réponse que celle-ci.
La description dit clairement qu'il ne veut que «oui» ou «non».
Votre programme ne se termine pas. Il quitte simplement une fonction qui renvoie un booléen. Que suggérez-vous qu'ils fassent avec cela lorsqu'ils ont une invite pour plus d'éléments d'entrée?
@MateenUlhaq, vous pouvez même ajouter un argument msg à passer à la fonction input .
@LaurentLAPORTE C'est vrai, mais je voulais seulement inviter l'utilisateur jusqu'à ce que la première entrée ait échoué.
Le problème est que l'OP est aux prises avec la logique en ligne, et vous venez d'en prendre partie , de l'ajouter à une fonction et de ne rien leur dire de ce qu'ils étaient censés en faire. Est-ce une excellente question? Non, mais il ne sert à rien de donner une réponse clairement plus complexe que le problème avec lequel ils sont déjà aux prises, en plus de ne donner aucune explication.
Nous devons vérifier dans notre boucle while si nos conditions d'entrée ont été correctement satisfaites. De plus, nous devrions standardiser notre saisie pour les majuscules et les minuscules.
mylist = []
are_you_done = "no"
while are_you_done == "no":
grocery_item = input("Add to Grocery ")
are_you_done = input("Are you done? ").lower()
if are_you_done not in ("no", "yes"):
print("Please type Yes or No")
are_you_done = "no"
else:
mylist.append(grocery_item)
for item in mylist:
print(item)
1) mylist.append (grocery_item) doit venir avant mylist.append (grocery_item) , 2) if are_you_done! = "No" or are_you_done! = " oui " vaut mieux que si vous n'êtes pas dans ('non', 'oui')
Je pense que cela fait ce que vous avez spécifié dans votre question. Notez que le programme reste dans la boucle interne jusqu'à ce que la réponse soit oui ou non. Notez également que nous ajoutons l'article d'épicerie à la liste avant de poser la question.
#!/usr/bin/python3
mylist = []
are_you_done = "no"
while are_you_done == "no":
grocery_item = input("Add to Grocery ")
mylist.append(grocery_item)
while True:
are_you_done = input("Are you done? ")
if are_you_done in ['yes','no']:
break
else:
print( 'please answer with yes or no' )
for item in mylist:
print(item)
Le mettre dans la boucle while est sur la bonne voie. Vous devez modifier votre condition pour que la boucle continue de s'exécuter si l'utilisateur insère autre chose que oui ou non, et ne quitte pas tant qu'il n'a pas entré oui.