【问题标题】:How to check, if one line from one document applies to the same line, but in another document如何检查一个文档中的一行是否适用于同一行,但在另一个文档中
【发布时间】:2021-01-31 16:33:25
【问题描述】:

我以前的问题已经通过在某些地方使用类而不是函数来解决。但是还有一个问题。如何检查一个文档中的一行是否适用于同一行但在另一个文档中?我试过这个,它什么也没做,也没有给我错误代码。

class Logging1(object):

    def __init__(self, enteruser, enterpass):
        self.enteruser = enteruser
        self.enterpass = enterpass

    def __call__(self):

        usernames1 = open("usernames.txt", "r")
        passwords2 = open("passwords.txt", "r")

        rowU = 0
        rowP = 0

        for x in usernames1:
            if x != self.enteruser.get():
                rowU += 1
            else:
                break

        for y in passwords2:
            if y != self.enterpass.get():
                rowP += 1
            elif rowP == rowU:
                logged = Label(root, text="Successful login!")
                logged.grid(row=5, column=1)
                break

【问题讨论】:

  • “这段代码可能有很多错误,因为我是初学者” 没错,Stackoverflow 是一个针对特定编程问题的问答平台。这个问题是题外话。您应该使用调试器逐行执行代码,分析每个问题并针对您无法解决的每个问题提出特定问题。提示:usernames1 and passwords2 不符合您的预期。使用with open(...) as ...: 打开文件。 buttonreg = Button(root, text="Register", padx="30", pady="5", command=registering1) 不带参数调用函数 registering1

标签: python function tkinter


【解决方案1】:

在调用函数时没有传递这两个变量regEnterpass, regEnteruser

由于我在平板电脑上,我无法进行测试,但以下操作是否有效?通过创建一个类来存储两个变量并在调用时使用它们

更新:您可以读取 init 中的文本文件并将它们存储为字典

class Logging1(object):

    def __init__(self, enteruser, enterpass):
        self.enteruser = enteruser
        self.enterpass = enterpass
        
        ## open usernames.txt and get usernames
        with open("usernames.txt", "r") as users_file:
            users = [user for user in users_file]

        ## open password.txt and get passwords
        with open("passwords.txt", "r") as password_file:
            passwords = [password for password in password_file]
        
        ## combine and store them in a dictionary 
        self.users_dict = dict(zip(users, passwords))

    def __call__(self):
        entered_user = self.enteruser.get() ## get entered username
        
        if self.users_dict.has_key(entered_user): ## valid username
            entered_pw = self.enterpass.get() ## get entered password
            
            stored_pw = self.users_dict[entered_user]
            
            if entered_pw == stored_pw: ## correct username and pw
                logged = Label(root, text="Successful login!")
                logged.grid(row=5, column=1)
            else: 
                pass ## incorrect password
                
        else: pass ## not a valid username
        
def register():

    regUsername = Label(root, text="Set username: ")
    regUsername.grid(row=0, column=0)
    regEnteruser = Entry(root)
    regEnteruser.grid(row=0, column=1)

    regPassword = Label(root, text="Set password: ")
    regPassword.grid(row=1, column=0)
    regEnterpass = Entry(root)
    regEnterpass.grid(row=1, column=1)
    
    registering1 = Logging1(regEnterpass, regEnteruser) ## create Registering1 object

    buttonreg = Button(root, text="Register", padx="30", pady="5", command=registering1)
    buttonreg.grid(row=2, column=1)

    return regEnterpass and regEnteruser

【讨论】:

  • 这解决了我的主要问题,非常感谢。我不会考虑使用类,但它们比人们想象的要有用得多。
  • 这个作品?顺便说一句,我不会将密码存储在 txt 文档中,这只是一个 hacky 修复,可以让您的代码按照当前设置的方式工作,不确定您是否每次都想要打开文本文档
猜你喜欢
  • 2015-05-30
  • 2021-04-17
  • 2020-05-17
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2020-06-11
相关资源
最近更新 更多