Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/09/2011, à 19:30

i8GateSn0w

[Python] Comment empecher l'édition du fichier d'origine ?

Bonsoir à tous, je viens de crée un petit QCM avec environ 100 questions / réponses en Python. Seul problème, j'ai pas envie que les utilisateurs puissent ouvrir le fichier pour modifier le système de notation ou même voir les réponses. Comment empêcher les utilisateurs de faire ça ?
Je vous remercie d'avance !

Dernière modification par i8GateSn0w (Le 10/09/2011, à 19:34)

Hors ligne

#2 Le 10/09/2011, à 20:19

peterp@n

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Bonsoir,
A mon avis il faut :
- soit faire confiance aux utilisateurs
- soit séparer le programme principale et le programme questions,
exemple : les utilisateurs lance questions.py qui est un programme qui affiche 100 questions et enregistre les 100 réponses utilisateurs et les envois au programme principale. Ensuite le programme principale lit les réponses et met une notes final. Ainsi l'utilisateur n'a accès qu'aux questions, le programme principal devant être distant et inaccessible.


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#3 Le 10/09/2011, à 20:21

i8GateSn0w

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Ben j'ai pas trop compris je t'envoie une version de mon prog par mail pour que tu vois un peu ok ?

Hors ligne

#4 Le 10/09/2011, à 20:39

AnsuzPeorth

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Bjr,
Ca dépends de la compétence des utilisateurs ?

Si tu veux juste caché les réponses, tu les mets dans un fichier.py que tu importes comme module. Tu ne laisse que le .pyc, c'est du binaire ...

Si tu veux corser encore un peu, tu peux très bien md5 les réponses avant de les mettre dans ton module.

Doit avoir d'autres solutions encore ...


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#5 Le 11/09/2011, à 14:05

peterp@n

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Voilà une solution :
Le fichier des questions/réponses :
qcm_data.py

#!/usr/bin/python3.2
# -*-coding:Utf-8 -* 

QUESTIONS = [("En quelle année est né Steve Jobs ?",(1985,1954,1955,1949),3),("Quelle est la date de naissance exacte de Steve Jobs ?",("20/09/1955","24/02/1955","24/03/1955","25/02/1955"),2)]

J'ai dû modifier le type de données pour le choix des réponses.

Le fichier du programme principal :
qcm_main.py

#!/usr/bin/python3.2
# -*-coding:Utf-8 -*

from qcm_data import QUESTIONS #Importation de la variable QUESTIONS du module qcm_data

nombre_questions = len(QUESTIONS) #compte le nombre de questions contenus dans la liste QUESTIONS

note = 0 #Initialisation de la note à 0

compteur = 0 #Initialisation du compteur

#Début de la boucle while, tant qu'il y a des questions la boucle effectue le couple questions:réponses
while compteur < nombre_questions :

    print(QUESTIONS[compteur][0]) #Affiche la question en cours

    print(("1: ") + str(QUESTIONS[compteur][1][0]) + (", 2: ") + str(QUESTIONS[compteur][1][1]) + (", 3: ") + str(QUESTIONS[compteur][1][2]) + (", 4: ") + str(QUESTIONS[compteur][1][3])) #Affiche les choix de réponse de la question en cours

    reponse=int(input()) #Attend une réponse de l'utilisateur

    bonne_reponse = QUESTIONS[compteur][2] #Attribution du chiffre correpondant à la bonne réponse de la question en cours à la variable bonne_reponse

    #Si la réponse est correcte, on affiche le texte et on incrémente la variable note
    if reponse == bonne_reponse :
        print("Bonne réponse !")
        note = note + 1

    #Si la réponse est fausse on affiche la bonne réponse, et on ajoute 0 à la variable note, on pourrait mettre -1 aussi
    else:
        print(("Désolé, la bonne réponse est ") + str(QUESTIONS[compteur][1][bonne_reponse-1]))
        note = note + 0

    #On incrément la variable compteur pour passer à la questions suivante.
    compteur = compteur + 1 

#On affiche le résultat final lorsque l'on sort de la boucle while
print("Résultats")
print (("Votre note est de ") + (str(note)) + (" / ") + (str(compteur)))

Dans le programme principale il n'y a aucune indications de réponses ni de questions d'ailleurs. Dans l'état actuel il te faut juste remplir le fichiers qcm_data.py avec les questions, les réponses et le numéro de la bonne réponse selon le schéma suivant :
("question?",("reponse1","reponse2","reponse3","reponse4"),chiffre_bonne_reponse)


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#6 Le 11/09/2011, à 14:28

HP

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Et l'utilisation d'une base de données… ça t'a effleuré l'esprit ?


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#7 Le 11/09/2011, à 17:01

i8GateSn0w

Re : [Python] Comment empecher l'édition du fichier d'origine ?

