簡體   English   中英

我在 python 中使用 open() 命令時遇到問題

[英]i am having trouble with open() command in python

我目前正在為我的實踐開發桌面登錄注冊應用程序,並且在登錄和注冊時遇到了一些問題。 如果我輸入REGISTER並在f.write()命令中添加我的信息,它會存儲我的信息,但之后一切都會進行,就像整個文件被格式化一樣(這是注冊問題)。

登錄問題是如果我想檢查文件中的名稱或密碼是否存在(此命令可能是錯誤的)。 我嘗試if login_email and login password in f:使用if login_email and login password in f:但它說login_emailpassword不存在。

代碼:

f = open('pass.txt', 'w')
fr = open('pass.txt', 'r')
from time import sleep

login_list = "LOGIN"
register_list = "REGISTER"

if 1 > -3232:
    print("Type register for new account\ntype login for login into existing account")
    bi = input("==>    ")

    if bi.upper() in login_list:
        print("you are registered?? nice now loginnn!!")
        login_1 = input("your username:   ")
        login_2 = input("your password:   ")
        if login_1 and login_2 in fr:
            print("Nice my program worked??")
            exit()
        else:
            exit()

    elif bi.upper() in register_list:
        print("you are in register section: ")
        sleep(.9)
        print("NOTE:  Your password should only contain alphabets!")
        sleep(4)
        reg_1 = input("your username:     ")
        sleep(.9)
        reg_2 = input("your password:     ")
        sleep(.9)
        reg_2v1 = input("confirm password")
        if reg_2 == reg_2v1:
            f.write(reg_1 + " : " + reg_2 + "\n")
            print("now login again,\")
        else:
            print("invalid password, try again")

    else:
        print("you gave me the wrong command")

else:
    exit()
  1. 您不應在腳本開頭以讀寫模式打開文件。 以寫入模式打開它會清空文件,因此您將無法讀取它。 您還將清除所有其他用戶名和密碼。 登錄時應以讀取模式打開文件,注冊時應以追加模式打開文件,以便在不刪除舊行的情況下添加新行。 您應該使用with來打開需要使用它的代碼周圍的文件。
  2. if login_1 and login_2 in fr:不是測試用戶名和密碼是否都在文件中的正確方法。 由於運算符優先級,這被解析為if login_1 and (login_2 in fr): 這只是檢查login_1不為空,然后只檢查login_2是否在文件中。 第二個測試永遠不會成功,因為文件的所有login_2以換行符結尾,但login_2不會,所以它們永遠不會匹配。

您需要檢查完全格式化的行,包括換行符。

if f'{login_1} : {login_2}\n' in fr:
  1. if bi.upper() in login_list:似乎可疑。 login_list不是一個列表,它是一個字符串。 因此,這將檢查bi.upper()是否是任何子字符串——如果用戶輸入logingi ,而不僅僅是login ,它將成功。 這是故意的嗎?

完整代碼:

from time import sleep

login_list = "LOGIN"
register_list = "REGISTER"

if 1 > -3232:
    print("Type register for new account\ntype login for login into existing account")
    bi = input("==>    ")

    if bi.upper() in login_list:
        print("you are registered?? nice now loginnn!!")
        login_1 = input("your username:   ")
        login_2 = input("your password:   ")
        with open('pass.txt', 'r') as fr:
            if f'{login_1} : {login_2}\n' in fr:
                print("Nice my program worked??")
                exit()
            else:
                exit()

    elif bi.upper() in register_list:
        print("you are in register section: ")
        sleep(.9)
        print("NOTE:  Your password should only contain alphabets!")
        sleep(4)
        reg_1 = input("your username:     ")
        sleep(.9)
        reg_2 = input("your password:     ")
        sleep(.9)
        reg_2v1 = input("confirm password")
        if reg_2 == reg_2v1:
            with open('pass.txt', 'a') as f:
                f.write(reg_1 + " : " + reg_2 + "\n")
            print("now login again,")
        else:
            print("invalid password, try again")

    else:
        print("you gave me the wrong command")

else:
    exit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM