Simple I/O problem can't get solved

N

nickgan.sps

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?
 
J

Jussi Piitulainen

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()

There's a newline at the end of each input line. Strip that. (It might
be another sequence that means end-of-line in your system. It can
still be stripped as trailing whitespace. Strings have a method for
stripping trailing whitespace.)
 
P

Peter Otten

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
 
N

nickgan.sps

Τη ΠαÏασκευή, 21 Ιουνίου 2013 12:15:59 μ.μ. UTC+3,ο χÏήστης Peter Otten έγÏαψε:
(e-mail address removed) 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:

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!
 
C

Chris Angelico

Combining these modifications:

for line in f:
word = line.strip()
if is_palindrome.is_palindrome(word):
print word

Minor quibble: I wouldn't use the name 'word' here, unless you're
expecting the file to consist of one-word lines (such as DICTOT.DIC
from old PMMail). For detecting phrase/sentence palindromes, I'd keep
the name 'line'.

ChrisA
 
P

Peter Otten

Chris said:
Minor quibble: I wouldn't use the name 'word' here, unless you're
expecting the file to consist of one-word lines (such as DICTOT.DIC
from old PMMail). For detecting phrase/sentence palindromes, I'd keep
the name 'line'.

Somehow it didn't occur to me that you might test anything but words.
However, if you want to check sentences (as some unused code in the original
post suggests) I think you should not strip off the newline and leave the
necessary cleanup to the test function:
.... t = "".join(c for c in s.casefold() if c.isalnum())
.... return t == t[::-1]
....True
 
D

Dennis Lee Bieber

Minor quibble: I wouldn't use the name 'word' here, unless you're
expecting the file to consist of one-word lines (such as DICTOT.DIC
from old PMMail). For detecting phrase/sentence palindromes, I'd keep
the name 'line'.
There's also the matter of whether one is looking for strict
palindromes -- where spacing is included (but not letter case)

Able was I ere I saw Elba

or a looser definition where only the letters are involved in the
determination (again ignore case and punctuation, but also ignore the
spaces between words)

Madam I'm Adam
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top