I have recently started trying to learn python. As a learning project I have been making a small encryption/decryption program. The problem I have is that I have a while loop in action so the program can be re-run from the terminal without exiting and reloading the program. This however somehow concatenates the 'james' variable so that each run through adds to the james variable.
How can I blank the james variable as all attempts I have made have failed?
#! /usr/bin/python
import random
import time
#This program will encrypt and decrypt a string (line of text or numbers)
#first we need a list of all the characters a-z, 0-9 and !-@
Alphabet = [' ','a','b', 'c', 'd','e','f', 'g', 'h','i', 'j', 'k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','!','"','£','$','%','^','&','*','(',')','@','?',',','\'','.',':' ]
#53 objects in list
#List to store each letter of the encrypted word
encryptedWord = []
#Now to create a function to search for a letter and performs the encryption
def encrypt(letter, Alphabet, encryptNo, operation):
index = Alphabet.index(letter)#Finds the index of the given letter
#These if statements determine whether the option for encryption or decryption
#has been chosen and then performs the operation
if operation == '1': #Encryption
if ((index + encryptNo)<=53):
newIndex = index + encryptNo
else:
newIndex = ((index + encryptNo)-53)
else: #Decryption
if ((index - encryptNo)>=0):
newIndex = index - encryptNo
else:
newIndex = ((index - encryptNo)+53)
retLetter = Alphabet[newIndex]
return (retLetter)
def displayIntro():
print ('Welcome to the encryption and decryption tool')
print ('Encrypting some text translates the text into a secret code.')
print ('Decrypting a secret code will translate it back into normal text')
print ()
print ('---------------------------------------------------------------------------')
print ()
operation = input('Select from the options below.\n 1= Encryption\n 2= Decryption\n Choice: ')
encryptNo = int(input('Type your encryption Factor (1-25): '))
wordToEncrypt = input('Type the word you would like to encrypt: ')
return (operation, encryptNo, wordToEncrypt)
#now to the program, The playagain while loops is meant to allow for multiple running of the file.
james = ''
playAgain = 'yes'
while playAgain == 'yes' or playAgain == 'y':
operation, encryptNo, wordToEncrypt = displayIntro()
#The next line splits the word string into seperate letters and fills a list called dave with each letter.
dave = [wordToEncrypt[i:i+1] for i in range(0, len(wordToEncrypt), 1)]
#Now I loop through the dave list sending the encrypt function each letter one at a time and returning the
#encrypted/decrypted letter
i=0
while i<=(len(dave)-1):
letter = dave[i]
encryptedLetter = encrypt(letter, Alphabet, encryptNo, operation)
encryptedWord.extend([encryptedLetter])
i = i+1
#This is where My problem occurs. Each time I run through the while loop it is
#concatonating the james variable with what it was the previous run through.
#the del james doesnt seem to work either :(
del james
james = ''.join(encryptedWord)
print ()
if operation == '1':
print ('Your secret code is: ',james)
else:
print ('Your code said: ', james)
print ()
print ('----------------------------------------------------------------------')
print ()
print ('do you want to play again? (yes or no)')
playAgain = 'no'
playAgain = input()
Running this program to encrypt the word john using an encryption factor of ten returns the word tyrx. If you select yes to play again and then decrypt tyrx it returns tyrxjohn.
Hope I am making myself clear.