Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 3

Проблема с шифром Цезаря

16.11.2019, 15:01. Показов 1390. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый день!
Уважаемые форумчане, прошу Вашей помощи, т.к в этом деле новичок.
Делаю ДЗ и возникло ряд проблем:

1. как поправить код , чтобы не появлялась след ошибка:
TypeError Traceback (most recent call last)
<ipython-input-83-82d49765ecca> in <module>()
26 if x_message in low_abc:
27 ind = low_abc.index(x_message)
---> 28 x_text_cipher += low_abc [ind+key]
29 elif x_message in big_abc:
30 ind = big_abc.index(x_message)

TypeError: unsupported operand type(s) for +: 'int' and 'function'

Не понимаю, как исправить...

2. Помогите написать условие, если пользователь ввел ключ не число от 1 до 32 или например ввел буквы появлялось следующее сообщение : print ("Некорректный ввод. Введите число от 1 до 32, чтобы зашифровать сообщение.") и была возможность снова ввести ключ


Большое спасибо!


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
max_key_size=32
 
 
low_abc = [chr (i) for i in range(ord ("а"), ord('я')+1)]
low_abc.insert(6, "ё")
big_abc = [chr (i) for i in range(ord ("А"), ord('Я')+1)]
big_abc.insert(6, "Ё")
 
def x_text ():
  print ("Пожалуйста, введите текст для шифрования сообщения: ")
  return input ()
 
def key ():
  key=0
  while True:
    print ( "Пожалуйста, введите ключ от 1 до 32 для шифрования сообщения: " % (max_key_size))
    key = int(input())
  if (key >= 1 and key <= MAX_KEY_SIZE):
    return key
 
      
x_text_cipher = ("")
 
for x_message in x_text():
  if x_message in low_abc:
    ind = low_abc.index(x_message)
    x_text_cipher += low_abc [ind+key]
  elif x_message in big_abc:
    ind = big_abc.index(x_message)
    x_text_cipher += big_abc [ind+key]
  else:
    x_text_cipher += x_message
print ("Ваше зашифрованное сообщение: ", x_text_cipher)
 
print ("Хотите расшифровать зашифрованное сообщение?")
answer= input ("Ответ (Да/Нет): ")
if answer == ("Да"):
  print("Зашифрованное сообщение расшифровано:", x_text)
elif answer == ("Нет"):
  print ("Сообщение не будет расшифровано!")
else:
   print ("Введите другую команду")
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2019, 15:01
Ответы с готовыми решениями:

Шифрование сообщения шифром Цезаря
Напишите функцию encrypt_caesar(msg, shift), которая кодирует сообщение шифром Цезаря и возвращает его. Шифр Цезаря заменяет каждую букву в...

Зашифровать файл шифром Цезаря
Зашифруйте данный текстовый файл шифром Цезаря, при этом символы первой строки файла должны циклически сдвигаться на 1, второй строки — на...

Зашифровать файл шифром цезаря
Зашифруйте данный текстовый файл шифром Цезаря, при этом символы первой строки файла должны циклически сдвигаться на 1, второй строки — на...

4
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
16.11.2019, 18:08
NewPy25,переведите ошибку и вам станет намного понятней проблема. нельзя сложить число и функцию. а почему так получается да потому что функция называется key
Python
1
x_text_cipher += low_abc [ind+key]
понятно что вы хотите сложить индекс и число из функции но для этого функцию нужно вызывать
Python
1
x_text_cipher += low_abc [ind+key()]
дальше в самой функции бесконечный цикл
Python
1
2
3
4
5
 while True:
    print ( "Пожалуйста, введите ключ от 1 до 32 для шифрования сообщения: " % (max_key_size))
    key = int(input())
  if (key >= 1 and key <= MAX_KEY_SIZE):
    return key
проверять нужно в теле цикла. отступы решают все.
Python
1
2
3
4
5
 while True:
    print ( "Пожалуйста, введите ключ от 1 до 32 для шифрования сообщения: " % (max_key_size))
    key = int(input())
    if (key >= 1 and key <= MAX_KEY_SIZE):
        return key
откуда MAX_KEY_SIZE ? ну и наконец ключ смещения наверно должен быть получен один раз а не для каждой буквы то есть вне цикла. вообщем разбирайтесь исправляйте так лучше поймете. будут вопросы пишите помогут.
1
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 3
16.11.2019, 20:36  [ТС]
Большое спасибо за помощь, но никак не могу разобраться с этим условием ключ, уже решил по другому написать... но всеравно какой-то затык именно с этим условием...

