Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Error: the encoded message must be a list of integers

I am creating a prime encryption program however I am running into a very perplexing error.

This is my code:

import random
import datetime

def decode(encoded_message, p):
    # Initialize an empty list to store the decoded message
    decoded_message = []
    # Iterate over the encoded characters in the encoded message
    for c in encoded_message:
        # Decode each character by subtracting the prime number p from its ASCII value
        decoded_c = chr(int(c) - p)
        # Append the decoded character to the decoded message
        decoded_message.append(decoded_c)
    # Return the decoded message as a string
    return ''.join(decoded_message)
def is_prime(n, k=20):
  # If n is less than 2, it is not prime
  if n < 2:
    return False

  # If n is 2 or 3, it is prime
  if n == 2 or n == 3:
    return True

  # If n is even, it is not prime
  if n % 2 == 0:
    return False

  # Find r and s such that n - 1 = 2^s * r, where r is odd
  s = 0
  r = n - 1
  while r % 2 == 0:
    s += 1
    r //= 2

  # Repeat k times:
  for _ in range(k):
    a = random.randrange(2, n - 1)
    x = pow(a, r, n)
    if x != 1 and x != n - 1:
      j = 1
      while j < s and x != n - 1:
        x = pow(x, 2, n)
        if x == 1:
          return False
        j += 1
      if x != n - 1:
        return False
  return True
# Get the key from the user
key = int(input("What is the key?"))

# Check if the key is prime
if not is_prime(key):
  print("Error: the key must be a prime number")
else:
  # Get the encoded message from the user
  encoded_message = list(input("What is the encoded message?"))

  # Check if the encoded message is a list of integers
  if not all(isinstance(i, int) for i in encoded_message):
    print("Error: the encoded message must be a list of integers")
  else:
    # Decode the message
    decoded_message = decode(encoded_message, key)
    print("Your decoded message is:", decoded_message)


  

What I enter is
[72, 77, 82, 77, 82, 84, 83, 80, 87, 82, 76, 73, 85]
into encoded_message = list(input("What is the encoded message?"))
I also enter 5 into key = int(input("What is the key?"))
The key input works just fine. I do not know what the problem is with this. I have tried removing brackets and removing the commas, but nothing seems to work…

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

No matter what I change, I get this error:
Error: the encoded message must be a list of integers

>Solution :

In

encoded_message = list(input("What is the encoded message?"))

list(input(...)) takes the string output by input and turns it into a list, so without an input:

>>> list("[1,2,3]")
['[', '1', ',', '2', ',', '3', ']']

The result is obviously not what you want, but use ast.literal_eval instead to have Python parse (some limited) Python syntax so you get an actual list of ints:

>>> import ast
>>> ast.literal_eval("[1,2,3]")
[1, 2, 3]
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading