I need help finishing a grade calculator program in python

For my computer science class I have to make a program that will calculate grades. This is my first computer science class (no prior experience) so I am struggling through it.

These are the directions:

  1. Ask the user for the number of tests, assignments, quizzes, and labs in their course.

  2. Ask the user if there is a final with a separate weight from the tests above, e.g. a course has 2 tests, each weighing 12.5%, and 1 final weighing 15%.

  3. For each category having a number > 0

    a. Prompt the user for the weighted percent, out of 100%, which should total 100% for all categories!!!

    b. Get the score(s) for the category.

    c. If the category is labs, then sum all the scores.

    d. Else, average the scores.

    e. Calculate the weighted average for the category.

  4. Using the weighted average of each category, calculate the grade in the course.

  5. Ask the user if he/she wants to calculate a grade for another class.

  6. If the user responds yes, then go back to step 1.

  7. Else, end the program.

My code so far:

def main():
    lists = get_user_input()
    get_scores(lists);
    get_weighted_average(lists)

def get_user_input():
#   How many?
    t = int(input("How many tests?: "))
    a = int(input("How many assignments?: "))
    q = int(input("How many quizzes?: "))
    l = int(input("How many labs?: "))

#   How much weight on grade?
    tw = float(input("Enter weight of tests: "))
    aw = float(input("Enter weight of assignments: "))
    qw = float(input("Enter weight of quizzes: "))
    lw = float(input("Enter weight of labs: "))
    lists = [t, a, q, l, tw, aw, qw, lw]
    return lists

def get_scores(lists):
    #   What are the scores?
    scores = [0] * 5
    for(x in range(lists[0]):
        test_scores = float(input("enter your test scores: "))
        scores[x] = test_scores
    for(x in range(lists[1]):
        test_scores = float(input("enter your assignment scores: "))
        scores[x] = assignment_scores
    for(x in range(lists[2]):
        test_scores = float(input("enter your quiz scores: "))
        scores[x] = quiz_scores
    for(x in range(lists[3]):
        test_scores = float(input("enter your lab scores: "))
        scores[x] = lab_scores
    sumlabs = 0
    for(x in range(lists[3]):
        sumlabs = sumlabs + scores[x]
    print(sumlabs)

def get_weighted_average(lists):

main()

I am not sure how to proceed so any help is much appreciated.

Answers


Averaging a score means adding them up and dividing by the number of them. You can use the fact that a list has a way to tell you how many elements it has. For example if x is a list then len(x) is the number of things in the list. You should be careful about not trying to calculate the score of an empty list, because that would mean dividing by zero. In the following function the 'if score_list:' will be true if there is something in the list. Otherwise it returns None (since the average is not defined).

def average_score(score_list):
    if score_list:               # makes sure list is not empty
       total = 0                 # our total starts off as zero
       for score in score_list:  # starts a loop over each score
          total += score         # increases the total by the score
       return total / len(score_list)  # returns aveage

To form a list of scores from user input, presuming the user will put them all on the same line when you prompt them, you can get a string from the user (presumably like: "13.4 12.9 13.2" And then use the string's split method to convert this to a list of strings like ["13.4", "12.9", "13.2"], and then convert this list of strings to a list of floats. Finally using the average function above you can get an average:

test_score_entry = raw_input("Enter your test scores separated by spaces: ")
test_sore_strings = test_score_entry.split()
test_scores = [float(_) for _ in test_score_strings]
average_score = average(test_scores)

Need Your Help

How to mock test a web service in PHPUnit across multiple tests?

php web-services soap phpunit

I am attempting to test a web service interface class using PHPUnit. Basically, this class makes calls to a SoapClient object. I am attempting to test this class in PHPUnit using the getMockFromWsdl

How to move an <input> element with jQuery?

javascript jquery input element

As the title says, I am looking for an efficient way to move a button when the mouse is moved over it (just for a little project I'm working on). I decided on using jQuery, but I am running into tr...