为什么我的函数在满足条件时不执行?

2024-10-04 11:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图为我的服务器应用程序创建一个登录表单,却意外地发现了一个看不见的错误(最糟糕的一种)。我有一个trys变量,每当用户输入用户名错误时,该变量将递增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()

Tags: inimporttxtcloseiftimedefsocket
1条回答
网友
1楼 · 发布于 2024-10-04 11:30:04

事实上,您的代码在tries==3时确实执行了block()函数,但在block()的开头,您重新创建了黑名单文件,然后读取了空文件,因此条件if ipBlock in isBlocked:始终为false

因此,我放置了一些命令,用于从block()中创建文件。另外,我在countdown()函数中更改了黑名单文件的remove,并重新创建但不删除它,因为您的代码在重新启动时试图再次读取它以询问用户名。我还设置了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()

相关问题 更多 >