IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Aide pour créer un programme question/réponse & Vrai/Faux


Sujet :

Python

Vue hybride

alexcorde Aide pour créer un programme... 11/05/2016, 20h54
wiztricks Salut, Techniquement,... 11/05/2016, 22h29
alexcorde re:Aide pour créer un... 13/05/2016, 18h26
wiztricks Salut, L'erreur... 13/05/2016, 18h58
alexcorde re:Aide pour créer un... 14/05/2016, 12h13
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut Aide pour créer un programme question/réponse & Vrai/Faux
    Bonjour, je suis en Terminale S et dans le cadre d'un projet de BAC, nous avons décidé avec des camarades de créer un programme question/réponse et Vrai ou Faux.
    Ma version de python est la version 3.2.1.1
    J'ai premièrement réussi à faire un squelette fonctionnel. Néanmoins, il me faut maintenant arriver à ouvrir des fichiers texte avec mon programme (réussi) et plus précisément à en lire les ligne selon un ordre défini. Il faut savoir que je vois les choses de cette manière :
    -A chaque question posée, le programme augmente la valeur de la variable désignant le numéro de la question (appelée dans le programme nbr_quest)
    -Si la valeur de nbr_quest est 0, le programme lit la ligne 0 du fichier question et du fichier réponse, il ajoute alors 1 à nbr_quest et lit la ligne 1 du fichier question et du fichier réponse.
    Pour le moment, lorsque je fais tourner le programme, j’obtiens un python qui ne répond plus et je dois le fermer...mais il ne me donne pas de message d'erreur.

    Si je résume, j'aimerais savoir s'il est possible de lire une ligne spécifiquement indiquée dans un fichier texte, et si oui, comment ?
    Aidez moi je vous en supplie !
    Merci d'avance

    voici mon code (non complet car recommencé du début, il n'a pas encore certaines fonctionnalités voulues, c'est normal) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    pt=0#initialisation du nombre de points
    nbr_quest=0#initialisation du rand de la question.
     
    theme=int(input("quel theme desirez vous ? math, tapez 1. histoire, tapez 2. culture generale, tapez 3."))
    mode=int(input("quel mode desirez vous ? Vrai ou Faux, tapez 1. Question reponse, tapez 2."))
     
    if(theme==1):
        if(mode==1):
            fichier_questions = open("quest_maths_vf.txt", "r") #ouvre fichier des questions.
            fichier_reponses = open("rep_maths_vf.txt", "r") #ouvre le fichier des reponses correspondant.
        if(mode==2):
            fichier_questions = open("quest_maths_qr.txt","r")
            fichier_reponses = open("rep_maths_qr.txt", "r")
    if(theme==2):
        if(mode==1):
            fichier_questions = open("quest_hist_vf.txt","r")
            fichier_reponses = open("rep_hist_vf.txt", "r")
        if(mode==2):
            fichier_questions = open("quest_hist_qr.txt", "r")
            fichier_reponses = open("rep_hist_qr.txt", "r")
    if(theme==3):
        if(mode==1):
            fichier_questions = open("quest_cult_vf.txt", "r")
            fichier_reponses = open("rep_cult_vf.txt", "r")
        if(mode==2):
            fichier_questions = open("quest_cult_qr.txt", "r")
            fichier_reponses = open("rep_cult_qr.txt", "r")
     
    while(nbr_quest<=9):
        for i in range(nbr_quest):
            lign_quest=fichier_questions.readline()
            lign_rep=fichier_reponses.readline()
            print(lign_quest)
            print(lign_rep)
            input()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 699
    Par défaut
    Salut,

    Citation Envoyé par alexcorde Voir le message
    Si je résume, j'aimerais savoir s'il est possible de lire une ligne spécifiquement indiquée dans un fichier texte, et si oui, comment ?
    Techniquement, un fichier est une sorte de tableau à une dimension.
    Si toutes les lignes étaient de la même longueur L, lire la ligne N, c'est lire les octets du tableau entre N*L et (N+1)*L.
    Hélas, dans un fichier texte, les lignes sont de longueur quelconque et se terminent par un ou des caractères signalant "fin de ligne".
    Pour trouver la ligne N, il faudra lire le fichier séquentiellement en repérant les fins de lignes et en les comptant jusqu'à... mais vous pouvez laissez Python faire une bonne partie du boulot!
    Je crée un fichier "test.txt" de 10 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> f = open('test.txt', 'w')
    >>> for x in range(10):
    ...     print ('ligne %d' % x, file=f)
    ...
    >>> f.close()
    Maintenant, je le relis sous la forme d'une liste de lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> f =  open('test.txt')
    >>> lines = f.read().splitlines()
    >>> lines
    ['ligne 0', 'ligne 1', 'ligne 2', 'ligne 3', 'ligne 4', 'ligne 5', 'ligne 6', 'l
    igne 7', 'ligne 8', 'ligne 9']
    On peut donc accéder à chaque ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> lines[2]
    'ligne 2'
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut re:Aide pour créer un programme question/réponse & Vrai/Faux
    Super, merci, ça a fonctionné, j'ai pu ouvrir des lignes spécifiques en entrant le numéro voulu entre crochet par exemple "print(lines[1])"
    Mais quand je veux ouvrir une ligne spécifique déterminée par une valeur portée par une variable (nbr_quest) sous la forme "print(lines[nbr_quest]); le message d'erreur suivant s'affiche invariablement ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IndexError: list index out of range
    en montrant cette ligne dans la nouvelle partie que j'ai modifiée par rapport au script précédent ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       rep_ut=input(lines1[nbr_quest]) #on essaie d'indiquer à l'utilisateur la question et on lui demande de rentrer v, f, V ou F
    la nouvelle partie de code est ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(nbr_quest<=9):#tant que la valeur de la variable indiquant le numéro de la question est inférieur à 9 (soit tant qu'elle indique une ligne du fichier txt inférieure à 10)
        q =  fichier_questions#on assigne le fichier question à la lettre q
        lines1 = q.read().splitlines()#on apelle lines1 la variable indiquant la ligne lue dans le fichier question
        rep_ut=input(lines1[nbr_quest]) #on essaie d'indiquer à l'utilisateur la question et on lui demande de rentrer v, f, V ou F
        nbr_quest=nbr_quest+1#on ajoute un à la valeur de la variable indiquant le numéro de la question
        r = fichier_reponses #on assigne le fichier reponse à la lettre r
        lines2 = r.read().splitlines()#on apelle lines2 la variable indiquant la ligne lue dans le fichier reponse
        if(rep_ut==lines2[nbr_quest]):#si la réponse de l'utilisateur est la même que celle indiqué par lines2
            print('bravo')
        else:
            print('dommage')
    input()
    J'ai également vu qu'afin de mettre les lettres entrées par l'utilisateur en majuscules, on pouvait utiliser la commande ".uper", mais j'ai encore un message d'erreur qui s'affiche ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'str' object has no attribute 'uper'
    Merci de votre aide.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 699
    Par défaut
    Salut,

    Citation Envoyé par alexcorde Voir le message
    Mais quand je veux ouvrir une ligne spécifique déterminée par une valeur portée par une variable (nbr_quest) sous la forme "print(lines[nbr_quest]); le message d'erreur suivant s'affiche invariablement ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IndexError: list index out of range
    en montrant cette ligne dans la nouvelle partie que j'ai modifiée par rapport au script précédent ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       rep_ut=input(lines1[nbr_quest]) #on essaie d'indiquer à l'utilisateur la question et on lui demande de rentrer v, f, V ou F
    L'erreur indique que nbr_quest est plus grand que le nombre de lignes dans lines1 (qui commence à 0).
    A vous de voir comment est gérée cette variable: vous pouvez ajouter des "print" pour avoir la valeur de nbr_quest et la longueur de lines1
    La mise au point de votre code est la partie la plus intéressante: vous êtes obligé de vous mettre à la place de la machine pour exécuter les instructions et suivre ce qu'il se passe mentalement ou sur une feuille de papier. C'est en confrontant votre représentation à l'instant t de ce que vous penser que va faire la machine et la réalité que vous allez progresser.

    Citation Envoyé par alexcorde Voir le message
    J'ai également vu qu'afin de mettre les lettres entrées par l'utilisateur en majuscules, on pouvait utiliser la commande ".uper", mais j'ai encore un message d'erreur qui s'affiche ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'str' object has no attribute 'uper'
    Ah ben, c'est une bonne occasion pour réviser votre anglais... si vous n'avez pas de dico, c'est une faute que Google corrige automatiquement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut re:Aide pour créer un programme question/réponse & Vrai/Faux
    Ah oui, en effet, ".upper" fonctionnerait sans doute mieux...

  6. #6
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut re:Aide pour créer un programme question/réponse & Vrai/Faux
    Bon, j'ai toujours un problème avec l'index error...
    Pourtant cette fois j'ai mis des print nbr_quest et des input() pour voir à quel moment ça bloque...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while(nbr_quest<=9):#tant que la valeur de la variable indiquant le numero de la question est inferieur a 9 (soit tant qu'elle indique une ligne du fichier txt inferieure a 10)
       q=fichier_questions #on assigne a q le fichier question, pour raison de clarté. 
       r=fichier_reponses #on assigne a r le fichier reponse, pour raison de clarté. 
       lines1=q.read().splitlines()
       lines2=r.read().splitlines()
       print(nbr_quest) #on affiche la variable de "nbr_quest"
       input()
       rep_ut=input(lines1[nbr_quest]) #on demande à l'utilisateur de saisir sa réponse en fonction de la question posée
       v_rep=lines2[nbr_quest]
       print(rep_ut) #on affiche la réponse entrée par l'utilisateur
       print(v_rep) #on affiche la vrai réponse, issue du fichier réponse
       print(nbr_quest) #on affiche la variable de "nbr_quest"
       input()
    à la première boucle, la valeur de nbr_quest est de 0, et j'arrive à la fin de la boucle, la valeur de nbr_quest est toujours 0.
    Je n'ai ici volontairement pas augmenté sa valeur.
    la boucle repart, la valeur de nbr_quest n'a pas changé, et j'arrive sur la ligne en rouge et python me dit "list index out of range".
    Problème qu'il ne m'a pas posé à la première boucle, les valeurs restant inchangées...
    J'ai bien vérifié dans les fichier txt à ouvrir, il y a dix lignes dans chaque, donc logiquement...quelque chose m’échappe...
    En tout cas, à la première boucle, python m'affiche bien les lignes désirée, c'est un progrès par rapport au début !

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2010, 15h59
  2. aide pour créer un jeu
    Par cstefany dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/10/2005, 03h51
  3. [FLASH MX2004] Aide pour créer une animation
    Par SnakeTales dans le forum Flash
    Réponses: 5
    Dernier message: 04/08/2005, 10h50
  4. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo