Ju
-
8 févr. 2021 à 19:39
Whismeril
Messages postés18414Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 7 juin 2023
-
8 févr. 2021 à 21:06
Bonjour, je commence à coder en python et j'aimerais pouvoir revenir à une ligne plus haute si à une condition réalisée (if).
Est-ce possible ?
from random import randint
maquestion=str("Une machine peut-elle agir intelligement ?")
questions=[""]*100
questions[0]=maquestion
questions[1]= str("Pensez-vous que les IA seront plus intelligentes que l'homme un jour ?")
questions[2]=str("Pensez-vous qu'elles représentent un danger pour l'humanité ?")
questions[3]=str("Seriez-vous prêts à accueillir une IA au sein de votre foyer ?")
questions[4]=str("Pensez-vous qu'il est possible d'entretenir une relation sentimentale avec une IA ?")
temp=4
listedjaposee=[""]*100
nbdjaposee=0
while True:
tirage=randint(0, temp)
if questions[tirage] in listedjaposee:
continue
print(questions[tirage])
nbdjaposee=nbdjaposee+1
listedjaposee.append(questions[tirage])
print("Répondez avec : Oui (1), Non (2), Sans avis(3), Fin(4), Nouvelle question(5)")
choix = input()
if choix != "1" and "2" and "3" and "4" and "5":
print("Veuillez répondre à l'aide des indices donnés")
#retour au print de la question pour répondre correctement
if choix == "4":
break
if choix == "5":
temp += 1
questions[temp]=str(input("Posez votre question :"))
if nbdjaposee==temp+1 :
break
Whismeril
Messages postés18414Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 7 juin 2023624 8 févr. 2021 à 20:59
Déjà au lieu de faire
while True
, utilise une variable.
Comme ça dans l'exécution de ta boucle tu peux la mettre à False à plusieurs endroits.
Tu peux même, pour une boucle imbriquée, faire une opération booléenne sur 2 ou plusieurs variables, par exemple
while condition1 and condition2
while condition1 or condition2
Pense à utiliser la clause else avec tes if
Enfin, break "casse" la boucle la plus "proche", donc si tu veux arrêter celle plus haut, il faut modifier la variable de la boucle englobante et breaker la boucle imbriquée.
from random import randint
maquestion=str("Une machine peut-elle agir intelligement ?")
questions=[""]*100
questions[0]=maquestion
questions[1]= str("Pensez-vous que les IA seront plus intelligentes que l'homme un jour ?")
questions[2]=str("Pensez-vous qu'elles représentent un danger pour l'humanité ?")
questions[3]=str("Seriez-vous prêts à accueillir une IA au sein de votre foyer ?")
questions[4]=str("Pensez-vous qu'il est possible d'entretenir une relation sentimentale avec une IA ?")
temp=4
listedjaposee=[""]*100
nbdjaposee=0
while True:
tirage=randint(0, temp)
if questions[tirage] in listedjaposee:
continue
##retour ici si possible
print(questions[tirage])
nbdjaposee=nbdjaposee+1
listedjaposee.append(questions[tirage])
print("Répondez avec : Oui (1), Non (2), Sans avis(3), Fin(4), Nouvelle question(5)")
choix=input()
if choix == "4":
break
if choix == "5":
temp += 1
questions[temp]=str(input("Posez votre question :"))
if choix != "1" and "2" and "3" and "4" and "5":
print("Veuillez répondre à l'aide des indices donnés")
##retour à la ligne (plus haute) pour reposer la même question
if nbdjaposee==temp+1 :
break
#print(listedjaposee)
print("Le sondage est terminé")
Voila je souhaiterais un que si l'utilisateurr pose une question et ne réponds pas avec le bon indice, a question soit reposée, et que le code continue à fonctionner de la même façon, je crois qu'il n'existe pas de "goto" en python donc je suis un peu coincée :/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Merci pour vos retours aussi rapide, mais lorsque j'essayai, je n'arrivais pas à "breaker" de la bonne façon, soit je sortais totalement de mon programme, soit la question n'était pas reposée et le programme continuait sans en prendre compte ?
Comment dois-je modifier l'algorithme ?