I want to save raw input elements in a dictionary to a variable. Here is a sample of what I am doing:
accounts = {} def accountcreater(): accountname = raw_input("Account Name: ") accountpassword = raw_input("Account Password: ") accountUUID = 1 accountUUID += 1 accounts[accountname] = {"password":accountpassword,"UUID":accountUUID} def login(): loginusername = raw_input("Account Name: ") loginpassword = raw_input("Account Password: ") for usernames in account: if usernames == loginusername: accountpassword = accounts[usernames][???] accountpassword = accounts[usernames][???] else: pass That is a very simple example of what the code is like. Now the part where the "[???]" is I have no idea what to put. I tried putting this code:
accountpassword = accounts[usernames][password] accountpassword = accounts[usernames][UUID] But that does not seem to work because it says password and UUID are not defined. Yet I seem to be able to just input [usernames] and it will work just fine. Any ideas?
EDIT
For the follow code:
accountpassword = accounts[usernames]['password'] accountpassword = accounts[usernames]['UUID'] I have also tried putting them in strings, and it raises this error: String indices must be integers, not str.
EDIT 2
This is my code in its entirety, please be warned it is very long and extensive. The only part that you need will be at the top under the functions startup, login, and account.
import datetime import time #import pickle filesfile = "filesfiles" #File's Pickle File accountfile = "accountsfiles" #Account's Pickle File accounts = {} #Where accounts are put files = {} #Where files are put currentaccount = None #The current account the user is on #accountsaver = open(accountfile,'r') #Restores all current accounts #accounts = pickle.load(accountsaver) #accountsaver.close() #filesaver = open(filesfile,'r') #Restores all current files #files = pickle.load(filesaver) #filesaver.close() def startup(): for accountname in accounts: # accountpassword = accounts[accountname]['password'] print type(accountname) #accountsaver = open(accountfile,'wb') #Adds a new account if there is one #pickle.dump(accounts, accountsaver) #accountsaver.close() print "\n ------------------- " print " FILE SYSTEM MANAGER " print " ------------------- " print "\n To login type in: LOGIN" print " To create a new account type in: ACCOUNT" loginornew = raw_input("\n Please enter LOGIN or ACCOUNT: ") #Input to see where you want to go if loginornew.lower() == "login": login() elif loginornew.lower() == "account": newaccount() else: startup() def newaccount(): newusername = "" newpassword = "" newpasswordagain = "" UUID = 0 #UUID variable print "\n--------------------------------------------" print "\n Would you like to create a new account?" yesorno = raw_input("\n Please enter YES or NO: ") #Checks to see if user wants to create a new account if yesorno.lower() == "no": print "\n--------------------------------------------" startup() elif yesorno.lower() == "yes": while len(newusername) < 8: #Checks to see if username is atleast 8 characters newusername = raw_input("\n Username must be atleast 8 characters\n Please enter a username for your account: ") while len(newpassword) < 5: #Checks to see if password is atleast 5 characters newpassword = raw_input("\n Password must be atleast 5 characters\n Please enter a password for your account: ") while newpasswordagain == "": #Makes sure there is a input newpasswordagain = raw_input(" Please confirm the password for your account: ") if newpassword == newpasswordagain: #Checks to make sure the password is correct for username in accounts: #Loops through all usernames in acccounts if username.lower() == newusername.lower(): #Checks to see if the username already exists print "\n Username already exists" print " Please try again" newaccount() else: #If the username is not taken and the password is correct it creates the accounts pass UUID += 1 #Makes the current UUID number bigger by one accounts[newusername] = {"password":newpassword,"UUID":UUID} #Creates a new account print "\n Account Created" print "\n--------------------------------------------" startup() #Takes you back to startup menu else: #If the passwords do not match each other print "\n Passwords do not match" print " Please try again" newaccount() else: newaccount() def login(): username = "" password = "" print "\n--------------------------------------------" print "\n Would you like to login?" yesorno = raw_input("\n Please enter YES or NO: ") #Checks to see if user wants to login if yesorno.lower() == "no": print "\n--------------------------------------------" startup() elif yesorno.lower() == "yes": for usernames2 in accounts: #Testing Purposes print usernames2, #Testing Purposes print "" #Testing Purposes for usernames23 in accounts: #Testing Purposes for usernames3 in str(accounts[usernames23]): #Testing Purposes print usernames3, #Testing Purposes while username == "": #Makes sure there is a input username = raw_input("\n Please enter your username: ") while password == "": #Makes sure there is a input password = raw_input("\n Please enter your password: ") for usernames in accounts: #Loops through all usernames in accounts if username.lower() == usernames.lower(): #Checks to see if the username input equalls a username in the accounts dictionary accountpassword = accounts['username'][password] accountUUID = 0 if password == accountpassword: for accountname in accounts: accountpassword = accounts[accountname] print "\n Access Granted" print "\n--------------------------------------------" menu() else: pass print "\n Access Denied" print "\n Please try again" login() else: pass print "\n Access Denied" print "\n Please try again" login() else: login() def menu(): #filesaver = open(filesfile,'wb') #Adds a new file if there is one #pickle.dump(files, filesaver) #filesaver.close() print "\n ------------------- " print " FILE SYSTEM MANAGER " print " ------------------- " print "\n What would you like to do with your files?" print " To make a new file type in: NEW" print " To edit a current file type in: EDIT" print " To delete a current file type in: DELETE" print " To view all current files type in: ALL" chooser = raw_input("\n Please enter NEW, EDIT, DELETE, or ALL: ") #Input to see where you want to go if chooser.lower() == "new": newfile() elif chooser.lower() == "edit": editfiles() elif chooser.lower() == "delete": deletefiles() elif chooser.lower() == "all": allfiles() else: menu() def newfile(): filename = "" filetext = "" while filename == "": #Makes sure there is a input print "--------------------------------------------" filename = raw_input("\n Please input your new files name: ") while filetext == "": filetext = raw_input("\n Please input the text for your new file: ") filedate = datetime.date.today() #Grabs the current date files[filename] = {userUUID:{filedate:filetext}} #Creates a new file print "\n File Added" print "\n--------------------------------------------" menu() def editfiles(): print "--------------------------------------------" print " To edit a file type in: EDIT" print " To view all current files type in: ALLFILES" print " To cancel type in: CANCEL" wheretogo = raw_input("\n Please enter EDIT, ALLFILES, or CANCEL: ") if wheretogo.lower() == "edit": print "\n To edit a file type in its name" print " To cancel type in: CANCEL" print "\n **Please Note** Editing a file changes its date!" editname = raw_input("\n Please type in the file's name or CANCEL: ") if editname.lower() == "cancel": menu() else: newcontents = "" for filename in files: #Loops through all file names in files if filename.lower() == editname.lower(): print "\n What would you like this file to say?" while newcontents == "": newcontents = raw_input("\n Please input files new contents: ") filetext = newcontents filedate = datetime.date.today() files[filename] = {filedate:filetext} print "\n File Changed" print "--------------------------------------------" menu() else: pass print "\n File not found!" editfiles() elif wheretogo.lower() == "allfiles": print "\n--------------------------------------------" for filename in files: print "File Name: " + str(filename) print "--------------------------------------------" print "\n To edit a file type in: EDIT" print " To cancel type in: CANCEL" print "\n **Please Note** Editing a file changes its date!" wheretogo = raw_input("\n Please enter EDIT or CANCEL: ") if wheretogo.lower() == "edit": editname = raw_input("\n Please type in the file's name to edit it: ") newcontents = "" for filename in files: if filename.lower() == editname.lower(): print "\n What would you like this file to say?" while newcontents == "": newcontents = raw_input("\n Please input files new contents: ") filetext = newcontents filedate = datetime.date.today() files[filename] = {filedate:filetext} print "\n File Changed" print "--------------------------------------------" menu() else: pass print "\nFile not found!" editfiles() elif wheretogo.lower() == "cancel": menu() else: menu() elif wheretogo.lower() == "cancel": menu() else: menu() def deletefiles(): print "--------------------------------------------" print " To delete a file type in: DELETE" print " To view all current files type in: ALLFILES" print " To cancel type in: CANCEL" wheretogo = raw_input("\n Please enter DELETE, ALLFILES, or CANCEL: ") if wheretogo.lower() == "delete": print "\n To delete a file type in its name" print " To cancel type in: CANCEL" deletename = raw_input("\n Please type in the file's name or CANCEL: ") if deletename.lower() == "cancel": menu() else: for filename in files: if filename.lower() == deletename.lower(): del files[filename] print "\n File Removed" print "--------------------------------------------" menu() else: pass print "\n File not found!" deletefiles() elif wheretogo.lower() == "allfiles": print "\n--------------------------------------------" for filename in files: print "File Name: " + str(filename) print "--------------------------------------------" print "\n To delete a file type in: DELETE" print " To cancel type in: CANCEL" wheretogo = raw_input("\n Please enter DELETE or CANCEL: ") if wheretogo.lower() == "delete": deletename = raw_input("\n Please type in the file's name to delete it: ") for filename in files: if filename.lower() == deletename.lower(): del files[filename] print "\n File Removed" print "--------------------------------------------" menu() else: pass print "\nFile not found!" deletefiles() elif wheretogo.lower() == "cancel": menu() else: menu() elif wheretogo.lower() == "cancel": menu() else: menu() def allfiles(): filetexttotal = "" for filename in files: print "\n--------------------------------------------" print "\nFile Name: " + str(filename) for filedate in files[filename]: print "File Date: " + str(filedate) for filetext in files[filename][filedate]: filetexttotal = filetexttotal + str(filetext) print "File Contents: " + str(filetexttotal) filetexttotal = "" print "\n--------------------------------------------" menu() startup() Please note also on top of all of that. This code may have some errors, it is a work in progress. Yes if you are wondering, this is a filing system! :)
accounts[usernames]["password"]. The key to the dictionaries is the string"password". Currently it's trying to use whatever is in the variablepassword, which is not defined.