input: Write a function to print a formatted table of grades for a given set of students. Each student is represented by a dictionary containing their name (as a string) and their grade (as an integer). The function should ensure that the column widths adapt to the longest name. If the list of students is empty, the function should simply return without printing anything.
  
  def print_grade_table(students):
      if not students:
          return
      max_name_length = max(len(student['name']) for student in students)
      line_template = "{{name:<{max_name_length}}}   {{grade}}".format(max_name_length=max_name_length)
      header = line_template.format(name='Name', grade='Grade')
      sep = '-' * len(header)
      print(header)
      print(sep)
      for student in students:
          print(line_template.format(**student))
  
  assert print_grade_table([{'name': "John", 'grade': 92}, {'name': "Alice", 'grade': 95}, {'name': "Bob", 'grade': 87}]) is None
  assert print_grade_table([]) is None
output: def print_grade_table(students):
      if not students:
          return
      max_name_length = max(len(student['name']) for student in students)
      line_template = "{{name:<{max_name_length}}}   {{grade}}".format(max_name_length=max_name_length)
      header = line_template.format(name='Name', grade='Grade')
      sep = '-' * len(header)
      print(header)
      print(sep)
      for student in students:
          print(line_template.format(**student))