How is Everybody Doing? -print get_class_average(students) error


#1

Hi, I let code academy type the code up for me this time, and I tried running it in the python shell window, and keep running into the error “syntax invalid”, but it only tells me its a problem with the end line: print get_class_average(students)

Here’s the code:

data
lloyd = {
  "name": "Lloyd",
  "homework": [90.0, 97.0, 75.0, 92.0],
  "quizzes": [88.0, 40.0, 94.0],
  "tests": [75.0, 90.0]
}
alice = {
  "name": "Alice",
  "homework": [100.0, 92.0, 98.0, 100.0],
  "quizzes": [82.0, 83.0, 91.0],
  "tests": [89.0, 97.0]
}
tyler = {
  "name": "Tyler",
  "homework": [0.0, 87.0, 75.0, 22.0],
  "quizzes": [0.0, 75.0, 78.0],
  "tests": [100.0, 100.0]
}
logic
def average(numbers):
  total = sum(numbers)
  total = float(total)
  return total/len(numbers)

def get_average(student):
  homework = average(student["homework"])
  quizzes = average(student["quizzes"])
  tests = average(student["tests"])
  return 0.1 * homework + 0.3 * quizzes + 0.6 * tests

def get_letter_grade(score):
  if score >= 90:
    return "A"
  elif score >=80:
    return "B"
  elif score >=70:
    return "C"
  elif score >=60:
    return "D"
  else:
    return "F"

def get_class_average(class_list):
  results = []
  for student in class_list:
    student_avg = get_average(student)
    results.append(student_avg)
  return average(results)

students = [lloyd, alice, tyler]

print get_class_average(students)

#2

Given the error you report it would indicate you are running Python 3. The current curriculum is Python 2. However, if you wrap the argument to print, above, in parens it will be valid in both worlds.


#3

Thank you, that did solve the problem to why it was not running.
I now have another issue:

lloyd = {#Defining the student group average for lloyd
"name": “Lloyd”,
“homework”: [90.0, 97.0, 75.0, 92.0],
“quizzes”: [88.0, 40.0, 94.0],
“tests”: [75.0, 90.0]
}
alice = {
“name”: “Alice”,
“homework”: [100.0, 92.0, 98.0, 100.0],
“quizzes”: [82.0, 83.0, 91.0],
“tests”: [89.0, 97.0]
}
tyler = {
“name”: “Tyler”,
“homework”: [0.0, 87.0, 75.0, 22.0],
“quizzes”: [0.0, 75.0, 78.0],
“tests”: [100.0, 100.0]
}
def average(numbers):#Function for calculating student grades
total = sum(numbers)
total = float(total)
return total/len(numbers)

def get_average(student):
homework = average(student[“homework”])
quizzes = average(student[“quizzes”])
tests = average(student[“tests”])
return 0.1 * homework + 0.3 * quizzes + 0.6 * tests

def get_letter_grade(score):#function to define what kind of grade the student will receive
if score >= 90:
return "A"
elif score >=80:
return "B"
elif score >=70:
return "C"
elif score >=60:
return "D"
else:
return “F”

def get_class_average(class_list):
results = []
for student in class_list:
student_avg = get_average(student)
results.append(student_avg)
return average(results)

students = [lloyd, alice, tyler]

print (get_class_average(students))
print (get_letter_grade(students))

I am trying to get the grade A-F to print below the get_class_average and it keeps giving me different errors on how I word it. How can I get it to display the correct letter grade?


#4

The function expects a dictionary, not a list; that means only sending one student at a time as opposed to the whole student list.


#5

I’m trying to get it to print the class average as a whole. What would be the appropriate code to place there?


#6

If you want a letter grade for the whole class, then pass the class average to the letter grade function as a value.


#7

Can you give me an example on how to pass it?


#8

It keeps giving this error in my PythonShell window:

Traceback (most recent call last):
File “C:/Users/Platypus/Desktop/Programming Assignment 6.py”, line 64, in
print (get_letter_grade(students))
File “C:/Users/Platypus/Desktop/Programming Assignment 6.py”, line 42, in get_letter_grade
if score >= 90:
TypeError: ‘>=’ not supported between instances of ‘list’ and ‘int’


#9

It’s right there. You are getting the class average, but only printing it. Capture it first, then print as the final step, is how you solve this.

class_average = get_class_average(students)
class_grade = get_letter_grade(class_average)
print ("Class average: %.2f\nClass grade: %s" % (class_average, class_grade))

#10

Oh I see, It works now, I was just missing how to type it in. Sorry, long day. Thank you so much.


#11

It’s not the typing, it’s the thinking. We have to think in this language to speak it.


#12

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.