0
votes

Problèmes avec 'with open', pour créer un défi trivial en python

Je voudrais créer un défi trivial! Mais cela ne fonctionne pas comme je le ferais. Ceci est mon code:

 (the program take one question, randomly, in the whole file)
 the chosen one
 one of the three possibles guests
 one other of the three possibles guests
 a third possible guest
 ( And we don't know which one is the correct )
 Answer :


10 commentaires

Peut-être regarder à nouveau au nombre de signes égaux dans "si l = 4"


Veuillez montrer le code réel. Il y a au moins trois fautes de frappe dans ce code qui l'empêcheraient de s'exécuter du tout; alors comment pouvons-nous savoir ce qui cause votre problème?


Mais demandez-vous également pourquoi vous parcourez chaque caractère d'une ligne et l'ajoutez à une liste, si ce n'est pas ce que vous voulez que la sortie soit.


@trilarion, juste une erreur de myselft, car j'ai réécrit tout le programme à la main ^^


Pour info, le mot est "deviner", pas "invité". Un invité est un visiteur.


@DanielRoseman je vais le réparer, c'est l'écriture de ce que j'ai sur mon ordinateur, désolé pour les erreurs


@DanielRoseman J'ai commencé python depuis cette année, donc je ne suis pas du tout forte, avez-vous une meilleure solution que la liste?


@Barmar Merci, ça améliore mon anglais, c'est toujours utile: D


Le titre est trompeur; la question n'a rien à voir avec l'instruction with utilisée pour ouvrir le fichier.


@chepner Avez-vous une meilleure question à poser pour le titre? Ça va m'aider


3 Réponses :


1
votes

Votre premier problème est ici:

for line in file:
    if l == 0:
        question.append(line)

Rien de tout cela n'est nécessaire. Utilisez simplement la ligne pour les quelques lignes suivantes:

content_line = []
for char in line:
    content_line.append(char)

etc


0 commentaires

0
votes

Le code de la question ne donne pas la même ligne plusieurs fois en sortie. Si c'était un problème, cela n'est pas représenté dans ce code.


La raison pour laquelle vous obtenez des listes au lieu de chaînes est que vous faites explicitement ces listes:

   for line in file:
        # Remove trailing whitespace at the end of the line
        content_line = line.rstrip()
        if l == 0:
             question = content_line
             l = 1
        elif l == 1:
             right_guess = content_line
             l = 2
        elif l == 2:
             wrong_guess_1 = content_line
             l = 3
        elif l == 3:
             wrong_guess_2 = content_line
             l = 4

Si vous avez simplement utilisé line directement (ou line.rstrip () si vous souhaitez supprimer la nouvelle ligne à la fin), vous obtiendrez une ligne de texte pour chaque ligne du fichier.


La raison pour laquelle vous obtenez des listes à l'intérieur des listes est que vous êtes non seulement en mettant des caractères dans une liste, vous les ajoutez ensuite à une autre liste. Comme il semble que vous n'avez qu'un seul élément par liste, et que vous attendez une seule chaîne de l'impression de la liste, vous pouvez simplement remplacer ces listes par les chaînes.

Au lieu d'ajouter aux listes, attribuez simplement à la variables:

        content_line = []
        for char in line:
             content_line.append(char)


0 commentaires

0
votes

OK, donc cela cherche à être le code final:

  (the program take one question, randomly, in the whole file)
  the chosen one
  one of the three possibles guests
  one other of the three possibles guests
  a third possible guest
  ( And we don't know which one is the correct )
  Answer :


0 commentaires