Как заставить программу Python автоматически печатать то, что совпало после перебора списков

У меня есть этот код Python:

with open('save.data') as fp:
    save_data = dict([line.split(' = ') for line in fp.read().splitlines()])

with open('brute.txt') as fp:
    brute = fp.read().splitlines()

for username, password in save_data.items():
    if username in brute:
        break
else:
    print("didn't find the username")

Вот краткое объяснение; save.data — это файл, содержащий переменные пакетной игры (например, имя пользователя, hp и т. д.), а brute.txt — это файл, содержащий «случайные» строки (например, то, что можно увидеть в списках слов, используемых для грубой силы).

save.data:

username1 = PlayerName
password1 = PlayerPass
hp = 100

Как я уже говорил, это пакетная игра, поэтому не нужно заключать строки в кавычки.

brute.txt:

username
usrnm
username1
password
password1
health
hp

Итак, давайте предположим, что файл Python является «игровым хакером», который «взламывает» файл сохранения игры в пакетном файле в надежде найти совпадения, а когда находит, извлекает их и отображает пользователю.

## We did all the previous code
...
>>> print(save_data["username1"])
PlayerName

Успех! мы получили переменные! Но я хочу, чтобы программа могла сама отображать переменные (потому что я знал, что "username1" совпадает, поэтому я решил напечатать его). Я имею в виду, что хочу сделать программу print совпадающими переменными. Например: если вместо «username1» в save.data было «usrnm», то оно обязательно будет распознано после процесса «брутинга», потому что оно уже есть в brute.txt. Итак, как сделать программу print что совпало? потому что я не знаю, является ли это "имя пользователя" или "имя пользователя1" и т. д... Программа делает :p (конечно, не открывая save.data) И, конечно, это не означает, что программа будет искать только имя пользователя, это game, и должны быть другие переменные, такие как золото / монеты, hp и т. д. Если вы что-то не поняли, пожалуйста, прокомментируйте это, и я проясню это, и спасибо за ваше время!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте dict, например:

with open('brute.txt', 'r') as f:
    # First get all the brute file stuff
    lookup_dic = {word.strip(): None for word in f.readlines()}
with open('save.data', 'r') as f:
    # Update that dict with the stuff from the save.data
    lines = (line.strip().split(' = ') for line in f.readlines())
    for lookup, val in lines:
        if lookup in lookup_dic:
            print(f"{lookup} matched and its value is {val}")
            lookup_dic[lookup] = val
# Now you have a complete lookup table.
print(lookup_dic)
print(lookup_dic['hp'])

Выход:

username1 matched and its value is PlayerName
password1 matched and its value is PlayerPass
hp matched and its value is 100
{'username': None, 'usrnm': None, 'username1': 'PlayerName', 'password': None, 'password1': 'PlayerPass','health': None, 'hp': '100'}
100

Это оно! Спасибо! И последнее, могу ли я превратить совпавшие переменные в глобальные? например, у нас есть usrnm, username1, username и т. д. Но совпало только username1, тогда я могу превратить его в одну переменную с именем, например, имя пользователя и hp в здоровье и т. д. Для будущего использования? (потому что, как я уже сказал, я не знаю, кто с кем будет совпадать, это зависит от того, какую переменную игра выбрала для определения, ее может даже не быть в списке слов. Кто знает :p )

Sheep1Coder 28.05.2019 16:49

Просто мы lookup_dic['hp'], как если бы вы использовали обычную переменную. Или вы можете сделать hp = lookup_dic['hp']. Вам, вероятно, следует изучить возможность использования объектов класса для подобных вещей. Вам будет намного легче.

Error - Syntactical Remorse 28.05.2019 16:51

Да, но как я могу узнать, что это «хп», а не «здоровье» или какие-либо другие очки здоровья, относящиеся к переменной? (потому что я хочу, чтобы программа могла делать это сама без помощи пользователя, за исключением пути к файлу сохранения, я работаю над проектом). Вот почему мне нужно превратить любую вещь, связанную с HP или здоровьем, в список слов в одну переменную с другими. И спасибо!

Sheep1Coder 28.05.2019 16:57

Я не уверен, что полностью понимаю, что вы пытаетесь сделать. Пожалуйста, добавьте пример к вашему вопросу, который охватывает ваши крайние случаи. Убедитесь, что пример полностью охватывает то, что вы пытаетесь сделать. Вы всегда можете просто сделать set синонимов и относиться ко всем одинаково.

Error - Syntactical Remorse 28.05.2019 16:59

Хорошо, позвольте мне объяснить, у меня есть список слов и файл сохранения. Ваш код сделал это успешно и знал, что соответствует чему, но я этого не знаю, и пользователь тоже, поэтому я добавил несколько слов в список слов на случай, если они не совпадают, например: я использовал эту программу против файла сохранения игра, которая содержит «имя пользователя, пароль пользователя и монеты», и, к счастью, в списке слов есть их совпадения, поэтому я хочу, чтобы имя переменной соответствовало для будущих манипуляций. НО, я не знаю, как называется совпадающая переменная, это знает только программа (я пытался напечатать "f{lookup}", но она вернула только последнюю переменную).

Sheep1Coder 28.05.2019 17:11

-ble совпали, но я хочу их все. Например, «имя_пользователя» совпало, поэтому программа получит его значение и присвоит его переменной, например, с именем «main_username», и она получит переменную, которая соответствует состоянию здоровья, и присвоит ее значение переменной, например «main_hp» и т. д. .. Если вы все еще не поняли, я могу объяснить вам больше, просто скажите мне части, которые вы не поняли, и я постараюсь изо всех сил. Поскольку эта проблема преградила мне путь, и я искал ее дни и дни, спасибо за вашу помощь!

Sheep1Coder 28.05.2019 17:15

Давайте проясним этот где-нибудь еще.

Error - Syntactical Remorse 28.05.2019 17:16

Другие вопросы по теме