Почему моя функция не выполняется при выполнении условия? - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь создать форму входа в систему для своего серверного приложения и наткнулся на невидимую ошибку (наихудший вид). У меня есть переменная попытки , которая увеличивается на 1 каждый раз, когда пользователь вводит имя пользователя неправильно. Когда переменная пытается достигает значения 3 , программа должна затем выполнить функцию block () . Моя проблема в том, что это не так.

Все мои файлы .txt пустые, поэтому там нет ошибок, и все выглядит нормально. Пожалуйста, помогите, потому что я выдергиваю свои волосы!

Вот код:

import socket
import time
import sys
import os

tries = 0

def server():

    def block():

        #get host ip
        ipBlock = socket.gethostbyname(socket.gethostname())

        #create black list
        ipBlackList = open("ipBlackList.txt", "w")
        ipBlackList.close()

        #read black list
        ipBlackList = open("ipBlackList.txt", "r")
        isBlocked = ipBlackList.readlines()
        ipBlackList.close()

        #disable account for 60 seconds
        if ipBlock in isBlocked:
            def countdown(t):
                while t:
                    mins, secs = divmod(t, 60)
                    timer = '{:02d}:{:02d}'.format(mins, secs)
                    print('Your account has been temporarily disabled. Please 
                    try again in '+timer, end=" seconds.\r")
                    time.sleep(1)
                    t -= 1
                    os.remove('ipBlackList.txt')
                    print('\nYour account has been re-enabled. You may log in 
                    now.')
                    time.sleep(2)
                t = 60
                countdown(int(t))
    block()

    print("Enter administrator login details: ")

    def usernameLogin():
        #global vars
        global tries

        if tries == 3:
            #read black list
            ipBlackList = open("ipBlackList.txt", "r")
            isBlocked = ipBlackList.readlines()
            ipBlackList.close()

            #get host ip
            ipBlock = socket.gethostbyname(socket.gethostname())

            if ipBlock not in isBlocked:
                ipBlackList = open("ipBlackList.txt", "w")
                ipBlackList.write(ipBlock)
                ipBlackList.close()
                block()

        username = input("\nUsername: ")

        #check if username exists
        usernames = open("usernames.txt", "r")
        checkUser = usernames.readlines()
        usernames.close()

        if username not in checkUser:
            print("That username doesn't exist. Please try again.")
            tries += 1
            print(tries)
            time.sleep(2)
            usernameLogin()

        print("im in")
        time.sleep(3)

    usernameLogin()
server()

1 Ответ

0 голосов
/ 27 января 2020

Фактически, ваш код выполняет функцию block(), когда tries==3, но в начале block() вы воссоздаете файл черного списка, затем читаете пустой файл и в результате условие if ipBlock in isBlocked: всегда ложно.

Итак, я поместил команды, которые создают файл из block(). Кроме того, я изменил remove файла черного списка в функции countdown() и воссоздаю, но не удаляю его, потому что ваш код пытается снова прочитать его при перезапуске, чтобы спросить имя пользователя. Также я установил tries == 0, когда block() заканчивается. Кроме того, отступ в конце countdown() был неверным.

import socket
import time
import sys
import os

tries = 0

def server():

    def block():

        #get host ip
        ipBlock = socket.gethostbyname(socket.gethostname())

        #read black list
        ipBlackList = open("ipBlackList.txt", "r")
        isBlocked = ipBlackList.readlines()
        ipBlackList.close()

        #disable account for 60 seconds

        if ipBlock in isBlocked:
            def countdown(t):
                while t:
                    mins, secs = divmod(t, 60)
                    timer = '{:02d}:{:02d}'.format(mins, secs)
                    print('Your account has been temporarily disabled. Please \
                    try again in '+timer, end=" seconds.\r")
                    time.sleep(1)
                    t -= 1

                #os.remove('ipBlackList.txt')
                # Recreate an empty black list file
                ipBlackList = open("ipBlackList.txt", "w")
                ipBlackList.close()

                print('\nYour account has been re-enabled. You may log in \
                now.')
                time.sleep(2)
            t = 6
            countdown(int(t))

    #create black list file (empty)
    ipBlackList = open("ipBlackList.txt", "w")
    ipBlackList.close()
    block()

    print("Enter administrator login details: ")

    def usernameLogin():
        #global vars
        global tries

        if tries == 3:
            #read black list
            ipBlackList = open("ipBlackList.txt", "r")
            isBlocked = ipBlackList.readlines()
            ipBlackList.close()

            #get host ip
            ipBlock = socket.gethostbyname(socket.gethostname())
            if ipBlock not in isBlocked:
                ipBlackList = open("ipBlackList.txt", "w")
                ipBlackList.write(ipBlock)
                ipBlackList.close()
                block()

            tries = 0

        username = input("\nUsername: ")

        #check if username exists
        usernames = open("/test/usernames.txt", "r")
        checkUser = usernames.readlines()
        usernames.close()

        if username not in checkUser:
            print("That username doesn't exist. Please try again.")
            tries += 1
            print(tries)
            time.sleep(2)
            usernameLogin()

        print("im in")
        time.sleep(3)

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