Проверка пароля из текстового файла и печать результатов в отдельном текстовом файле. - PullRequest
0 голосов
/ 05 ноября 2018

Я довольно новичок в python, на самом деле очень новый. У меня есть задание, где я должен проверить список паролей из текстового файла, выполнить его через функцию, чтобы убедиться, что каждый пароль соответствует необходимым критериям, и распечатать результаты в новом текстовом файле. У меня отключена функция пароля, но я не могу понять, как получить результаты для печати в новом текстовом файле. Надеюсь, кто-то может помочь мне в правильном направлении

infile = open("passwdin-1.txt","r")
psswd = infile.readline()
outfile = open("passwdout.txt","w")


for pswd in infile:
    resultpsswd = checkPassw0rd(psswd) 
outfile.write(resultpsswd)

infile.close()
outfile.close()

def checkPassw0rd(psswd):

    countLength = len(psswd)
    countUC = 0
    countLC = 0
    countDigit = 0
    specialCH = 0 
    resultpsswd = psswd

    for ch in psswd:
        if ch.isupper():
            countUC += 1
        elif ch.islower():
            countLC += 1
        elif ch.isdigit():
            countDigit += 1
        elif ch in "!$%":
            specialCH = 0


    if countLength >= 6 and countUC > 0 and countLC >= 2 and countDigit > 0 and specialCH > 0:
        return True, resultpsswd "Password is valid and accepted"
    else:
        resultpsswd == "Password is invalid and not accepted"
        if countLength < 6:
            resultpsswd == resultpsswd + "\n Password has to be at least 6 characters long. "
        if countUC == 0:
            resultpsswd == resultpsswd + "\n Password has to have at least one upper case character. "
        if countLC == 0:
            resultpsswd == resultpsswd + "\n Password has to have at least one lower case character. "
        if countDigit == 0:
            resultpsswd == resultpsswd + "\n Password has to have at least one digit. "
        if specialCH == 0:
            resultpsswd == resultpsswd + "n\ Password has to have at least one of the special charaters '!$%'. "

        return False, resultpsswd

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Позвольте мне подытожить, что вы могли бы сделать, чтобы ваш пример работал.

  1. Прежде всего вы должны закрыть файлы, которые вы используете, как только вы их использовали
  2. в куске кода for pswd in infile: resultpsswd = checkPassw0rd(psswd) Вы должны передать pswd в checkPassw0rd функцию
  3. Выход вашей функции checkPassw0rd является кортежем (, resultpsswd), поэтому вы должны рассматривать только второй элемент этого кортежа:

    okNok, resultpsswd = checkPassw0rd(psswd) outfile.write(resultpsswd)

  4. Вы должны сделать отступ в строке outfile.write(resultpsswd).

В конце концов что-то подобное должно работать:

infile = open("passwdin-1.txt","r")
psswd = infile.readline()
infile.close()

#outfile = open("passwdout.txt","w") --> Better to use the with statement

with open("passwdout.txt", "w") as outfile:
    for pswd in infile:
        okNok, resultpsswd = checkPassw0rd(pswd) 
        outfile.write(resultpsswd)

#No need to explicitly close the file, the with statement will do it

Надеюсь, это поможет.

0 голосов
/ 05 ноября 2018

в вашем коде есть опечатка с аргументом, который вы передаете функции check pwd, и возникает проблема с отступом, даже если она сработает, вы только напишите последний пароль в файл

изменение вашего кода на что-то вроде приведенного ниже должно исправить это

with open("passwdout.txt","w") as outfile:
    [outfile.write(checkpasw0rd(pswd)) for pswd in infile]

with statement гарантирует, что вам больше не нужно закрывать файл, это обрабатывается автоматически

используйте код выше, чтобы заменить весь forloop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...