Search code examples
python-3.7

Adding strings from python to text file and then verify lines in while loop


I'm new to coding and still learning about Python. I have a task where I have to upload lines from Python to a text file and then verify the lines later in the code e.g. I have to input user names and user passwords and add to the text file as [user_name, user_pass]. My problem is that when I try to verify the line one of 2 things happen. After I added a split function for the line e.g. verified_user, verified_password = line.split(", ") it runs into an error stating that I do not have enough values for the request made e.g 2 expected, 1 made. If I change the split input and it does run, the verification loop states that my inputs does not match any lines in the string.

Every thing works if I add the information to the text file only. But the moment I add via the appendix action in Python it no longer works.

this is what I have so far:

user_list = []
all_names_entered = "no"

while all_names_entered == "no":

   user_name = input("Enter user name: ")
   user_pass = input("Enter password: ")
   user_list.append(user_name + ", " + user_pass)

    while True:
    all_names_entered = input("All users entered?: ")
      if all_names_entered in ['yes','no']:
        break
     else:
        print( 'please answer with yes or no' )
for items in user_list:
with open('user.txt', 'a') as file:
    file.write(f"{user_name}, {user_pass}\n")
print (user_list)

file.close()

the next block reads as follow:

   user_file = open("user.txt", "r+")
   login = False

while login == False:
   username = input("Enter user name: ")
   password = input("Enter user password: ")

for line in user_file:
    other = line.strip()
    valid_user, valid_password = line.split(", ")
if username == valid_user and password == valid_password:
    login = True
    print ("You have successfully logged in")
    break
else:
    print("You have entered incorrect detail. Please try again")

user_file.seek(0)
    
user_file.close()

Solution

    • Firstly, indentation is important in Python.
    • Secondly, you're supposed to loop if user enters 'no'.
    • Utilize the item that's initialized in each for loop.
    • You initialized other but it was never consumed.

    Following is code for writing into file:

    user_list = []
    all_names_entered = "no"
    
    while all_names_entered == "no":
        user_name = input("Enter user name: ")
        user_pass = input("Enter password: ")
        user_list.append(user_name + ", " + user_pass)
        query_all_names_entered = True
        while query_all_names_entered:
            all_names_entered = input("All users entered?: ")
            if all_names_entered == 'yes':
                query_all_names_entered = False
                break
            elif all_names_entered == 'no':
                query_all_names_entered = False
                continue
            else:
                print('Please answer with yes or no')
                all_names_entered = "no"
    with open('user.txt', 'a') as file:
        for item in user_list:
            file.write(f"{item}\n")
    print (user_list)
    
    file.close()
    

    And following is for reading file to log in:

    user_file = open("user.txt", "r+")
    login = False
    lines = user_file.readlines()
    
    while login == False:
        username = input("Enter user name: ")
        password = input("Enter user password: ")
    
        for line in lines:
            valid_user, valid_password = line.strip().split(", ")
            if username == valid_user and password == valid_password:
                login = True
                print ("You have successfully logged in")
                break
        if login == False: print ("You have entered incorrect detail. Please try again")
    
    user_file.close()