我正在为我的考试练习制作一个分析系统后端的程序。我将用户名和密码存储在.txt文件中。它说当我输入密码并进入程序的下一部分然后循环返回并再次询问详细信息时它是有效的???
这是我的代码,我认为问题是:
def Login(): #Login function
f = open('login.txt','r')
username = f.readline().strip()
password = f.readline().strip()
usernameLog = input('Please enter your username: ')
validuser = False
while validuser == False:
if usernameLog == username:
print('Username accepted')
time.sleep(1)
userpassLog = input('Please enter a password: ')
if userpassLog == password:
print('Successfully logged in')
time.sleep(0.5)
Options()
validuser = True
else:
print('Please enter a valid password')
validuser = False
else:
print('Invalid username please re-enter it.')
validuser = False
Login()
f.close()
答案 0 :(得分:0)
破解解决了这个问题:
tree_.value[node]
答案 1 :(得分:0)
首先回答您的问题:在else
条件下输入错误密码(在print('Please enter a valid password')
下),您有一个非缩进validuser = False
。那么,当密码良好时,您稍早设置的validuser = True
会被validuser = False
立即替换。只需缩进该行以将其置于else
条件下即可修复代码:)
现在,谈论优化/最佳实践......在你的代码中,你使用一个无限循环条件变量,这是一个迭代方法,并在你的函数中调用你的函数是一种递归方法,在我看来这不是一个非常好的选择......或者至少不是同一级别的循环!
如果您想完全迭代,那么您只需要将Login()
替换为
usernameLog = input('Please enter your username: ')
或者,如果你想同时进行递归调用和迭代循环,你只能循环密码:
def Login():
f = open('login.txt','r')
username = f.readline().strip()
password = f.readline().strip()
usernameLog = input('Please enter your username: ')
if usernameLog == username:
print('Username accepted')
time.sleep(1)
validpassword = False
while validpassword == False:
userpassLog = input('Please enter a password: ')
if userpassLog == password:
print('Successfully logged in')
time.sleep(0.5)
Options()
validpassword = True
else:
print('Please enter a valid password')
validpassword = False
else:
print('Invalid username please re-enter it.')
Login()
f.close()
老实说,每次输入错误的用户名时重新打开同一个文件似乎有点浪费时间,所以我建议使用迭代版本,如果这对你的任务有好处...... / p>