Как заставить программу на Python автоматически печатать то, что соответствовало после итерации по спискам - PullRequest
0 голосов
/ 28 мая 2019

У меня есть этот код 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 - это файл, который содержит переменные игры в Batch-файле (такие как имя пользователя, hp и т. д.) ).

save.data

username1 = PlayerName
password1 = PlayerPass
hp = 100

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

brute.txt:

username
usrnm
username1
password
password1
health
hp

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

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

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

1 Ответ

1 голос
/ 28 мая 2019

Используйте 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
...