我想比较userN
和nameDb
以及userP
和passDb
,如果两个字符串都匹配或不匹配,则0上的loginResult
将变为1
[Edit1]:将初始loginResult
从0更改为1,在login
函数下的if-else处添加2打印语句
[Edit2]:我在login
函数中比较字符串的方式似乎有问题。即使这两个字符串都匹配,它仍然会转到else
语句。导致CCD_ 10始终为0。
loginResult = 1
userN = input("Username:")
userP = input("Password:")
def login(userN,userP):
global = loginResult
nameDb = open("files1", mode ="r")
passDb = open("files2", mode ="r")
print("Textfile username:",nameDb.readline())
print("Textfile password:",passDb.readline())
if(userN == nameDb.readline() and userP == passDb.readline()):
loginResult = 1
print("Ding")
return
else:
loginResult = 0
print("Dong")
login(userN, userP)
if(loginResult == 1):
print("Welcome !")
elif(loginResult == 0):*emphasized text*
print("Error !")
输出:
用户名:Kelvin12
密码:Maxi12
文本文件用户名:Kelvin12
文本文件密码:Maxi12
dong
错误!
进程返回0(0x0(执行时间:4.688秒按任意键继续。
首先始终将open
与with
一起使用,然后修剪并替换字符串中的换行符:
loginResult = 0
userN = input("Username:")
userP = input("Password:")
def login(userN,userP):
with open("files1", mode ="r") as nameDb, open("files2", mode ="r") as passDb:
if(userN == nameDb.readline().strip().replace('n', '') and userP == passDb.readline().strip().replace('n', '')):
loginResult = 1
return
else:
loginResult = 0
login(userN, userP)
if(loginResult == 1):
print("Welcome !")
elif(loginResult == 0):
print("Error !")
您正试图从函数中为全局变量loginResult
分配不同的值。如果你想做到这一点,你必须使用global
关键字。您可以在原始代码中只添加一行:
loginResult = 1
userN = input("Username:")
userP = input("Password:")
def login(userN,userP):
global loginResult # now loginResult is global, not local
nameDb = open("files1", mode ="r")
passDb = open("files2", mode ="r")
print("Textfile username:",nameDb.readline())
print("Textfile password:",passDb.readline())
if(userN == nameDb.readline() and userP == passDb.readline()):
loginResult = 1
print("Ding")
return
else:
loginResult = 0
print("Dong")
login(userN, userP)
if(loginResult == 1):
print("Welcome !")
elif(loginResult == 0):*emphasized text*
print("Error !")
你能打印nameDb和passDb是什么类型的数据吗?如果是列表,请使用"in"而不是"=="。
使用for循环,它将nameList
中的所有内容打印为X
变量。如果x
和userN
的字符串匹配,它就会执行下面的代码。
userN = input("Username:")
userP = input("Password:")
with open("file1", mode ="r") as nameDb:
nameList = nameDb.read().splitlines()
with open("file2", mode ="r") as passDb:
passList = passDb.read().splitlines()
#using .read.splitlines removes "n" in the output
for x in nameList:
if x == userN:
loginName = 1
break
else:
loginName = 0