Как «спрятать» ругательства в py-файле? - PullRequest
1 голос
/ 22 августа 2010

Я школьный учитель, который провел лето, написав программу обучения вокабу на python, в которой используется текст, доступный из Википедии и Гутенберга. Теперь все, что мне нужно сделать, - это найти способ отфильтровать проклятия, чтобы я мог распространять их среди студентов.

Обычно я бы просто имел массив (список) этих проклятых слов и сделал бы простой фильтр. Проблема, однако, в том, что сам файл py может быть открыт этими студентами, видя эти слова. Если бы я поместил его в отдельный файл, каким-то образом зашифрованный, он мог бы просто удалить этот файл, и выходные данные не были бы отфильтрованы.

Есть идеи для обхода?

Ответы [ 5 ]

7 голосов
/ 22 августа 2010

То, что вы можете сделать, это хешировать слова, которые вы хотите найти.Это делает фильтрацию немного сложнее, так как вы должны разбить ввод на слова, хэшировать каждое слово, а затем посмотреть, есть ли совпадение для этого хэша.

Посмотрите документацию для md5 ()

Ваш исходный код будет тогда содержать хэшированные слова, и нет способа превратить это в список слов (однако, более творческий ученик может иметь несколько звуковых догадок!)

6 голосов
/ 22 августа 2010

Если все учащиеся используют одну и ту же версию Python (например, в компьютерном классе), вы можете распространять файлы pyc. Это просто запутывание, но оно будет сдерживать случайных пользователей.

1 голос
/ 22 августа 2010

Почему бы не распространять скомпилированные файлы Python .*pyc вместо этого? Они могут по-прежнему искать строки, если захотят, но это, вероятно, будет сдерживать случайный просмотр файла, что может быть достаточно для ваших нужд.

1 голос
/ 22 августа 2010

Включите слова в свой распределенный файл, но каким-то образом зашифруйте их, чтобы было невозможно легко найти список открытого текста. Затем скомпилируйте скрипт в .exe, используя py2exe. Это остановит большинство студентов от реинжиниринга программы и поиска алгоритма шифрования.

Если учащийся находит процедуру расшифровки, не имеет значения, является ли она надежным шифрованием или нет, так что rot13 или base64 должно быть достаточно.

(w.decode('rot13') for w in ['sbeovqqra', 'sbeovqqra gbb', 'rira zber sbeovqqra'])

Для составления списка просто используйте encode для настоящих слов.

Хеши, как предложено выше, тоже будут работать, конечно.

0 голосов
/ 23 августа 2010
def avoid_paperwork(word):
    result = ''
    for letter in word:
        if letter == 'z':
            result += '_'
        else:
            result += chr(ord(letter) + 1)
    return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...