Linda Gray wrote: > Hello, > > I am working on a homework assignment that has me creating a password > saver > using a ceasar cipher code. I was provided the key to the cipher and two > passwords. I need to look up and decrypt the passwords and create a > program to add a password and delete a password (options 2, 3 and 7). I > had no problems adding a password. I am also having no problems looking > up a password but am havving problems decrypting the password.
The good news is that when you have a function that correctly encrypts a string using caesar's cipher you also have one that decrypts it -- because its the same function. Let's try: >>> def passwordEncrypt (unencryptedMessage, key): ... #We will start with an empty string as our encryptedMessage ... encryptedMessage = '' ... #For each symbol in the unencryptedMessage we will add an encrypted symbol into the encryptedMessage ... for symbol in unencryptedMessage: ... if symbol.isalpha(): ... num = ord(symbol) ... num += key ... if symbol.isupper(): ... if num > ord('Z'): ... num -= 26 ... elif num < ord('A'): ... num += 26 ... elif symbol.islower(): ... if num > ord('z'): ... num -= 26 ... elif num < ord('a'): ... num += 26 ... encryptedMessage += chr(num) ... else: ... encryptedMessage += symbol ... return encryptedMessage ... >>> encrypted = passwordEncrypt("Hello world!", 16) >>> encrypted 'Xubbe mehbt!' >>> passwordEncrypt(encrypted, -16) 'Hello world!' That's your function (without the empty lines to allow pasting into the interactive interpreter without syntax errors), and it seems to work. > I can only > get it to provide me the give, encrypted password and not the unencrypted > one The line > print(passwordunEncrypt(passwords[i][1], 16)) is incorrectly indented making it part of the passwordunEncrypt() function. Therefore it is never executed. It's generally a good idea to put functions at the beginning of a script and to define them on the module level rather than at some arbitrary point in a control structure (even experts hardly ever do that). > which is the one I need to provide. I am not getting any errors, it is > just not doing anything that I can see. I am getting the following error > with the deleting a password. > > Traceback (most recent call last): > File "C:/Users/lrgli/Desktop/Python Programs/Password test file.py", > line > 187, in <module> > passwords.remove (passwordToDelete) > ValueError: list.remove(x): x not in list > > Any assistance, guidance, pointers would be appreciated. Is my > indentation wrong for the decryption, am I missing something connecting > the two, etc.? The list contains lists (the site/password pairs) and remove looks for the password alone. A small example: >>> items = [["foo", "bar"], ["ham", "spam"]] >>> items.remove("foo") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: list.remove(x): x not in list For the removal to succeed you need to provide the exact entry: >>> items.remove(["foo", "bar"]) >>> items [['ham', 'spam']] A workaround would be to loop over the items >>> items = [["foo", "bar"], ["ham", "spam"]] >>> for i, item in enumerate(items): ... if item[0] == "foo": ... del items[i] ... break # required! ... >>> items [['ham', 'spam']] but Python has an alternative that is better suited for the problem: the dictionary: >>> lookup = {"foo": "bar", "ham": "spam"} >>> del lookup["foo"] >>> lookup {'ham': 'spam'} > I feel like I am close. It is python version 3. > > Here is my code: _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor