Before we begin, two etiquette requests:

  - please supply a meaningful subject line; it helps everyone keep track of the 
discussions; this one might have used something like "help with simple grading 
problem"

  - please see if your mailer (GMail?) can be told to send just plain text to 
this list

Anyway, to the topic...

On 14May2014 13:48, JEAN MICHEL <jeanrmic...@gmail.com> wrote:
I'm a Python beginner trying write a program that reads outside txt files,
takes the data like the name and test grades of students then calculate the
average and also assigns a grade and writes the data into a new txt file.
I'm having difficulties writing the program so far I've been able to write
up half of the program but I am noticing there might be bugs. I've tried
running the program but every time I do, my program output is blank and
there is no error messages

In there circumstances it can be helpful to insert "print" statements in various places in the program to see what parts of it are actually being run, and with what values.

here is the program

def calcaverage(test1,test2,test3):
   for count in range(line):

The first thing that catches my eye is that "line" is not a variable in this function. You clearly mean it to have a value, but it is not supplied. Normally it would come in as a parameter with "test1, test2, test3".

On further inspection, you don't use "line", and the function does not return "grade".

In Python, all variables in a function are, generally, "local" variables; this is good practice in most other languages too - it means that you can look at a function on its own without knowing much about the rest of the program, and also means that what happens inside the function stay inside the function and does not accidentally affect the rest of the program.

It looks like your function here calculates values from the [count] element of the three test lists. So I would advocate:

  - get rid of the "for" loop - it belongs in your main program, not here

  - pass in "count" and "lettergrades" as parameters to the function - it needs 
to be given them

  - return "grade" from the function, by putting:

      return grade

    at the bottom

[...snip...]
name=[]
test1=[]
test2=[]
test3=[]
averagescore=[]
lettergrades=[]
with open ('/period1.txt', 'r') as infile:

You may mean just "period1.txt" here? On a UNIX system "/period1.txt" would be at the top of the system directory tree, not in your current directory.

   line = infile.readline()
   while line in infile:

I suspect this is where your problem with no output lies.

I would expect you want to iterate over every line in the input file.

What you are actually doing above is two things:

  - reading the first line of the file, just once

  - examining the rest of the file to see if the line occurs later (presumably 
not)

Because an open text file is iterable, your while condition:

  line in infile

actually loads the rest of the file to see if "line" is "in" it. That reads everything. And becuase (probably) the line does not occur a second time, the while loop does not every run once, thus no output.

Replace these two lines with this:

  for line in infile:

which will read each line in turn for processing. Then see what happens.

Note that you do this again lower down. I am not sure what you intend to happen here. Put it "print" statements to see what actually happens - it should help you figure out what you really need to do.

[...snip...]
infile.close()

You do not need to "infile.close()". The original:

  with open ('/period1.txt', 'r') as infile:

will do that for you.

print(line)

This is at the bottom, outside all the loops. It can at best print the last line of the file. I do not know what you actaully intend here.

See if any of these suggestions help you progress with your program, and report back (by replying to this thread) when you have new problems or new questions.

Cheers,
Cameron Simpson <c...@zip.com.au>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to