-2
votes

Problème avec le fichier ouvert à l'intérieur d'une boucle tandis que (Python)

J'ai ajouté un fichier ouvert à mon code de travail précédemment et que cela ne fait pas ce qui est censé.

J'ai testé et couru pour boucle sur un fichier ouvert pour voir si tout fonctionne et que tout cela fonctionne. Il m'a imprimé une liste unique de tous les mots à l'intérieur du fichier TXT.

Mon attente est de vérifier si le mot est dans les mots_list et continuez, mais maintenant, ce qui se passe, il sera toujours imprimé (le mot est pas dans la liste), même si je tape le mot qui est en effet dans la liste. xxx


3 commentaires

mots_list n'est pas une liste de mots. C'est une liste avec un seul élément, qui est l'ensemble du contenu du fichier.


F.Read () vous donnera tout le contenu du fichier en tant que chaîne unique. Donc, votre mots_list n'a qu'un seul élément, et word dans words_list ne sera vrai que si vous correspondez au texte de l'ensemble du fichier. Vous voulez probablement utiliser str.split < / a> suivi de list.extend , ou peut-être juste pour la ligne dans Fichier: APPEND (ligne) Si vous n'avez toujours qu'un mot par ligne.


Dupliqué possible de Comment lire une ligne de fichier- par ligne dans une liste?


5 Réponses :


0
votes
with open("generated one column words.txt", "r") as f:
    words_list = f.read()

def main():
    used_words = []
    while True:
        word = input("Type 4 letter word: ")
        if not word.isalpha():
            print("Only letters are allowed!")
        elif word not in words_list:
            print("word is not in the list")
        elif len(word) == 4 and word not in used_words:
            used_words.append(word)
            print("good job, try another word")
        elif word in used_words:
            print("word already exists")
        elif len(word) != 4:
            print("word is not 4 letters long")
game = main()

0 commentaires

0
votes

Vous pouvez utiliser F.Readlines () à la place. Ensuite, vous devez seulement vous débarrasser des caractèresWLINE.


0 commentaires

0
votes

Cette ligne xxx

doit être xxx

mots_list est une liste avec seulement 1 élément à la position [0]. Vous devez spécifier le [0]


0 commentaires

0
votes
def main():

    # opening the file with one word per each line
    with open('generated one column words.txt', 'r') as f:
        # reading each lines without newline at the end
        words_list = [line.strip() for line in f.readlines()]

    # caching 4-letter word after submit
    used_words = list()

    while True:
        word = input('Type 4 letter word: ')
        if word.isalpha():
            if word in words_list:
                if len(word) is 4:
                    if word not in used_words:
                        used_words.append(word)
                        print('good job, try another word')
                    else:  # if word already added in used_words
                        print('word already exists')
                else:  # if length of word != 4
                    print('word is not 4 letters long')
            else:  # if word not in words_list
                print('word is not in the list')
        else:  # if word contains special characters or digits
            print('Only letters are allowed!')


if __name__ == "__main__":
    main()  # infinite run the function main()

0 commentaires

0
votes

Puisque vous utilisez f.fin () code>, il lit le fichier entier en tant que chaîne unique avec chaque ligne séparée par \ n code> caractère qui est pourquoi votre requête retourne faux à chaque fois. Si votre fichier .txt code> contient des mots- xxx pré>

Votre code actuel le lira comme 'this \ NTHAT \ NTLERE' code> et words_list avoir cette chaîne unique qui ressemblera à - ['this \ n \ nthat \ nnear \ nhome'] code>. Modifiez votre code pour lire le fichier comme suit et il fonctionnera: p> xxx pré>

ou vous pouvez modifier votre propre code comme suit - P>

words_list = []
with open("generated one column words.txt", "r") as f:
    reader = f.read()
    words_list.extend(reader.split('\n'))


1 commentaires

Merci beaucoup! Votre première option a travaillé comme un charme et est maintenant enregistrée dans mes notes et dans mon cerveau! Et merci à tout le monde pour leur temps de m'aider!