-3

I am trying to write a program that reads a list of scores and then assigns a letter grade based on the score. Define a function to prompt user to enter valid scores until they enter a sentinel value -999. The function should create a list and return the list. I keep getting my sentinel value -999 into my list. How do i prevent this?

def main():
   grade = getScore()
   abcGrade = getGrade(grade)
   print(grade, "is an", abcGrade)


def getScore():
   grade = []
   while grade != -999:
      grade = int(input("Enter grades (-999 ends): "))
   return grade

def getGrade(grade):
   best = 100
   if grade >= best - 10:
      return 'A'
   elif grade >=  best - 20:
      return 'B'
   elif grade >= best - 30:
      return 'C'
   elif grade >= best - 40:
      return 'D'
   else:
      return 'F'

main()
Hassan Ali
  • 1
  • 1
  • 2
  • 5
  • Possible duplicate of [Python 3- assigns grades](http://stackoverflow.com/questions/36558696/python-3-assigns-grades) – Zorgmorduk Apr 11 '16 at 20:58

2 Answers2

0

In this piece of code, you're not adding the value entered by the user to the list grade; you're re-defining grade so it's no longer a list but instead an integer:

def getScore():
   grade = []
   while grade != -999:
      grade = int(input("Enter grades (-999 ends): "))
   return grade

This wouldn't fly in strict, type-safe languages but, hey, it's python :)

To fix it, rename the list (grades would be an intuitive name) and use append() to add the value of grade to it. Then, return grades, not grade to get a list back.

jDo
  • 3,962
  • 1
  • 11
  • 30
-1

That's what you're looking for:

from statistics import mean

def main():
   grades = getScores()
   grade = mean(grades)
   abcGrade = getGrade(grade)
   print(grade, "is an", abcGrade)


def getScores():
   grades = []
   while True:
      grade = int(input("Enter grades (-999 ends): "))
      if grade == -999: return grades
      grades.append(grade)

def getGrade(grade):
   best = 100
   if grade >= best - 10:
      return 'A'
   elif grade >=  best - 20:
      return 'B'
   elif grade >= best - 30:
      return 'C'
   elif grade >= best - 40:
      return 'D'
   else:
      return 'F'

main()

I've done as little modifications as I can. You must get all the grades and take the mean. The problem in your code was that it didn't return any value or append() to the list.

Bharel
  • 23,672
  • 5
  • 40
  • 80