2 回答
TA贡献1836条经验 获得超4个赞
1.首先,您的 csv 并没有真正昏迷,因此请修复该问题 2.由于每行中的尾随空格而一直失败 3.这只是一个注释,您最好使用该with语句是 pythonic 方式 4.You can fix the whitespace issue with.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()
如果没有找到匹配项,for 循环中的 else 就会执行,学习一些新的东西
TA贡献1829条经验 获得超13个赞
你有两个问题。
数据字段由空格而不是逗号分隔,因此您要编写
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()
添加回答
举报