Simple I/O problem can't get solved
Greetings to everybody, I have recently started to solve my first Python problems but I came across to this: Write a version of a palindrome recogniser that accepts a file name from the user, reads each line, and prints the line to the screen if it is a palindrome.(by http://www.ling.gu.se/~lager/python_exercises.html) I think I coded it correctly but still I get no output. I do not have any errors I just do not get any output. This is the code: *** import is_palindrome filename = raw_input('Enter a file: ') # A text file f = open(filename) while True: line = f.readline() if len(line) == 0: break elif is_palindrome.is_palindrome(line): print line, f.close() *** I have coded the is_palindrome module before and it works very well. Here is this module's code: *** def reverse(text): return text[::-1] def replace_all(text, dic): for i, j in dic.iteritems(): text = text.replace(i, j) return text def is_palindrome(text): return text == reverse(text) points = {'.':'', ',':'', '!':'', ';':'', '?':'', '/':'', '\\':''} something = raw_input('Enter text: ').lower().replace(' ', '') replace = replace_all(something, points) if is_palindrome(replace): print 'Yes, it is a palindrome:', reverse(replace) else: print 'No, it is not a palindrome:', reverse(replace) *** What should I do to output only the palindrome lines from the text file? -- http://mail.python.org/mailman/listinfo/python-list
Re: Simple I/O problem can't get solved
Τη Παρασκευή, 21 Ιουνίου 2013 12:15:59 μ.μ. UTC+3, ο χρήστης Peter Otten έγραψε: > nickgan@windowslive.com wrote: > > > > > I have recently started to solve my first Python problems but I came > > > across to this: > > > Write a version of a palindrome recogniser that accepts a file name from > > > the user, reads each line, and prints the line to the screen if it is a > > > palindrome.(by http://www.ling.gu.se/~lager/python_exercises.html) > > > > > > I think I coded it correctly but still I get no output. I do not have any > > > errors I just do not get any output. > > > > > > This is the code: > > > > > import is_palindrome > > > > > > filename = raw_input('Enter a file: ') # A text file > > > f = open(filename) > > > while True: > > > line = f.readline() > > > > The line includes the trailing newline character which breaks the symmetry: > > > > >>> "abba" == "abba"[::-1] > > True > > >>> "abba\n" == "abba\n"[::-1] > > False > > > > Use > > > > word = line.strip() > > > > to remove all leading and trailing whitespace. > > > > > if len(line) == 0: > > > break > > > elif is_palindrome.is_palindrome(line): > > > print line, > > > f.close() > > > > Note that python allows you to iterate over the lines of a file with > > > > for line in f: > > ... > > > > Combining these modifications: > > > > for line in f: > > word = line.strip() > > if is_palindrome.is_palindrome(word): > > print word Thank you a lot it worked! -- http://mail.python.org/mailman/listinfo/python-list