Python: программа преобразования текста в ASCII и ASCII в текст - PullRequest
2 голосов
/ 17 августа 2010

Я новичок в Python 2.7, пытаюсь создать простую программу, которая принимает входную строку от пользователя, преобразует все символы в их значения ascii, добавляет 2 ко всем значениям ascii и затем преобразует новые значения втекст.Так, например, если пользовательский ввод «test», вывод должен быть «vguv».

Это код, который я написал до сих пор:

message = input("enter message to encode")

for ch in message:
     message2 = ord(ch) + 2
     print "\n\n"
     encodedmessage = ""
     for item in message2.split():
            encodedmessage += chr(int(item))

print ("encoded msg in text : "), encodedmessage

Кажется, он неработать должным образом, любая помощь будет оценена.Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 августа 2010

message2 = ord(ch) + 2 делает message2 целым числом, и поэтому, конечно, вы не можете затем вызвать split для него - это единственное целое число, представляющее один символ, почему бы вам не захотелось split Это?! Кроме того, вы сбрасываете encodedmessage на пустую строку каждый раз в цикле, поэтому, как только вы исправите странность split (просто удалив ее!), Вы, конечно, увидите только последнюю персонажа; переместите encodedmessage = '' в перед циклом.

1 голос
/ 17 августа 2010

Пытаетесь ли вы выполнить функцию типа rot-13 (или обобщенную "rot-x")?

from string import ascii_uppercase, ascii_lowercase

def rotx(data,rotby):
    total = []
    for char in data:
        if char in ascii_uppercase:
            index = (ascii_uppercase.find(char) + rotby) % 26
            total.append(ascii_uppercase[index])
        elif char in ascii_lowercase:
            index = (ascii_lowercase.find(char) + rotby) % 26
            total.append(ascii_lowercase[index])
        else:
            total.append(char)
    return "".join(total)

Выполнение:

>>> import rotx
>>> rotx.rotx("test",2)
'vguv'
>>> rotx.rotx("IBM-9000",-1)
'HAL-9000'

Если вы добавляете все 2Символы ASCII, } становится недоступным для печати, ~ превращается во что-то в зависимости от кодировки вашего символа

1 голос
/ 17 августа 2010

Вы смешиваете символы и строки.Когда вы перебираете строку (например, «сообщение»), на каждой итерации вы получаете один символ.Кроме того, ord (ch) является целым числом, числом, поэтому вы не можете «разделить» его.

Кроме того, не используйте «input», вместо этого используйте «raw_input».

Возможно, вам нужно что-то похожее на это:

message = raw_input("enter message to encode: ")
encoded_message = ""
for ch in message:
     encoded_ord = ord(ch) + 2

Здесь у вас еще нет нового сообщения, поскольку цикл выдает вам по одному символу за раз, поэтому я переименую переменную в«encoded_ord», который лучше описывает, что он содержит.

Теперь вы можете превратить этот «кодированный орд» в закодированный символ и добавить его в закодированное сообщение:

     encoded_ch = chr(encoded_ord)
     encoded_message += chr(encoded_ch)

print "encoded msg in text:", encodedmessage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...