File "<ipython-input-153-02b6285c920f>", line 19
else key:
^
SyntaxError: invalid syntax


Python
1
2
3
4
5
6
7
8
while key:
  if key<1 and key > 32:
    True
    print ("Некорректный ввод. Введите число от 1 до 32 чтобы зашифровать сообщение.")
    key=int(input())
  else key:
    key >=1 and key <=32
    False
Добавлено через 45 минут
Проверка ключа не срабатывает
Программа сыпится, если будет введены буквы
если строку выключить через #key=int(input()), то при вводе текста для шифрования - не приходит команда на ввод ключа

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
low_abc = [chr (i) for i in range(ord ("а"), ord('я')+1)]
low_abc.insert(6, "ё")
big_abc = [chr (i) for i in range(ord ("А"), ord('Я')+1)]
big_abc.insert(6, "Ё")
 
print ("Пожалуйста, введите текст для шифрования сообщения: ")
x_text=input ()
 
print ("Пожалуйста, введите ключ от 1 до 32 для шифрования сообщения: ")
 
key=int(input())
while key:
  try:
    key = key >= 1 and key <=32
  except:
    key=key<1 and key>32
    print("Некорректный ввод, введите ключ от 1 до 32")
    key = input("Введите ключ: ")
  else:
    type(key) != int
    print ("Некорректный ввод, введите цифровое значение")
 
 
      
x_text_cipher = ("")
 
for x_message in x_text:
  if x_message in low_abc:
    ind = low_abc.index(x_message)
    x_text_cipher += low_abc [ind+key]
  elif x_message in big_abc:
    ind = big_abc.index(x_message)
    x_text_cipher += big_abc [ind+key]
  else:
    x_text_cipher += x_message
print ("Ваше зашифрованное сообщение: ", x_text_cipher)
 
print ("Хотите расшифровать зашифрованное сообщение?")
answer= input ("Ответ (Да/Нет): ")
if answer == ("Да"):
  print("Зашифрованное сообщение расшифровано:", x_text)
elif answer == ("Нет"):
  print ("Сообщение не будет расшифровано!")
else:
   print ("Введите другую команду")
0
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
17.11.2019, 08:10
Цитата Сообщение от NewPy25 Посмотреть сообщение
Программа сыпится, если будет введены буквы
потому что вы заранее требуете ввести числа
Python
1
2
3
4
5
6
7
8
9
10
11
>>> key=int(input())
123
>>> key
123
>>> key=int(input())
fxgbf
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    key=int(input())
ValueError: invalid literal for int() with base 10: 'fxgbf'
>>>
ну и дальше если ввести число у вас программа уйдет в бесконечный цикл и то в цикле вы теперь в ключ хотите строку key = input("Введите ключ: ")


Python
1
2
3
4
5
6
7
8
9
10
11
print ("Пожалуйста, введите ключ от 1 до 32 для шифрования сообщения: ")
 
while True:
    try:
        key=int(input("Введите ключ: "))
        if 0 < key <= 32 :
            break
        else:
            print ("Некорректный ввод, введите ключ от 1 до 32")
    except:
        print ("Некорректный ввод, введите цифровое значение")
0
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 3
17.11.2019, 14:03  [ТС]
Semen-Semenich большое спасибо за помощь! Буду подтягивать свои знания с циклами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2019, 14:03
Помогаю со студенческими работами здесь

Зашифровать сообщение шифром Цезаря(езЦяар)
Напишите программу, которая шифрует входной текст шифром езЦяар: *алфавит - строчные буквы русского алфавита без ё *ключ состоит из...

Кодирование/декодирование данных шифром Цезаря
Здравствуйте! Помогите, пожалуйста, с решением одной любой из следующих задач! Программирование у меня не профилирующий предмет, и я в нём...

Составить шифратор(расшифратор) с шифром Цезаря
Смысл в этом шифре таков.Например у нас есть слово &quot;снег&quot;,если мы его зашифруем,то получим &quot;тоёд&quot;.В этом шифре каждая буква слова...

Расшифровать сообщение, закодированное шифром Цезаря с неизвестным сдвигом
Необходимо расшифровать сообщение, закодированное шифром Цезаря с неизвестным сдвигом: &quot;ХШЖНПУТ ФКХКОЙКТ&quot;. Всё что я...

Чат бот вк с шифром цезаря
Нужно написать чат бота для вк, чтобы он шифровал и дешифровал отправленные ему сообщения на шифре Цезаря. Шифр Цезаря есть свой


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru