我在业余时间创建一个项目,这是一个基于用户的测验,具有得分记录和高分记录。目前,我停留在创建的第一阶段,即登录部分。我为此使用CSV,因为我发现它们比其他方法更容易编辑。
问题在于它仅检查文件的第一行,而没有其他任何检查。当在第一行之后添加人员时,这可能会导致问题,因为它会检查第一行,发现他们不匹配,并在下面引发“错误”错误。
我已经使用print()语句尝试查看输入或python检查csv文件是否存在任何问题,但是一切似乎都很好,它以正确的格式响应完整的csv,因此它应该可以工作。
def login():
print("\n")
print("-----------------------------------------")
print("Create an account")
print("-----------------------------------------")
uname = input("Enter name: ")
pword = input("Enter a password: ")
print("----------------------------------------")
print("Please wait...")
print("-----------------------------------------")
UD = open(os.path.join(os.path.dirname(__file__), 'users.csv'), 'r')
for line in UD:
user = line.split(",")
print("input for uname is: "+uname)
print("input for pword is: "+pword)
print(user[0])
print(user[1])
if user[0] == uname and user[1] == pword:
print("\n")
print("-----------------------------------------")
print("Login successful!")
print("-----------------------------------------")
UD.close()
else:
print("\n")
print("----------------ERROR!-----------------")
print("Incorrect username / password!\n")
break
CSV文件当前仅包含以下条目:
person1 password1
person2 password2
我在做什么错?任何帮助都将不胜感激。
编辑:运行当前代码的输出:
Enter name: person1
Enter a password: password1
----------------------------------------
Please wait...
-----------------------------------------
----------------ERROR!-----------------
Incorrect username / password!
答案 0 :(得分:0)
您有两个问题。
数据字段之间用空格而不是逗号分隔,因此您要编写
user = line.split(' ')
甚至,因为默认情况下,split()
使用空格序列作为分隔符
user = line.split()
我想提到的是,您可以解压拆分结果并为变量使用更重要的名称
user, passwd = line.split()
接下来,您说用户输入与存储的数据不匹配,但这是因为input()
从其结果中删除了新行,而文件对象上的迭代返回了确实包含换行的行,因此您必须strip()
使用数据项。这可以简单地实现,
user, passwd = [item.strip() for item in line.split()]
最后,我不得不提到您的登录过程不正确,因为如果您的用户提供的用户名和密码分别为"person2"
和"password2"
,它将对第一行进行检查,将拒绝登录并将打破循环,我敢打赌这不是您想要的...
我会写
for user, passwd in (item.strip() for item in open(...)):
if user==uname and passwd==pword:
print('OK')
success = 1
break
else:
print('No login')
success = 0
if not success: sys.exit()
play_game()
答案 1 :(得分:0)
1。首先,您的csv并不是真的昏迷,因此请修复该问题
2.由于每一行的尾随空白,它一直都在失败
3.这只是一个注释,最好使用with
语句,因为它是pythonic方式
4.您可以使用.strip()
这是解决您问题的有效方法
import os
def login():
print("\n")
print("-----------------------------------------")
print("Create an account")
print("-----------------------------------------")
uname = input("Enter name: ")
pword = input("Enter a password: ")
print("----------------------------------------")
print("Please wait...")
print("-----------------------------------------")
with open(os.path.join(os.path.dirname(__file__), 'test.csv'), 'r') as f:
files = f.readlines()
for f in files:
# print('Entry: ',f)
user,pwd = f.split(",")
print(user,'\t',pwd)
print("input for uname is: "+uname)
print("input for pword is: "+pword)
if user == uname and pwd[:-1] == pword:
print("\n")
print("-----------------------------------------")
print("Login successful!")
print("-----------------------------------------")
break
else:
print("\n")
print("----------------ERROR!-----------------")
print("Incorrect username / password!\n")
print(len(uname),len(pword))#this is the length of your inputs
print(len(user),len(pwd))#This is the length of your compare values, note length of password
login()