Spaces:
Sleeping
Sleeping
File size: 28,958 Bytes
0b86555 774e27c 0b86555 774e27c 0b86555 774e27c 0b86555 774e27c 0b86555 774e27c 0b86555 774e27c 0b86555 774e27c 0b86555 774e27c 0b86555 774e27c ac65f3b 774e27c ac65f3b 774e27c 07dd12c 774e27c ac65f3b 774e27c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 |
import gradio as gr
import random
import pandas as pd
import numpy as np
import json
# Préparation des données
questions = [
{
"question": "Quelle est la différence principale entre un algorithme classique et un algorithme de Machine Learning ?",
"options": [
"A) Les algorithmes classiques sont plus précis",
"B) Les algorithmes de Machine Learning utilisent les données historiques pour produire un modèle prédictif",
"C) Les algorithmes classiques fonctionnent sur de plus grandes bases de données",
"D) Les algorithmes de Machine Learning sont toujours supervisés"
],
"correct": "B",
"category": "Fondamentaux du Machine Learning"
},
{
"question": "Dans un modèle linéaire f(x) = ax + b, que représentent a et b ?",
"options": [
"A) a est l'ordonnée à l'origine et b est la pente",
"B) a est la pente et b est l'ordonnée à l'origine",
"C) a est la variable d'entrée et b est la variable de sortie",
"D) a est la moyenne et b est l'écart-type"
],
"correct": "B",
"category": "Fondamentaux du Machine Learning"
},
{
"question": "Quel type d'apprentissage utilise des données étiquetées pour entraîner un modèle ?",
"options": [
"A) Apprentissage non supervisé",
"B) Apprentissage par renforcement",
"C) Apprentissage supervisé",
"D) Apprentissage semi-supervisé"
],
"correct": "C",
"category": "Fondamentaux du Machine Learning"
},
{
"question": "Qu'est-ce que le surapprentissage (overfitting) ?",
"options": [
"A) Un modèle qui apprend trop rapidement",
"B) Un modèle qui ne parvient pas à capturer les tendances dans les données d'entraînement",
"C) Un modèle qui capture trop bien les données d'entraînement mais généralise mal",
"D) Un modèle qui nécessite trop de données d'entraînement"
],
"correct": "C",
"category": "Fondamentaux du Machine Learning"
},
{
"question": "Pourquoi utilise-t-on le Deep Learning plutôt que le Machine Learning classique pour certains problèmes ?",
"options": [
"A) Le Deep Learning est toujours plus précis",
"B) Le Machine Learning classique est limité avec les données non-structurées et de grande dimension",
"C) Le Deep Learning nécessite moins de données",
"D) Le Machine Learning classique est plus complexe à implémenter"
],
"correct": "B",
"category": "Fondamentaux du Machine Learning"
},
{
"question": "Qu'est-ce qu'un perceptron ?",
"options": [
"A) Un algorithme de classification d'images",
"B) L'élément de base d'un réseau de neurones artificiels, inspiré des neurones biologiques",
"C) Une technique de visualisation de données",
"D) Un type de fonction d'activation"
],
"correct": "B",
"category": "Réseaux de Neurones Artificiels"
},
{
"question": "Quels sont les éléments caractéristiques d'un perceptron ?",
"options": [
"A) Son activation, ses connexions d'entrée, sa fonction d'entrée et sa fonction d'activation",
"B) Sa taille, sa couleur, sa forme et sa position",
"C) Son algorithme, sa mémoire, son processeur et son interface",
"D) Son bias, son taux d'apprentissage, sa dimension et sa profondeur"
],
"correct": "A",
"category": "Réseaux de Neurones Artificiels"
},
{
"question": "Quelles sont les principales couches d'un réseau de neurones ?",
"options": [
"A) Couche d'entrée, couche cachée, couche de sortie",
"B) Couche primaire, couche secondaire, couche tertiaire",
"C) Couche superficielle, couche intermédiaire, couche profonde",
"D) Couche d'acquisition, couche de traitement, couche de restitution"
],
"correct": "A",
"category": "Réseaux de Neurones Artificiels"
},
{
"question": "Comment fonctionne l'algorithme de rétropropagation (backpropagation) ?",
"options": [
"A) Il propage les entrées de la première à la dernière couche",
"B) Il calcule le gradient de la fonction d'erreur et met à jour les paramètres du réseau",
"C) Il supprime les neurones inutiles du réseau",
"D) Il compare les sorties de différents modèles"
],
"correct": "B",
"category": "Réseaux de Neurones Artificiels"
},
{
"question": "Qu'est-ce qu'une fonction d'activation dans un réseau de neurones ?",
"options": [
"A) Une fonction qui initialise les poids du réseau",
"B) Une fonction qui transforme la somme pondérée des entrées d'un neurone en sortie",
"C) Une fonction qui détermine la vitesse d'apprentissage",
"D) Une fonction qui compte le nombre de neurones actifs"
],
"correct": "B",
"category": "Réseaux de Neurones Artificiels"
},
{
"question": "Qu'est-ce qu'un hyperparamètre dans un réseau de neurones ?",
"options": [
"A) Un paramètre dont la valeur est apprise pendant l'entraînement",
"B) Un paramètre qui contrôle les autres paramètres",
"C) Un paramètre constant dont la valeur est fixée avant le début du processus d'apprentissage",
"D) Un paramètre qui change automatiquement pendant l'exécution"
],
"correct": "C",
"category": "Hyperparamètres"
},
{
"question": "Parmi ces éléments, lequel n'est PAS un hyperparamètre ?",
"options": [
"A) Taux d'apprentissage",
"B) Poids des connexions entre neurones",
"C) Nombre de couches cachées",
"D) Taille des échantillons (batch size)"
],
"correct": "B",
"category": "Hyperparamètres"
},
{
"question": "Quel est l'effet d'un taux d'apprentissage trop élevé ?",
"options": [
"A) L'apprentissage est plus lent mais plus stable",
"B) L'apprentissage est plus rapide mais potentiellement instable",
"C) L'apprentissage ne démarre pas",
"D) L'apprentissage est toujours meilleur"
],
"correct": "B",
"category": "Hyperparamètres"
},
{
"question": "À quoi sert la technique de \"dropout\" dans un réseau de neurones ?",
"options": [
"A) À augmenter la vitesse d'entraînement",
"B) À réduire le surapprentissage en désactivant aléatoirement des neurones",
"C) À ajouter plus de neurones progressivement",
"D) À stabiliser la fonction d'activation"
],
"correct": "B",
"category": "Hyperparamètres"
},
{
"question": "Qu'est-ce que la technique d'\"Early Stopping\" ?",
"options": [
"A) Arrêter l'entraînement après un nombre fixe d'époques",
"B) Interrompre l'entraînement lorsqu'il n'y a plus d'amélioration sur le jeu de validation",
"C) Commencer l'entraînement avec moins de neurones",
"D) Limiter le nombre d'exemples d'entraînement"
],
"correct": "B",
"category": "Hyperparamètres"
},
{
"question": "Quelle est la définition du Deep Learning ?",
"options": [
"A) Une technique d'apprentissage automatique basée sur des arbres de décision profonds",
"B) Une catégorie d'IA qui exploite des réseaux de neurones artificiels avec plusieurs couches",
"C) Un algorithme spécifique pour l'analyse de données complexes",
"D) Une méthode d'apprentissage par renforcement avancée"
],
"correct": "B",
"category": "Deep Learning"
},
{
"question": "Quelle est la principale différence entre le Deep Learning et le Machine Learning traditionnel ?",
"options": [
"A) Le Deep Learning nécessite moins de données",
"B) Le Machine Learning utilise des réseaux de neurones plus complexes",
"C) Le Deep Learning utilise des réseaux de neurones à plusieurs couches pour apprendre des représentations hiérarchiques",
"D) Le Machine Learning est plus récent que le Deep Learning"
],
"correct": "C",
"category": "Deep Learning"
},
{
"question": "Lequel de ces modèles n'appartient PAS au Deep Learning ?",
"options": [
"A) CNN (Convolutional Neural Network)",
"B) RNN (Recurrent Neural Network)",
"C) SVM (Support Vector Machine)",
"D) Transformer"
],
"correct": "C",
"category": "Deep Learning"
},
{
"question": "Pourquoi le Deep Learning est-il particulièrement efficace pour traiter des images ?",
"options": [
"A) Parce qu'il utilise moins de ressources computationnelles",
"B) Parce qu'il peut extraire automatiquement des caractéristiques hiérarchiques",
"C) Parce qu'il nécessite moins de données d'entraînement",
"D) Parce qu'il est plus simple à implémenter"
],
"correct": "B",
"category": "Deep Learning"
},
{
"question": "Qu'est-ce que le \"transfer learning\" en Deep Learning ?",
"options": [
"A) Transférer des données d'un ordinateur à un autre",
"B) Transférer la connaissance acquise sur un jeu de données \"source\" pour mieux traiter un nouveau jeu de données \"cible\"",
"C) Transférer un modèle d'un langage de programmation à un autre",
"D) Transférer l'apprentissage d'un réseau de neurones à un autre type d'algorithme"
],
"correct": "B",
"category": "Deep Learning"
},
{
"question": "Quelles sont les principales opérations appliquées dans un CNN ?",
"options": [
"A) Convolution, pooling et fonction d'activation",
"B) Addition, soustraction et multiplication",
"C) Encodage, décodage et normalisation",
"D) Segmentation, classification et régression"
],
"correct": "A",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "À quoi sert l'opération de convolution dans un CNN ?",
"options": [
"A) À réduire la taille de l'image",
"B) À détecter les caractéristiques d'une image",
"C) À augmenter le nombre de pixels",
"D) À transformer l'image en noir et blanc"
],
"correct": "B",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "Qu'est-ce que le \"pooling\" dans un CNN ?",
"options": [
"A) Une technique pour combiner plusieurs images",
"B) Une méthode pour réduire la dimensionnalité en conservant les informations importantes",
"C) Un algorithme de partage de poids",
"D) Une fonction d'activation spécifique aux CNN"
],
"correct": "B",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "Quel est le rôle du \"flattening\" dans un CNN ?",
"options": [
"A) Transformer une matrice multidimensionnelle en vecteur unidimensionnel",
"B) Aplatir physiquement le matériel informatique",
"C) Réduire le nombre de couches du réseau",
"D) Éliminer les variations d'intensité dans une image"
],
"correct": "A",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "Qu'est-ce que le \"padding\" dans une couche de convolution ?",
"options": [
"A) Une technique pour augmenter la taille des filtres",
"B) L'ajout de zéros autour des bords d'une image avant la convolution",
"C) Un paramètre qui détermine la couleur de fond",
"D) Une méthode pour réduire le bruit dans l'image"
],
"correct": "B",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "Que signifie le terme \"stride\" dans une couche de convolution ?",
"options": [
"A) La largeur des filtres utilisés",
"B) Le nombre de filtres appliqués",
"C) La distance de déplacement du filtre à chaque application",
"D) La profondeur de la couche de convolution"
],
"correct": "C",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "Parmi ces architectures, laquelle n'est PAS un modèle CNN ?",
"options": [
"A) VGG16",
"B) ResNet",
"C) LSTM",
"D) AlexNet"
],
"correct": "C",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "Quel type de problème un CNN n'est PAS conçu pour résoudre ?",
"options": [
"A) Classification d'images",
"B) Détection d'objets",
"C) Prédiction de séries temporelles",
"D) Segmentation sémantique"
],
"correct": "C",
"category": "Réseaux de Neurones à Convolution (CNN)"
},
{
"question": "Pour quel type de données les RNN sont-ils particulièrement adaptés ?",
"options": [
"A) Images 2D",
"B) Données séquentielles (texte, séries temporelles)",
"C) Graphes",
"D) Tables de données structurées"
],
"correct": "B",
"category": "Réseaux de Neurones Récurrents (RNN)"
},
{
"question": "Quelle est la caractéristique principale des RNN par rapport aux réseaux feed-forward ?",
"options": [
"A) Ils utilisent plus de neurones",
"B) Ils ont une mémoire interne qui conserve des informations sur les états précédents",
"C) Ils sont plus rapides à entraîner",
"D) Ils nécessitent moins de données d'entraînement"
],
"correct": "B",
"category": "Réseaux de Neurones Récurrents (RNN)"
},
{
"question": "Quel problème majeur affecte les RNN simples lors de l'apprentissage de dépendances à long terme ?",
"options": [
"A) Le problème du gradient explosif",
"B) Le problème du gradient qui disparaît (vanishing gradient)",
"C) Le problème de surapprentissage",
"D) Le problème de sous-apprentissage"
],
"correct": "B",
"category": "Réseaux de Neurones Récurrents (RNN)"
},
{
"question": "Quelle architecture a été développée pour résoudre le problème du gradient qui disparaît dans les RNN ?",
"options": [
"A) CNN",
"B) LSTM (Long Short-Term Memory)",
"C) GAN",
"D) ResNet"
],
"correct": "B",
"category": "Réseaux de Neurones Récurrents (RNN)"
},
{
"question": "Quelles sont les trois opérations principales dans une cellule LSTM ?",
"options": [
"A) Convolution, pooling, activation",
"B) Encodage, traitement, décodage",
"C) Forget Gate, Input Gate, Output Gate",
"D) Lecture, écriture, mise à jour"
],
"correct": "C",
"category": "Réseaux de Neurones Récurrents (RNN)"
},
{
"question": "À quoi sert la \"Forget Gate\" dans une cellule LSTM ?",
"options": [
"A) À supprimer complètement le réseau",
"B) À décider quelles informations de l'état précédent doivent être oubliées",
"C) À ignorer les nouvelles entrées",
"D) À réinitialiser tous les poids"
],
"correct": "B",
"category": "Réseaux de Neurones Récurrents (RNN)"
},
{
"question": "Quelle est l'innovation principale introduite par l'architecture Transformer ?",
"options": [
"A) L'utilisation exclusive de couches de convolution",
"B) Le mécanisme d'attention qui remplace les connexions récurrentes",
"C) L'élimination complète des couches cachées",
"D) L'utilisation de fonctions d'activation plus complexes"
],
"correct": "B",
"category": "Transformers et Mécanismes d'Attention"
},
{
"question": "Qu'est-ce que le \"Scaled Dot-Product Attention\" dans les Transformers ?",
"options": [
"A) Une technique pour augmenter la taille des matrices",
"B) Un mécanisme permettant de calculer l'importance relative entre différents éléments d'une séquence",
"C) Une méthode de normalisation des données",
"D) Un type de fonction d'activation"
],
"correct": "B",
"category": "Transformers et Mécanismes d'Attention"
},
{
"question": "Que représentent les trois composantes Q, K, V dans le mécanisme d'attention ?",
"options": [
"A) Questions, Kilomètres, Valeurs",
"B) Qualité, Kinésie, Vitesse",
"C) Query (requête), Key (clé), Value (valeur)",
"D) Quantité, Kurtosis, Variance"
],
"correct": "C",
"category": "Transformers et Mécanismes d'Attention"
},
{
"question": "Quelle est la différence entre le \"Self-Attention\" et le \"Multi-Head Attention\" ?",
"options": [
"A) Le Self-Attention s'applique à une seule séquence, tandis que le Multi-Head Attention combine plusieurs mécanismes d'attention en parallèle",
"B) Le Self-Attention utilise une tête, tandis que le Multi-Head Attention utilise plusieurs têtes physiques",
"C) Le Self-Attention est supervisé, tandis que le Multi-Head Attention est non supervisé",
"D) Le Self-Attention est utilisé pour les images, tandis que le Multi-Head Attention est utilisé pour le texte"
],
"correct": "A",
"category": "Transformers et Mécanismes d'Attention"
},
{
"question": "Quelle est la particularité du \"Masked Multi-Head Attention\" utilisé dans le décodeur d'un Transformer ?",
"options": [
"A) Il masque certains neurones aléatoirement",
"B) Il empêche les positions de faire attention aux positions futures",
"C) Il cache certaines parties de l'image",
"D) Il supprime les mots peu fréquents"
],
"correct": "B",
"category": "Transformers et Mécanismes d'Attention"
},
{
"question": "Quelle architecture a été introduite dans le papier \"Attention is All You Need\" ?",
"options": [
"A) ResNet",
"B) LSTM",
"C) Transformer",
"D) GAN"
],
"correct": "C",
"category": "Transformers et Mécanismes d'Attention"
},
{
"question": "Quel est le principe de base d'un auto-encodeur ?",
"options": [
"A) Encoder les données puis les décoder pour retrouver l'entrée originale",
"B) Classer automatiquement les données en catégories",
"C) Générer de nouvelles données aléatoires",
"D) Compresser les données de manière irréversible"
],
"correct": "A",
"category": "Auto-encodeurs"
},
{
"question": "Qu'est-ce qu'un \"bottleneck\" (goulot d'étranglement) dans un auto-encodeur ?",
"options": [
"A) Un problème technique qui ralentit l'entraînement",
"B) Une couche cachée de dimension réduite qui force le réseau à apprendre une représentation compressée",
"C) Un défaut dans l'architecture du réseau",
"D) Une limite dans la quantité de données qu'on peut traiter"
],
"correct": "B",
"category": "Auto-encodeurs"
},
{
"question": "Comment calcule-t-on généralement l'erreur de reconstruction dans un auto-encodeur ?",
"options": [
"A) Par la différence entre le nombre de neurones d'entrée et de sortie",
"B) Par la distance entre les représentations latentes de différentes entrées",
"C) Par la différence entre l'entrée originale et la sortie reconstruite",
"D) Par le temps nécessaire à l'encodage et au décodage"
],
"correct": "C",
"category": "Auto-encodeurs"
},
{
"question": "Qu'est-ce qui caractérise un \"Denoising Auto-Encoder\" ?",
"options": [
"A) Il produit des sorties sans bruit",
"B) Il ajoute du bruit aux données d'entrée et tente de reconstruire les données originales",
"C) Il filtre automatiquement les données bruitées",
"D) Il utilise le bruit comme fonction d'activation"
],
"correct": "B",
"category": "Auto-encodeurs"
},
{
"question": "Quelle est l'utilité principale des auto-encodeurs en Deep Learning ?",
"options": [
"A) Uniquement pour la compression de données",
"B) Pour la génération d'images réalistes",
"C) Pour la capture de la structure des données et l'apprentissage de représentations utiles",
"D) Pour remplacer les réseaux convolutifs"
],
"correct": "C",
"category": "Auto-encodeurs"
},
{
"question": "Quelle méthode est utilisée pour évaluer les performances d'un modèle de classification ?",
"options": [
"A) Régression linéaire",
"B) Matrice de confusion",
"C) Analyse en composantes principales",
"D) Clustering k-means"
],
"correct": "B",
"category": "Questions Diverses"
},
{
"question": "Qu'est-ce que l'augmentation de données (data augmentation) en Deep Learning ?",
"options": [
"A) L'ajout de nouvelles caractéristiques aux données existantes",
"B) La création de données synthétiques pour augmenter la taille du jeu d'entraînement",
"C) L'application de transformations aux données existantes pour créer de nouveaux exemples d'entraînement",
"D) L'augmentation artificielle du nombre d'époques d'entraînement"
],
"correct": "C",
"category": "Questions Diverses"
},
{
"question": "Quelle technique est utilisée pour éviter le surapprentissage dans les modèles de Deep Learning ?",
"options": [
"A) Augmenter le nombre de paramètres",
"B) Réduire le nombre d'exemples d'entraînement",
"C) Régularisation (comme L1, L2, dropout)",
"D) Utiliser uniquement des fonctions d'activation linéaires"
],
"correct": "C",
"category": "Questions Diverses"
},
{
"question": "Dans quel cas utiliserait-on le transfert d'apprentissage (transfer learning) ?",
"options": [
"A) Lorsqu'on dispose de très grandes quantités de données d'entraînement",
"B) Lorsqu'on a peu de données pour un problème mais qu'il existe un modèle pré-entraîné sur un problème similaire",
"C) Uniquement pour les problèmes de traitement du langage naturel",
"D) Lorsqu'on veut transférer les données d'un ordinateur à un autre"
],
"correct": "B",
"category": "Questions Diverses"
},
{
"question": "Quelle est la différence entre la segmentation sémantique et la détection d'objets ?",
"options": [
"A) La segmentation sémantique identifie chaque pixel d'une image, tandis que la détection d'objets localise les objets avec des boîtes englobantes",
"B) La segmentation sémantique fonctionne uniquement sur les images en noir et blanc",
"C) La détection d'objets est une technique dépassée, remplacée par la segmentation sémantique",
"D) Il n'y a pas de différence, ce sont deux termes pour la même technique"
],
"correct": "A",
"category": "Questions Diverses"
}
]
# Add correct_answers variable
correct_answers = [q["correct"] for q in questions]
def calculate_score(user_answers):
# Convertir les réponses utilisateur de A,B,C,D à 0,1,2,3
idx_answers = []
for ans in user_answers:
if ans == "A":
idx_answers.append(0)
elif ans == "B":
idx_answers.append(1)
elif ans == "C":
idx_answers.append(2)
elif ans == "D":
idx_answers.append(3)
else:
idx_answers.append(None) # Pour gérer les réponses vides
# Convertir les réponses correctes
correct_idx = []
for ans in correct_answers:
if ans == "A":
correct_idx.append(0)
elif ans == "B":
correct_idx.append(1)
elif ans == "C":
correct_idx.append(2)
elif ans == "D":
correct_idx.append(3)
# Calculer le score
score = 0
user_responses = []
for i in range(len(idx_answers)):
if idx_answers[i] is not None and idx_answers[i] == correct_idx[i]:
score += 1
user_responses.append(f"Question {i+1}: Correct ✓ - Votre réponse: {user_answers[i]}")
else:
user_responses.append(f"Question {i+1}: Incorrect ✗ - Votre réponse: {user_answers[i] if idx_answers[i] is not None else 'Non répondue'}, Réponse correcte: {correct_answers[i]}")
# Calculer la note sur 20
note_sur_20 = (score / len(correct_answers)) * 20
return score, note_sur_20, user_responses
# Modified qcm_app to handle multiple arguments from Gradio click event
def qcm_app(*user_responses):
# Convert tuple of responses to list
answers = list(user_responses)
# Calculer le score
score, note, detailed_responses = calculate_score(answers)
# Formatter la sortie
output = f"# Résultats du QCM sur la Gouvernance des Données\n\n"
output += f"## Score: {score}/{len(questions)} questions correctes\n"
output += f"## Note: {note:.2f}/20\n\n"
output += "## Détail des réponses:\n\n"
for resp in detailed_responses:
output += f"- {resp}\n"
return output
# Créer l'interface Gradio
with gr.Blocks(title="QCM - Gouvernance des Données") as demo:
gr.Markdown("# Questionnaire à Choix Multiples - Gouvernance des Données")
gr.Markdown("Répondez aux questions en sélectionnant la réponse correcte (A, B, C ou D).")
user_choices = []
with gr.Accordion("Questions", open=True):
for i in range(len(questions)):
with gr.Row():
with gr.Column(scale=10):
gr.Markdown(f"### {questions[i]['question']}")
for opt in questions[i]['options']:
gr.Markdown(f"- {opt}")
with gr.Column(scale=1):
# Changed from Dropdown to Radio for clickable answers
user_choice = gr.Radio(
choices=["A", "B", "C", "D"],
label=f"Question {i+1}"
)
user_choices.append(user_choice)
submit_btn = gr.Button("Soumettre")
output = gr.Markdown()
submit_btn.click(
fn=qcm_app,
inputs=user_choices,
outputs=output
)
if __name__ == "__main__":
demo.launch() |