Как перебирать список, пока не найду элемент - PullRequest
0 голосов
/ 20 октября 2019

Эта программа проверяет файл, заполненный паролями, до совпадения с действительным паролем.

b=open('passy.txt','r')
pass_check=b.readlines()

for i in pass_check:
    pname.append(i)

for i in pname:


    if passvalid in pname:
        print("Password is correct")
        break
    else:
        print("Password isnt correct")
b.close()

Как я могу остановить выполнение кода, когда обнаружит совпадение?

Ответы [ 3 ]

0 голосов
/ 21 октября 2019

Как я могу остановить выполнение кода, когда он находит совпадение?

Вы можете инкапсулировать свою логику в методе и использовать оператор return в этом методе при совпадениибыл найден.

0 голосов
/ 21 октября 2019

Я смущен вашим вопросом, но, кажется, вы слишком усложняете вещи. Попробуйте вместо этого:

passvalid = 'hunter2'

with open('passy.txt') as b:
    pname = (s.rstrip('\n') for s in b)
    if passvalid in pname:
        print("Password is correct")
    else:
        print("Password isn't correct")

Здесь и b, и pname являются итераторами, поэтому, как только найден passvalid, они перестают оцениваться.

0 голосов
/ 21 октября 2019

Если вы хотите остановить выполнение цикла for или while, используйте break. Также не использовать оператор with при открытии файлов - это плохая практика кодирования. Оператор with автоматически закрывает файл после того, как с ним покончено.

Редактировать: Я случайно читаю ваш код, и кажется, что вы пытаетесь проверить, равен ли действительный пароль i-ый элемент целого числа, что, очевидно, неверно.

with open('passy.txt','r') as b:
    pass_check=b.readlines()

for i in range(len(pass_check)):
    pname.append(i)
passlength=int(len(pname))

for i in range(passlength):

    if passvalid == passlength[i]:
        print("Password is correct")
        break
    else:
        print("Password isn't correct")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...