Démonstration de l'usage de l'API Sqlite3 pour encoder des élèves.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

3 лет назад
3 лет назад
3 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. class FormatError(Exception):
  2. pass
  3. sample = [
  4. ['Id', 'Nom', 'Prénom'],
  5. ['1', 'Tiny', 'Toon'],
  6. ['2', 'Wile E.', 'Coyote'],
  7. ['33', 'Bugs', 'Bunny'],
  8. ]
  9. def max_lengths(table):
  10. """
  11. retourne les largeurs maximales des colonnes d'un tableau
  12. Paramètres
  13. ----------
  14. table: list
  15. Le tableau constitué d'une liste (lignes) de listes
  16. (cellules). Les nombres de cellules pour chaque ligne
  17. être égaux
  18. Retourne
  19. --------
  20. une liste d'entiers correspondant aux largeurs maximales
  21. pour de chacune des colonnes du tableau
  22. Exemple
  23. -------
  24. >>> sample = [
  25. ['Id', 'Nom', 'Prénom'],
  26. ['1', 'Tiny', 'Toon'],
  27. ['2', 'Wile E.', 'Coyote'],
  28. ['33', 'Bugs', 'Bunny'],
  29. ]
  30. >>> max_lengths(sample)
  31. [2, 7, 6]
  32. """
  33. nb_lines = len(table)
  34. nb_columns = len(table[0])
  35. max_lengths = []
  36. for num_column in range(nb_columns):
  37. column_lengths = []
  38. for line in table:
  39. cell_content = str(line[num_column])
  40. column_lengths.append(len(cell_content))
  41. max_column_length = max(column_lengths)
  42. max_lengths.append(max_column_length)
  43. return max_lengths
  44. def print_cell(text, width, alignment='left', padding=' '):
  45. """affiche un texte dans une cellule d'une largeur définie
  46. Paramètres
  47. ----------
  48. text : str
  49. Le texte à afficher. Si l'argument est d'un type différent, il est
  50. converti en texte à l'aide de str(texte)
  51. width : int
  52. La largeur de la cellule, doit être supérieure ou égale à len(text)
  53. alignement : str, optionel
  54. L'alignement par défaut du texte dans la cellule. Les valeurs valides
  55. sont 'left', 'center' ou 'right'. 'left' par défaut.
  56. padding : str, optionel
  57. Le caractère à utiliser pour remplir les espaces vides de la cellule.
  58. L'espace est utilisé par défaut
  59. Returns
  60. -------
  61. None
  62. La fonction ne retourne rien
  63. Exemple
  64. -------
  65. >>> print_cell('Bob', 20, alignment='center', padding='*')
  66. ********Bob*********
  67. """
  68. # Gestion des arguments invalides
  69. text = str(text)
  70. if (not type(width) == int) or (len(text) > width) :
  71. raise FormatError("'width' doit être un nombre entier valant au moins " \
  72. "la longeur de 'text'")
  73. if not alignment in ['left', 'right', 'center']:
  74. raise FormatError("'alignment' doit être une chaîne choisie parmi " \
  75. "'left', 'center' ou 'right'")
  76. if not type(padding) == str or len(padding) != 1:
  77. raise FormatError("'padding' doit être une chaîne ne contenant qu'un " \
  78. "seul caractère")
  79. empty_spaces = width - len(text)
  80. if alignment == 'left':
  81. print(text + padding * empty_spaces, end="")
  82. elif alignment == 'center':
  83. left_spaces = empty_spaces // 2
  84. right_spaces = empty_spaces - left_spaces
  85. print(left_spaces*padding + text + right_spaces*padding, end="")
  86. else:
  87. print(padding*empty_spaces + text, end="")
  88. def print_row(cells, lengths, left_c='|', middle_c='|', right_c='|'):
  89. """affiche une ligne de contenu d'un tableau
  90. arguments
  91. ---------
  92. cells : list
  93. La liste des contenus à afficher (les cellules)
  94. lenghts : list
  95. Une liste d'entiers, les tailles respectives de chaque cellule
  96. à afficher
  97. left_c, middle_c, right_c : string (optionel)
  98. Chaînes d'un caractère à utiliser comme délimiteurs du tableau
  99. """
  100. nb_cells = len(cells)
  101. print(left_c, end="")
  102. for num_row in range(nb_cells):
  103. print_cell(cells[num_row], lengths[num_row])
  104. if num_row < nb_cells-1:
  105. print(middle_c, end='')
  106. print(right_c)
  107. def print_table(table):
  108. """affiche un tableau complet avec titres
  109. arguments
  110. ---------
  111. table : list
  112. le tableau à imprimer, sous forme d'une liste de listes,
  113. les lignes du tableau. La liste doit au moins comporter
  114. deux lignes, la liste des titres et une ligne de contenu.
  115. """
  116. lengths = max_lengths(table)
  117. # Bordure supérieure
  118. border = []
  119. for width in lengths:
  120. border.append('─' * width)
  121. print_row(border, lengths, left_c='╭', middle_c='┬', right_c='╮')
  122. # 1ère ligne du tableau
  123. for line in table[:1]:
  124. print_row(line, lengths)
  125. # Bordure entre titres et lignes
  126. border = []
  127. for width in lengths:
  128. border.append('━' * width)
  129. print_row(border, lengths, left_c='┝', middle_c='┿', right_c='┥')
  130. # lignes suivantes du tableau
  131. for line in table[1:]:
  132. print_row(line, lengths)
  133. # Bordure inférieure
  134. border = []
  135. for width in lengths:
  136. border.append('─' * width)
  137. print_row(border, lengths, left_c='╰', middle_c='┴', right_c='╯')
  138. # print_table(sample)