Retour à une ligne plus haute en python

Signaler
-
Messages postés
16031
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
-
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


print("Le sondage est terminé")
A voir également:

5 réponses

Messages postés
16031
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
550
Ok, que goto existe ou non, c'est considéré comme une mauvaise pratique.
Ça rend le code peu structuré, donc difficile à débogguer et maintenir.

Une façon simple est d'utiliser des while, un peu comme tu l'as fait.
Si la réponse est correcte, on sort du while, sinon on reboucle

Messages postés
16031
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
550
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.
Merci beaucoup je vais essayer tout ça :)
Messages postés
16031
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
550 > J
de rien
Messages postés
16031
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
550
Bonsoir

en python l'indentation est primordiale, or par défaut elle n'est pas conservée par le site.
Pour mettre en forme ton code, il faut faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Peux tu préciser ce que tu entends pas un retour à la ligne plus haut?
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 :/
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 ?