Machine de vote - Première

Image sans description
Auteur : kafka4prez | source| Licence

Prérequis

  • structures de contrôle ;
  • fonctions ;
  • boucles ;
  • tableaux à deux dimensions ;

Introduction

Vous allez concevoir une machine de vote truquée. C’est à dire que c’est vous qui allez choisir le résultat du vote. Mais attention ! Il y aura un audit avant le vote pour vérifier que votre machine n’est pas truquée.

Ce projet a été inspiré par la vidéo ci-dessous (en anglais, mais les sous- titres français sont disponibles) :

Nous allons seulement effleurer l’ensemble des possibilités de fraude avec un système basé sur les machines à voter. Nous nous intéressons simplement au code de la machine.

Présentation

Situation

Nous sommes en 2036 et les législateurs ont autorisé le vote électronique pour toutes les élections. Vous êtes chargé de concevoir une machine de vote pour les élections présidentielles de 2037. Vous êtes quelqu’un d’honnête mais on vous a proposé 50 milions d’euros pour faire gagner un candidat, dur de résister ! Vous allez donc devoir créer une machine de vote truquée qui va faire gagner un candidat précis. Mais bien sur, la machine ne devra tricher que pour le véritable vote, pas pour les tests qui le précéderont.

Le paysage politique ayant changé dans les années 2030, voici la liste des candidats :

  • Squeezie
  • Cyprien
  • Natoo
  • Michou
  • Norman
  • Amixem

Vous devez faire gagner Norman.

La date de l’audit vous sera donnée par le professeur et la date de l’élection égalmement.

La machine

Nous n’avons pas de véritable machine physique à notre disposition, nous allons utiliser l’ordinateur et limiter son utilisation à quelques touches.

Vous dispposez donc des 9 touches de 1 à 9 du pavé numérique, de la touche « entrée » et de la touche « m » accessible seulement aux opérateurs pour accéder au menu (elle correspond par exemple à un bouton avec une clé qui ne peut pas être activé par les votants). Voici l’ensemble des touches sur la machine :

1 2 3 4 5 6 7 8 9 m entrée

L’appui sur un bouton est donc équivalent à la saisie d’un chiffre ou de « m » au clavier et de l’appui sur la touche entrée.

La machine dispose également d’un écran modélisé par le terminal Python.

Fonctionnement

Nous n’allons pas aborder l’identification du votant, nous supposerons donc que les votants se succèdent et votent normalement.

La machine dispose de deux modes de fonctionnement :

  • mode administration : accessible uniquement par l’administrateur, il permet de définir les choix de vote, de voir les résultats, de réinitialiser le compte et de passer au mode vote.
  • mode vote : propose les choix de vote et enregistre les votes. L’appui sur la touche « m » permet de passer au mode administration.

Le menu d’administration pourra ressembler à ceci :

### Administration ###

  1 - Chargement des choix
  2 - Voir les résultats
  3 - Mise à zéro
  4 - Passer en mode vote

Et le mode vote :

### Vote ###

  1 - Squeezie
  2 - Cyprien
  3 - Natoo
  4 - Michou
  5 - Norman
  6 - Amixem

Voici quelques précisions sur le fonctionnement :

  • le chargement des choix se fait à partir d’un fichier texte candidats.txt et crée un fichier résultats.txt avec les compteurs à zero ;
  • les résultats seront écrits dans un ficher texte résultats.txt au fur et à mesure du déroulement du vote ;
  • la machine lit les valeurs des compteurs dans le fichier résultats.txt avant d’incrémenter les compteurs ;
  • la mise à zéro met les compteurs dans le fichier fichier résultats.txt ;
  • le trucage doit se faire sans manipulation. Le résultat doit être faussé seulement le jour de l’élection ;
  • à vous de truquer le résultat intelligemment pour que cela ne soit pas trop suspect (pas 100% des voix !) ;
  • les machines ne sont pas connectées à internet.

Tableau du barème

Voilà le barème complet sur 20 pour ce projet.

TâcheBarème
fonctionnement du menu administration1 point
chargement des candidats depuis un ficher2 points
fonctionnement du menu vote1 point
respect des dates1 point
augmentation des compteurs dans le fichier résultats.txt lors d’un vote2 points
passage du menu administration au menu vote1 point
passage de l’audit, fonctionnement global de la machine2 points
trucage effectif2 points
trucage intelligent (pas 100% des votes…)2 points
qualité du trucage, discrétion du trucage dans le code, résistance à un audit du code2 points
code optimisé1.5 point
commentaires1 point
code propre1.5 point
Total20

Aides

Lire et écrire dans un fichier

Pour stocker et lire les votes vous aurez besoin d’écrire et lire dans un fichier :

# Écriture
f = open("fichier.txt", "w") # Ouvre un fichier ou le crée et efface le contenu du fichier
f.write("Une ligne\n") # Écrit dans le fichier et va à la ligne (avec le « \n »)
f.close() # Ferme le fichier (important pour ne pas perdre des infos)

f = open("fichier.txt", "a") # Ouvre un fichier ou le crée et se place à la fin
f.write("Une ligne\n") # Écrit dans le fichier et va à la ligne (avec le « \n »)
f.close() # Ferme le fichier (important pour ne pas perdre des infos)

# Lecture
f = open("fichier.txt", "r") # Ouvre en lecture le fichier
for line in f: # Parcourt toute les lignes
    print(line,end="") # Affiche chaque ligne
Retour