我在这里遇到的问题是,虽然程序没有直接的语法错误,但如果我只输入部分密码(例如密码=密码,但我的输入可能只是"传递")。
所以,我在这里要求的是,是如何在文件中选择整个字符串。
是否使用split
使程序允许通过正确密码的部分副本?
或者是什么?
with open("users.txt") as f:
for i, l in enumerate(f):
l.split(":")
l.strip()
if username in l:
print("you exist...")
password= input("please input your password ")
while password not in l:
password=input("Enter your password")
该文件如下所示:
me:password123
user1:12345678
user2:12345678
左栏是用户名,右栏是密码
答案 0 :(得分:1)
string.strip
和string.split
都不是inplace操作,你需要像这样捕获返回的参数:
username = input("Username: ")
with open("users.txt") as f:
for l in f:
l = l.strip() # save the returned value
uname, upass = l.split(":") # split at : and assign it to variables
if username == uname: # check if the usernames match
print("you exist...")
password= input("please input your password ")
while password != upass: # check to see if the password match
password=input("Enter your password")
break # break out of the for loop
仍然可以做出很多改进,我会留给你们(这是故意的)。虽然还有一些错误需要修复,例如:如果用户名或密码中有冒号“:”,它也会被拆分。
答案 1 :(得分:1)
我会使用字典存储密码数据,用户名作为密钥,密码作为值。当然,在真实的程序中,你应该不将密码保存为纯文本!
import sys
passwords = {}
with open("users.txt") as f:
for line in f:
name, word = line.split(":")
passwords[name.strip()] = word.strip()
username = input("Please enter your username: ")
if username in passwords:
print("you exist...")
real_password = passwords[username]
password = ''
while password != real_password:
password = input("Please enter your password: ")
else:
print("you don't exist")
sys.exit()
print('Welcome,', username)
我们知道" users.txt"的每一行都有两个项目,因此我们可以使用line.split(":")
来构建包含这两个字符串的列表。我们可以使用元组赋值将这些字符串分配给单独的变量:
name, word = line.split(":")
但是,这些字符串的两边可能都有不需要的空格,因此在将它们放入.strip()
字典之前,我们需要在每个字符串上调用passwords
方法。
答案 2 :(得分:0)
username = str(input("Username: "))
password = str(input("Password: "))
f = open("test.txt", "r").read().splitlines()
for index in range(len(f) - 1):
if f[index] == username and f[index + 1] == password:
print("Login made")