Найти - Пользователи
Полная версия: помогите пожалуйста
Начало » Python для новичков » помогите пожалуйста
1 2
ArsenEverlast
вот собственно в чем вопрос:надо написать прогу которая реализовует шифр цезаря,алгоритм детский,вот мой код

s=“”
s1=“”
answer = input(“Choose action:1-code,2-decode,0-exit”)
if(answer==1):
line = str(raw_input(“Input data”))
key = int(input(“Input key”))
for letter in line:
s+=“”.join(chr(ord(letter)+key))
s1+=letter + “->” + s + “ ”
print(s1)
print(s)
elif(answer==2):
line = str(raw_input(“Input data”))
key = int(input(“Input key”))
for letter in line:
s+=“”.join(chr(ord(letter)-key))
s1+=letter + “->” + s + “ ”
print(s1)
print(s)
else :
exit

проблема в том что пашет только с символами ascii, а мне надо и чтоб с кирилицей…помогите плиз
стоит python 2.6.5, пишу в PyScripter…
maxwell
ArsenEverlast, вместо ord и chr используйте «словари».
Т.е. создайте строку “АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ” и определяйте позицию буквы.
maxwell
А, и ваш алгоритм не учитывает «границы алфавита» в ASCII таблице. Надо проверять индекс получившегося символа.
ArsenEverlast
а никак не можна зделать метод “универсальным” чтоб работал для всего набора символов юникода?
чтоб здесь line = str(raw_input(“Input data”)) line била набором юникода?
try …catch и всякие проверки я зделаю, ето не проблема
maxwell
ArsenEverlast, можно. Кириллица в Юникоде
ArsenEverlast
maxwell
хорошая статья про кириллицу, когда-то уже читал)
если можно, то как?)
я всего лишь хочу чтоб прога читала символ и ей било пофик что ето за символ, ее задача лишь перевести етот символ в число,зделать сдвиг на целое число и перевести назад в символ…если делать ето с файлом в формате utf8 то никаких проблем нету, а вот с консолью уже проблеми
sp3
s=""
s1=""
answer = input("Choose action:1-code,2-decode,0-exit")
if(answer==1):
line = raw_input("Input data")
key = int(input("Input key"))
for letter in line:
s+="".join(unichr(ord(letter)+key))
s1+=letter + "->" + s[-1] + " "
print(s1)
print(s)
elif(answer==2):
line = raw_input("Input data")
key = int(input("Input key"))
for letter in line:
s+="".join(unichr(ord(letter)-key))
s1+=letter + "->" + s[-1] + " "
print(s1)
print(s)
else :
exit
ArsenEverlast
sp3
ОГРОМНОЕ СПАСИБО!! а все так просто получилось)))
knkd
Ну вы и понапридумывали…

cesar_encode = lambda string,shift:''.join([chr((ord(x)+shift)%255) for x in string])
cesar_decode = lambda string,shift:''.join([chr((ord(x)-shift)%255) for x in string])
maxwell
knkd остаток от деления на 255 не дает «правильного» решения. Во всяком случае, имхо, ‘
caesar(’xyz', 1) должен возвращать ‘yza’, а не следующие символы по ASCII.
В случае с русскими символами работать вообще не будет.

Для «обучения» не обязательно писать все в одну строчку, тем более что это напрочь отбивает понимание «эффективности» программы.
Для «себя» или «проверить» — питон замечателен именно такими фишками, что вы привели + интерактивная консоль.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB