Hadok en Ответов: 3

Как мне...установить алфавит в моей программе


Привет , мне нужна помощь для больших струн.Вывод неверен. Это должно быть в алфавите.

Что я уже пробовал:

s = input("enter a string here: ")
shift = int(input("enter a value here: "))
n = len(s)
output = []
i = 0
output = [(chr(ord(s[i])+(i+1)+shift)) for i in range(n)]
print(output)

Richard MacCutchan

- Вывод неверен."
Как это выглядит и почему это не правильно?

Patrice T

Показать пример ввода с фактическим и ожидаемым выходом !

3 Ответов

Рейтинг:
2

CPallini

Цитата:
для больших струн.Вывод неверен
Конечно, это не так. Вы добавляете индекс i к коду символа для того, чтобы получить новый код символа, но i, для больших струн-это, ну..., большой.
Итак, если вам действительно нужно добавить i вы должны "вернуть" код символа в допустимый диапазон (например, 'a',..,'z'). Вам нужен оператор по модулю % для такой работы.


Рейтинг:
1

OriginalGriff

Карло прав, но его предположение не идет достаточно далеко.
Если вам нужно, чтобы строка была "в алфавите" - под которым вы подразумеваете, что результат должен содержать только буквенные символы от А до Я, от А до Я, пробел и некоторую пунктуацию, то вам нужно быть гораздо более умным, чем ваш существующий код.

Наборы символов не содержат только буквенные символы - самый маленький набор символов имеет ширину семь бит и содержит 128 символов (базовый ASCII), более нормальное использование-расширенный ASCII с восемью битами для 256 символов, и большинство систем в наши дни используют Unicode, который может содержать от 8 до 32 бит на символ для поистине монументального количества потенциальных символов!

Если вы хотите ограничить ввод и вывод определенным подмножеством любого доступного набора символов, то вам нужно создать массив, содержащий каждый допустимый символ a, b, c, d, ... z, A, B, C,...+, -,?, пробел, 1, 2, 3, ... 0, !, ", ', ... и так далее.
Затем найдите каждый символ на входе в этот массив, получите его индекс и измените его, добавив значения loop guard и shift. Затем используйте оператор модуля"%", чтобы вернуть диапазон значений обратно в область массива и извлечь оттуда выходной символ.

Это звучит сложно, но на самом деле это не так: попробуйте это на бумаге, и вы поймете, что я имею в виду!
Дай ему попробовать ... это действительно довольно легко, как только вы поймете это.


Рейтинг:
1

Hadok en

def encrypt(cäsar):
    shiftValue=int(input("enter a shift value"))
    string=len(cäsar)
    for i in cäsar: 
        if i.isupper():  
            print(chr((ord(i)+(i+1)+shiftValue-65)%26+65),end="") 
        else:
            print(chr((ord(i)+(i+1)+shiftValue-97)%26+97),end="") 
            
enter=input("enter a string ")
encrypt(enter)
TypeError: can only concatenate str (not "int") to str



Я все время получаю эту ошибку. Нужно ли мне конвертировать 65 и 97 в строки?


Richard Deeming

Это не "решение" вашего вопроса.