dimanche 7 novembre 2021

Why is this simple program exercise not returning False?

Write a function is_better_than_avg(students, pos), that takes two argument students is the list of all students' dictionaries position is an integer - position of student in the list we want to check. Checking works like this - count the average of all grades in the school (upper cell) compare the value to the student's average. Return True if student has a avg greater that the school avg, otherwise return False

I don't know why the second execution of the program says 'True' instead of 'False'.

# Function for testing purposes
def test(got, expected):
  if got == expected:
    prefix = ' OK '
  else:
    prefix = "  Something's wrong  "
  print(prefix,' got:',repr(got),'expected:',repr(expected))
list_of_students = []
list_of_students.append(kosma) # appending the student k1sma

def is_passed(student_dict):
  return avg(student_dict)>=3.0
  
def school_avg(students):
  all = 0
  licznik = 0
  for a in students:
    all = all + avg(a)  #dodaje średnią sprawdzanego studenta do 'all'
    licznik = licznik + 1 #dodaje 1 do liczniku

  return all / licznik

list_of_students.append({
    "username": "mikub",
    "age":24,
    "is_blocked": False,
    "grades": [5,5,5,5]
})

list_of_students.append({
    "username": "ewa",
    "age":24,
    "is_blocked": False,
    "grades": [1,3,3,2,1,1,1,1,1,1]
})

list_of_students.append({
    "username": "robert",
    "age":24,
    "is_blocked": False,
    "grades": [5,5,5,5,5,1]
})
list_of_students.append({
    "username": "radek",
    "age":24,
    "is_blocked": False,
    "grades": [1,3,3,2,5,5,5]
})

list_of_students.append({
    "username": "kasia",
    "age":24,
    "is_blocked": False,
    "grades": [5,5,5,1]
})

list_of_students.append({
    "username": "kasia",
    "age":24,
    "is_blocked": False,
    "grades": [5,1,1,1,1,5,1]
})
list_of_students.append({
    "username": "jola",
    "age":24,
    "is_blocked": False,
    "grades": [5,4,5,5,5,4]
})

#this is the important part

def is_better_than_avg(students,pos):
  for pos in students:
    if avg(pos) > school_avg(students):
      return True
    elif avg(pos) < school_avg(students):
      return False

test(is_better_than_avg(list_of_students,0),True) #returns True as it should
test(is_better_than_avg(list_of_students,6),False) #idk why this returns True as well

Aucun commentaire:

Enregistrer un commentaire