Hi, I'm working on this problem in my python programming class and need help with part of it. I need to have it display a "F" for anyones grade that is below 60, and also have it display the amount of "F" students, as well as the percentage of students who passed. My code correctly displays the points earned by each student but i can't figure out the rest.
The students and their corresponding grades are:
Johnson Smith: 93
Maryanne James: 80
Stanton Chase: 45
Mildred Morris: 90
George Deitz: 89
Maisie Kling: 79
My code is as follows:

def main():
    file_students = open("student_points.txt" , "r")
    stu_name = file_students.readline() #read the first record
                                        #which is the first student's name
    num_stu = 0

    print("Student\t\t\tPoints\t\tGrade")
    print("--------------------------------\n")
    while stu_name != "":
        stu_name = stu_name.rstrip("\n")    #strip \n from name
        stu_points = file_students.readline() #read points
        stu_points = int(stu_points)     #cast points into an int

        print(stu_name, "\t\t", stu_points, sep="")
        num_stu += 1

        stu_name = file_students.readline()


    file_students.close()
    print()
    print("Number of students processed =", num_stu)

main()

Thanks for any help

Recommended Answers

Here https://docs.python.org/3/reference/expressions.html?highlight=precedence#value-comparisons are the comparison operators in python. You must write

if stu_points < 60:
    print("F")
Jump to Post

All 11 Replies

Re: Need help with part of this problem 80 80

Your code needs an if statement to determine if stu_points is below 60 and print an F in that case.

Re: Need help with part of this problem 80 80

@Gribouillis I keep getting invalid syntax for putting

if stu_points is 60>:
    print("F")

I don't understand what is invalid

Re: Need help with part of this problem 80 80

Here https://docs.python.org/3/reference/expressions.html?highlight=precedence#value-comparisons are the comparison operators in python. You must write

if stu_points < 60:
    print("F")
commented: I keep getting the "F" to go on a separate line, do you know how I could get the F to display on the same line as "45"? Thank you +0
Re: Need help with part of this problem 80 80

@Gribouillis I keep getting the "F" to go on a separate line, do you know how I could get the F to display on the same line as "45"? Thank you

Re: Need help with part of this problem 80 80

Is this what you were trying to do?

def main():
    f = open('student_points.txt', 'r')
    contents = []

    for line in f:
            contents.append(line)

    f.close()

    print('Student\t\t\tPoints\t\tGrade')
    print('----------------------------------------------\n')

    num_stu = 0; num_passed = 0
    for content in contents[:]:
            num_stu += 1
            stu_name = content.split(':')[0]
            stu_points = content.split(':')[1]
            print(stu_name + '\t\t' + stu_points.strip('\n'), end='')
            if int(stu_points) < 60:
                    print('\t\tF')
            else:
                    print('')
                    num_passed += 1

    print('')
    print('Number of students processed =', num_stu)
    print('Number of students who passed = %.0f' % (num_passed / num_stu * 100) + '%')

if __name__ == '__main__':
    main()

This is the output:

Student         Points      Grade
----------------------------------------------

Johnson Smith        93
Maryanne James       80
Stanton Chase        45     F
Mildred Morris       90
George Deitz         89
Maisie Kling         79

Number of students processed = 6
Number of students who passed = 83%
Re: Need help with part of this problem 80 80

Which version of python are you using? I'm using 3.5.1 and this code does not work

I'm using Python version 3.5.1. What do you mean the code does not work? Please describe the symptoms so I can at least have a chance of solving your problem. "This code does not work" is the most unhelpful problem report that you could ever devise.
And here's to show that it does work. https://youtu.be/dkgTJIwJMyA

Re: Need help with part of this problem 80 80

@Freshly is something wrong with my if statement in my code? The "F" keeps displaying itself on a new line below the 45. I appreciate you trying to help me.

Re: Need help with part of this problem 80 80

The print function of Python 3 adds a newline character ('\n') by default. To get the F to display on the same line, pass line 14 print(stu_name, "\t\t", stu_points, sep="") from your code above the keyword argument end="" like this print(stu_name, "\t\t", stu_points, "\t", sep="", end="").

>>> while True: # The print will add a newline character and print the F on the next line
...     print(stu_name, "\t\t", stu_points, sep="")
...     if stu_points < 60:
...         print("F")
...     break
... 
Stanton Chase       45
F
>>> while True: # Passing the keyword argument end="" to print will print F on the same line
...     print(stu_name, "\t\t", stu_points, "\t", sep="", end="")
...     if stu_points < 60:
...         print("F")
...     break
... 
Stanton Chase       45  F
>>>
commented: Nevermind I finally got it, thank you. +0
Re: Need help with part of this problem 80 80

@Freshly I'm about to give up, I literally typed this into my code and it's still not working. Now it only displays the first name in the list. I dont understand what's wrong. Nothing I put seems to work, so frustrating.

Re: Need help with part of this problem 80 80

@Freshly I put the line you suggested and now it does put the 45 on the same line but it also repeats the other names. Please send file to me?

Re: Need help with part of this problem 80 80

Just copy and paste the code above and keep on trying. Anyway if you want the file that I made, you can download it here: https://dl.dropbox.com/s/m67xr7gn7h6f9to/daniweb.zip

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.19 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.