@peterp@n je croit avoir compris, je vais essayer smile
@HP je suis vraiment pas très doué en python est en programmation donc je en sais absolument pas comment faire.

Hors ligne

#8 Le 17/09/2011, à 21:14

i8GateSn0w

Re : [Python] Comment empecher l'édition du fichier d'origine ?

@peterpan voila ce que j'ai quand je fais ça :

#!/usr/bin/python3.2
# -*-coding:Utf-8 -* 

QUESTIONS = [("En quelle année est né Steve Jobs ?",(1985,1954,1955,1949),3),("Quelle est la date de naissance exacte de Steve Jobs ?",("20/09/1955","24/02/1955","24/03/1955","25/02/1955"),2,("Qui est le co-fondateur d'Apple ?",("Tim Cook","Phil Schiller","Steve Wozniak","DSK"),3)]

Résultat :

root@i8GateSn0w:~# python3 qcm_main.py 
Traceback (most recent call last):
  File "qcm_main.py", line 4, in <module>
    from qcm_data import QUESTIONS #Importation de la variable QUESTIONS du module qcm_data
  File "/home/i8gatesn0w/qcm_data.py", line 4
    QUESTIONS = [("En quelle année est né Steve Jobs ?",(1985,1954,1955,1949),3),("Quelle est la date de naissance exacte de Steve Jobs ?",("20/09/1955","24/02/1955","24/03/1955","25/02/1955"),2,("Qui est le co-fondateur d'Apple ?",("Tim Cook","Phil Schiller","Steve Wozniak","DSK"),3)]
                                                                                                                                                                                                                                                                                               ^
SyntaxError: invalid syntax

Hors ligne

#9 Le 18/09/2011, à 11:08

peterp@n

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Il manque juste une parenthèse a la fin des données du couple questions/réponse 2.

#!/usr/bin/python3.2
# -*-coding:Utf-8 -* 

QUESTIONS = [("En quelle année est né Steve Jobs ?",(1985,1954,1955,1949),3),("Quelle est la date de naissance exacte de Steve Jobs ?",("20/09/1955","24/02/1955","24/03/1955","25/02/1955"),2),("Qui est le co-fondateur d'Apple ?",("Tim Cook","Phil Schiller","Steve Wozniak","DSK"),3)]

Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#10 Le 18/09/2011, à 20:39

i8GateSn0w

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Merci ! Je continue un peu, je te redis si j'ai des soucis.

Dernière modification par i8GateSn0w (Le 18/09/2011, à 20:40)

Hors ligne

#11 Le 23/09/2011, à 20:53

i8GateSn0w

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Salut, j'ai cette petite erreur :

Désolé, la bonne réponse est 1980
Que c'est il passé en Avril 1983 ?
Traceback (most recent call last):
  File "iqcm_main.py", line 17, in <module>
    print(("1: ") + str(QUESTIONS[compteur][1][0]) + (", 2: ") + str(QUESTIONS[compteur][1][1]) + (", 3: ") + str(QUESTIONS[compteur][1][2]) + (", 4: ") + str(QUESTIONS[compteur][1][3])) #Affiche les choix de réponse de la question en cours
IndexError: tuple index out of range

Merci d'avance pour ton aide !

Hors ligne

#12 Le 24/09/2011, à 23:59

VinsS

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Salut,

Le message d'erreur est clair, non ?

Ton tuple ne contient pas autant d'éléments que tu veux en afficher.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#13 Le 26/09/2011, à 20:41

i8GateSn0w

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Merci de ta réponse ! Je me demandais si python pouvais envoyé le score obtenu par les joueur par mail ou directement sur internet (j'ai un site mais pas de serveur perso). SI oui comment ?

Hors ligne

#14 Le 26/09/2011, à 21:21

MrWaloo

Re : [Python] Comment empecher l'édition du fichier d'origine ?

i8GateSn0w a écrit :

Bonsoir à tous, je viens de crée un petit QCM avec environ 100 questions / réponses en Python. Seul problème, j'ai pas envie que les utilisateurs puissent ouvrir le fichier pour modifier le système de notation ou même voir les réponses. Comment empêcher les utilisateurs de faire ça ?
Je vous remercie d'avance !

Salut,
Il devrait être possible de ne fournir que le fichier compilé, non ? (*.pyc)
Ce dernier est binaire : pas de texte compréhensible et facilement modifiable.
Il se crée automatiquement à l’exécution (?) ou à l'import.

Cela dit, je te conseille une base de données, de sorte de pouvoir séparer le code des questions/réponses.
Dans le livre en libre téléchargement "Apprendre à programmer avec python 3" (valable aussi pour python 2.x) tu y apprends comment utiliser SQLlite : lien

A+


"De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent !!" (Desproges)
UNIX is an operating system, OS/2 is half an operating system, Windows is a shell, MS-DOS is a boot sector virus.

Hors ligne

#15 Le 28/09/2011, à 12:37

i8GateSn0w

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Dac merci !

Sinon la j'ai un gros poblème je vois pas du tout d'ou ça vient :S

#!/usr/bin/python3.2
# -*-coding:Utf-8 -* 

QUESTIONS = [("En quelle année est né Steve Jobs ?",(1985,1954,1955,1949),3),("Quelle est la date de naissance exacte de Steve Jobs ?",("20/09/1955","24/02/1955","24/03/1955","25/02/1955"),2),("Qui est le co-fondateur d'Apple ?",("Tim Cook","Phil Schiller","Steve Wozniak","DSK"),3),("Quel est le premier produit présenté par Apple ?",("l'iMacintosh","l'Apple I","le Lisa","l'iPod"),2),("En quel année a été présenté l'Apple I ?",("1976","1977","1978","1981"),1),("Combien coutait l'Apple I ?",("777,77$","888,88$","555,55$","666,66$"),4),("Combien ya t'il eu d'Apple II différents ?",("2","3","4","7"),4),("Quel était la particularité de l'Apple III ?",("2Go de RAM","processeur Apple A1","Pas de ventillos","lecteur USB"),3),("En quel année Apple c'est introduit en bourse ?",("1980","1981","1982","1987"),1),("Que c'est il passé en Avril 1983 ?",("Incendie chez Apple,Steve Jobs est viré","Mort de Steve Wozniak","John Sculley deviens le CEO d'Apple","Apple présente l'iPod"),3),("En quel année est présenté le Macintosh ?",("1980","1981","1983","1984"),4),("En quel année est viré Steve Jobs ?",("1985","1986","1987","1988"),1),("Quel entreprise fonde Steve Jobs apès avoir été viré de chez Apple (1985) ?",("After","Next","Pixar","Intel"),2),("Qu'est-ce que Claris ?",("Une Application pour Apple II","Un noueau produit Apple","un processeur","Une filliale Apple"),4),("En quel année est sorti le Newton ?",("1991","1992","1993","1994"),3),("Combien y'a t'il eu de Newton (tout modèles confondus) ?",("2","3","6","8"),4),("Que lance Apple en 1991 ?",("les PowerBook","les iMac","Les MacBook","Mac OS X"),1),("Que signifie le M de l'Alliance AIM ?",("Microsoft","Macintosh","Motorola","Mac OS"),3),("En quel année est sorti Mac OS 6 ?",("1991","1992","1993","1994"),1),("Qu'est-ce que le QuickTake ?",("Un logiciel","Un restaurant","un Appareil Photo Numerique","un Guide Interactif"),2),("Qu'est-ce que la Pipp!n ?",("Une maladie","Une espece animal","une poupée","une console de Salon"),4),("En 1996, par qui est remplaçé le CEO d'Apple (Michael Spindler)",("Michael Smatch","Indiolo Chavoutier","Gel Amelio","Michael Online"),3),("A cause du reminiment d'Amelio, quel perte subbit Apple ?",("2700 licenciements","5000 licenciements","10 000 licenciements","+ de 15 000 licenciements"),1),("Après des tentatives ratées de faire évoluer Mac OS, que cherche à faire Apple?",("Abbandonner Mac OS","Développer un OS pour téléphone","Vendre Apple à IBM pour 45 Billions de $","Adopter un nouvel OS pour Mac"),4),("Vers quel societé se tourne Apple pour acheter un nouvel OS ?",("Microsoft","NeXT","Google","IBM"),2)("A quel date Apple acheta NeXT ?",("Juin 1995","Decembre 1995","Juin 1996","Décembre 1996"),4),("Steve Jobs redevient donc CEO d'Apple en ?",("1996","1997","1998","1999"),2)

Hors ligne

#16 Le 28/09/2011, à 13:51

Jules Petibidon

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Tu pourrais essayer de faire un truc encore plus illisible pour qu'on puisse pas t'aider ? smile
Tout ce que j'arrive à voir pour le moment c'est que ton crochet ouvrant n'est pas refermé à la fin de ta déclaration de liste.

Et sinon c'est quoi le problème exactement ?

Hors ligne

#17 Le 28/09/2011, à 21:18

MrWaloo

Re : [Python] Comment empecher l'édition du fichier d'origine ?

yop

correction (une virgule et le dernier ]) + lisibilité (si on peut dire...)

QUESTIONS = [
    ("En quelle année est né Steve Jobs ?",('1985','1954','1955','1949'),3),
    ("Quelle est la date de naissance exacte de Steve Jobs ?",("20/09/1955","24/02/1955","24/03/1955","25/02/1955"),2),
    ("Qui est le co-fondateur d'Apple ?",("Tim Cook","Phil Schiller","Steve Wozniak","DSK"),3),
    ("Quel est le premier produit présenté par Apple ?",("l'iMacintosh","l'Apple I","le Lisa","l'iPod"),2),
    ("En quel année a été présenté l'Apple I ?",("1976","1977","1978","1981"),1),
    ("Combien coutait l'Apple I ?",("777,77$","888,88$","555,55$","666,66$"),4),
    ("Combien ya t'il eu d'Apple II différents ?",("2","3","4","7"),4),
    ("Quel était la particularité de l'Apple III ?",("2Go de RAM","processeur Apple A1","Pas de ventillos","lecteur USB"),3),
    ("En quel année Apple c'est introduit en bourse ?",("1980","1981","1982","1987"),1),
    ("Que c'est il passé en Avril 1983 ?",("Incendie chez Apple,Steve Jobs est viré","Mort de Steve Wozniak","John Sculley deviens le CEO d'Apple","Apple présente l'iPod"),3),
    ("En quel année est présenté le Macintosh ?",("1980","1981","1983","1984"),4),
    ("En quel année est viré Steve Jobs ?",("1985","1986","1987","1988"),1),
    ("Quel entreprise fonde Steve Jobs apès avoir été viré de chez Apple (1985) ?",("After","Next","Pixar","Intel"),2),
    ("Qu'est-ce que Claris ?",("Une Application pour Apple II","Un noueau produit Apple","un processeur","Une filliale Apple"),4),
    ("En quel année est sorti le Newton ?",("1991","1992","1993","1994"),3),
    ("Combien y'a t'il eu de Newton (tout modèles confondus) ?",("2","3","6","8"),4),
    ("Que lance Apple en 1991 ?",("les PowerBook","les iMac","Les MacBook","Mac OS X"),1),
    ("Que signifie le M de l'Alliance AIM ?",("Microsoft","Macintosh","Motorola","Mac OS"),3),
    ("En quel année est sorti Mac OS 6 ?",("1991","1992","1993","1994"),1),
    ("Qu'est-ce que le QuickTake ?",("Un logiciel","Un restaurant","un Appareil Photo Numerique","un Guide Interactif"),2),
    ("Qu'est-ce que la Pipp!n ?",("Une maladie","Une espece animal","une poupée","une console de Salon"),4),
    ("En 1996, par qui est remplaçé le CEO d'Apple (Michael Spindler)",("Michael Smatch","Indiolo Chavoutier","Gel Amelio","Michael Online"),3),
    ("A cause du reminiment d'Amelio, quel perte subbit Apple ?",("2700 licenciements","5000 licenciements","10 000 licenciements","+ de 15 000 licenciements"),1),
    ("Après des tentatives ratées de faire évoluer Mac OS, que cherche à faire Apple?",("Abbandonner Mac OS","Développer un OS pour téléphone","Vendre Apple à IBM pour 45 Billions de $","Adopter un nouvel OS pour Mac"),4),
    ("Vers quel societé se tourne Apple pour acheter un nouvel OS ?",("Microsoft","NeXT","Google","IBM"),2),
    ("A quel date Apple acheta NeXT ?",("Juin 1995","Decembre 1995","Juin 1996","Décembre 1996"),4),
    ("Steve Jobs redevient donc CEO d'Apple en ?",("1996","1997","1998","1999"),2)
    ]

Je te conseillerais de faire une liste de dictionnaire pour la lisibilité, un truc de la forme :

QUESTIONS = [
    {
        'question': "En quelle année est né Steve Jobs ?",
        'choix': (1985, 1954, 1955, 1949),
        'solution': 3
    },
    {
        'question': "Quelle est la date de naissance exacte de Steve Jobs ?",
        'choix': ("20/09/1955", "24/02/1955", "24/03/1955", "25/02/1955"),
        'solution': 2
    },
    ...
]

Tu as pensé à pickle ?
Ça te permet de sauvegarder une variable dans un fichier "binaire". Pour cacher cette structure, ce serait pas mal...

edit: par contre en relisant, j'ai vu pas mal de fautes, tu devrais relire tout ça calmement...

A+
Michel

Dernière modification par MrWaloo (Le 28/09/2011, à 21:32)


"De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent !!" (Desproges)
UNIX is an operating system, OS/2 is half an operating system, Windows is a shell, MS-DOS is a boot sector virus.

Hors ligne

#18 Le 28/09/2011, à 22:04

Jules Petibidon

Re : [Python] Comment empecher l'édition du fichier d'origine ?

Sinon, par rapport à SQLite : Une DB relationnelle n'ayant aucun intérêt dans ton cas, tu peux te contenter d'une *DBM (modules dbm, gdbm ou bsddb)
Ça a l'avantage d'être d'une simplicité évangélique à utiliser (ça s'utilise comme un dictionnaire)

Hors ligne