Hi all,

New to the forum here, and coding in general. I am posting because I am having a problem with a simple program intended to act as a word, character and line counter, with each counter being its own function.

I keep running into the same problem over and over. Everything works fine if I don't break them out into separate functions. But when I break them into individual functions, something breaks. If I call the linecount function first, then it will work fine, but the other two return a value of 0. If I call the other two first, then the linecount function will will return a value of 0.

I am sure something is happening as variables are passed from the main function to linecount, but I can't seem to understand why it's changing. My understanding is that passing a variable into a function as a parameter wouldn't alter the original value (it's only modified locally within the local function).

Anyway, here is what I have. I removed most of the comments so it was shorter and quicker for people to read. If that was a bad move (again, I am a complete beginner) then let me know and i will post the commented version.

I am not looking for someone to fix my code, as much as help me understand what I am missing.

def linecount(x):
    lines = 0
    for line in x:
        lines += 1
    return lines

def wordcount(wc_target):
    split_words = wc_target.split(None)     
    words = len(split_words)                
    return words                            

def charactercount(cc_target):
    characters = 0
    for number in cc_target:
        characters += 1
    return characters

def main():

    print """
    This program will evaluate a text (.txt) file, count the number
    of lines, words, and total characters in the file you enter then
    display each value.

    filename = raw_input("Please enter the name of the file you would like to count: ")
    readfile = open(filename)
    listdata = readfile.read()

    print "For the file %s, here are your values:" % filename
    print "Lines     :", linecount(readfile)
    print "Words     :", wordcount(listdata)
    print "Characters:", charactercount(listdata)


thanks for any thoughts, guidance!

9 Years
Discussion Span
Last Post by badplasmid

Actually quite simple. After readfile.read() seek points to end of the file. You can reset seek to the beginning of the file by inserting:
right ofter line:
listdata = readfile.read()


That was exactly the problem. I didn't realize it would read and then point to the end of the file! I was trying different things for hours trying to get it sorted.

As a total beginner, I would never have thought to do something like that.

Thanks for the help, that is one mistake I won't be making again.


This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.