2016-08-25 1 views
1

J'ai fait des tâches python pour l'apprentissage et je suis tombé sur cette tâche où je dois lire un fichier qui contient peu de mots et si une ligne est palindrome (même si écrit à l'envers: lol> lol) donc j'ai essayé avec ce code, mais il n'imprime rien sur le terminal:Python - lignes de fichier - pallindrome

with open("words.txt") as f: 
    for line in f: 
     if line == line[::-1]: 
      print line 

mais si j'imprimer comme ça, sans si la condition, il imprime les mots:

with open("words.txt") as f: 
    for line in f: 
     print line 

I Je me demande pourquoi il n'imprimera pas les mots que j'ai écrits dans le fichier:

sefes 
kurwa 
rawuk 
lol 
bollob 

Répondre

1

C'est parce que ces lignes contiennent "\n" à la fin. "\n" signifie nouvelle ligne. Par conséquent, aucun de ceux-ci n'est palindromes selon Python.

Vous pouvez dépouiller la première "\n" en faisant:

with open("words.txt") as f: 
    for line in f: 
     if line.strip() == line.strip()[::-1]: 
      print line 
+0

@ [email protected] Matt k Merci beaucoup: D Cela a 'si line.strip() == ligne [:: - 1]. strip(): ' –

+0

@Idontreallywolf Ouais c'est bien aussi. 'strip()' supprime les espaces du début et de la fin, donc peu importe où vous placez '' .strip() '. –

1

Le dernier caractère de chaque line est un caractère de retour à la ligne ("\ n"). Vous devez supprimer les nouvelles lignes ("foo\n".strip()) avant de vérifier si la ligne est un palindrome.

1

Lorsque vous lisez une ligne d'un fichier comme celui-ci, vous obtenez également le caractère de nouvelle ligne. Donc, par exemple, vous voyez 'sefes\n', qui, lorsqu'il est inversé, est '\nsefes'. Ces deux lignes ne sont bien sûr pas égales. Une façon de résoudre ce problème est d'utiliser rstrip pour supprimer ces nouvelles lignes:

with open("words.txt") as f: 
    for line in f: 
     line = line.rstrip() 
     if line == line[::-1]: 
      print line