text = 'mrttaqrhknsw ih puggrur' custom_key = 'happycoding' def vigenere(message, key, direction=1): key_index = 0 alphabet = 'abcdefghijklmnopqrstuvwxyz' final_message = '' for char in message.lower(): # Append any non-letter character to the message if not char.isalpha(): final_message += char else: # Find the right key character to encode/decode key_char = key[key_index % len(key)] key_index += 1 # Define the offset and the encrypted/decrypted letter offset = alphabet.index(key_char) index = alphabet.find(char) new_index = (index + offset*direction) % len(alphabet) final_message += alphabet[new_index] return final_message def encrypt(message, key): return vigenere(message, key) def decrypt(message, key): return vigenere(message, key, -1) print(f'\nEncrypted text: {text}') print(f'Key: {custom_key}') decryption = decrypt(text, custom_key) print(f'\nDecrypted text: {decryption}\n') I wrote this block of code while completing scientific computing with Python on FreeCodeCamp. Can someone please help me understand the lines of code between else statement and return statement? Also, what would happen if we used offset = alphabet[key_char] instead of in this line: offset = alphabet.index(key_char)? Thank you so much! Continue reading...