J'essaie donc de créer un jeu où le 'GameMaster' choisit le premier mot d'un fichier .txt, puis l'utilisateur essaie de deviner le mot. Une fois que l'utilisateur a correctement deviné le mot, le GameMaster regarde la ligne suivante dans le fichier et l'utilisateur doit à nouveau deviner, ainsi de suite, etc.

Le problème que j'ai, c'est que le programme affecte des variables au fur et à mesure que le jeu se poursuit. Le programme doit regarder de manière itérative jusqu'à ce qu'il n'y ait plus de mots à choisir, que ce soit 2 ou infini.

Comme je n'ai pas beaucoup d'expérience avec l'interaction de fichiers en python, le meilleur exemple que j'ai est quelque chose comme ceci:

Le fichier "input.txt" contiendra:
chien
chat
oiseau
rat
Souris

Et je regarde ce que contient le fichier .txt avec ceci:

def file_read():
with open ('/Users/someone/Desktop/input.txt', 'r') as myfile:
    data = myfile.read()
    for line in data:
        line.rstrip()
return data
-2
Ike C. 15 avril 2018 à 10:47

3 réponses

Meilleure réponse

Votre fonction renvoie l'intégralité du contenu du fichier, sans modification. myfile.read() renvoie les données du fichier sous forme de chaîne. La boucle for itère ensuite sur chaque caractère de cette chaîne, pas sur les lignes. De plus, rstrip() ne fonctionne que sur chaque caractère. Il n'affecte pas le contenu de data car data est une chaîne immuable et la valeur de retour de rstrip() n'est stockée nulle part.

Quelque chose comme ça conviendrait mieux:

def file_read():
    with open('/Users/someone/Desktop/input.txt') as myfile:
        return [line.rstrip() for line in myfile]

Cela renverra une liste des lignes supprimées du fichier. Votre mot devinerait alors le code sur la liste.

Ce qui précède fonctionnera, cependant, il n'est pas très efficace si le fichier d'entrée est volumineux car tout le fichier sera lu en mémoire pour construire la liste. Une meilleure façon consiste à utiliser un générateur qui produit une ligne dénudée une à la fois:

def file_read():
    with open('/Users/someone/Desktop/input.txt') as myfile:
        for line in myfile:
            yield line.rstrip()

Maintenant que cette fonction est si simple, il semble inutile de s'en préoccuper. Votre code pourrait simplement être:

with open('/Users/someone/Desktop/input.txt') as myfile:
    for line in myfile:
        user_guess_word(line.rstrip())

user_guess_word() est une fonction qui interagit avec l'utilisateur pour deviner quel est le mot, et retourne une fois que le deviner est correct.

0
mhawke 15 avril 2018 à 08:19

Cette méthode utilise readlines pour obtenir le contenu des fichiers dans une list ligne par ligne. readlines renvoie un list contenant des lignes.

Maintenant, parcourez list pour vérifier si l'entrée utilisateur correspond au contenu de la ligne (qui est un mot dans ce cas).

with open ('/Users/someone/Desktop/input.txt', 'r') as myfile:
    words = myfile.readlines()
    while x < len(words):
        if words[x] == input('Enter word to guess'):
            print('Predicted word correctly')
        else:
            print('Wrong word. Try again')
            x -= 1
        x += 1
0
Austin 15 avril 2018 à 08:05

Vous pouvez le faire comme,

def fun():
    data = open('filename', 'r').readlines()
    user_guess, i = None, 0
    while i < len(data):
        user_guess = input()
        if user_guess not None and user_guess == data[i]:
            i = i + 1

Veuillez couper () / strip () également pendant que vous comparez user_guess et data [i]

0
Bhavesh Kumar 15 avril 2018 à 08:17