Строка -> ASCII + 1 -> Битовая строка - PullRequest
0 голосов
/ 28 февраля 2020

Проект: добавьте 1 к цифре каждого символа c ASCII-значение. Преобразуйте его в битовую строку. Сдвиньте биты этой строки на одно место влево. Символ пробела в зашифрованной строке разделяет результирующие битовые строки.

Пример ввода и вывода программы показан ниже:

Введите сообщение: Hello world!

0010011 1001101 1011011 1011011 1100001 000011 1110001 1100001 1100111 1011011 1001011 000101

# Put your code here
string = input("Enter message: ")

#Convert string from ASCII to Decimal
A_string = [ord(c) for c in string]
print(A_string)

# add 1 to ASCII value 
B_string = A_string
for i in range(len(B_string)):
    B_string[i] = B_string[i] + 1 
print(B_string)


#Decimal to Binary
decimal = B_string
remainder = decimal
Binary_string = decimal

for i in range(len(decimal)):
    remainder[i] = int(decimal[i])
    remainder[i] %= 2
    decimal[i] = decimal[i] // 2
    Binary_string[i] = str(remainder[i] + Binary_string[i])
print(Binary_string)


#Shift Left
length = len(Binary_string)-1
start = 1
shiftLeft = ''
while length !=0:
    shiftLeft = shiftLeft + Binary_string[start] + " "
    length -= 1
    start += 1
shiftLeft += Binary_string[0]
print(shiftLeft)


Мои результаты: Введите сообщение: Hello world!

[72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33, 92]
[73, 102, 109, 109, 112, 33, 120, 112, 115, 109, 101, 34, 93]
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
0 0 0 0 0 0 0 0 0 0 0 0 0

**** Самая большая цель - это старая школа, т.е. НЕ использует встроенные функции и использует циклы

1 Ответ

0 голосов
/ 28 февраля 2020

В следующем примере кода входная строка преобразуется в список значений ASCII, которые сдвигаются путем добавления к ним одного. Затем это значение преобразуется обратно в строку и помещается в список с именем shiftedChars. Наконец, эти строки преобразуются в двоичные.

inputString = input("Enter the input string: ")
asciiValues = []
shiftedChars = []
results = []

# loop through each character in the input string
for character in inputString:
    value = ord(character) + 1                           #convert to ascii and shift by 1
    asciiValues.append(value)                            #add to list of ascii values

# loop through each value in the list
for asciiValue in asciiValues:
    shiftedChars.append(chr(asciiValue))                 #convert back to string and store in another list

# loop through each character in the shiftedChar list
for shiftedChar in shiftedChars:
    res = "".join(f"{ord(shiftedChar):08b}")             #convert to binary
    results.append(res)                                  #store result

#print results
for result in results:
    print(result, end=" ")  

Время выполнения:

Enter the input string: Hello world

Вывод:

01001001 01100110 01101101 01101101 01110000 00100001 01111000 01110000 01110011 01101101 01100101

Какие сдвинутые символы Ifmmp!xpsme в двоичная последовательность.

Редактировать: ----

Некоторое дополнительное объяснение для преобразования в двоичный файл из строки. Хотя это может выглядеть крайне запутанным синтаксисом, надеюсь, это поможет прояснить ситуацию.

String -> Ascii    - use ord()
Ascii - > Char     - use chr()
Char -> Binary     - convert char using ord() to ascii then format into binary

Так что для этого последнего метода преобразования из char в двоичный нам нужно сначала иметь значение ascii цифри c и мы будем использовать .format для преобразования.

Теперь, глядя на res = "".join(f"{ord(shiftedChar):08b}"), мы можем разбить его на более мелкие части и обнаружить, что некоторый код может не понадобиться.

Давайте посмотрим на меньшем примере:

print(ord("a"))                         #ord("a")= 97 | using for the shiftedChar
print(format(97, '08b'))                #01100001
emptyString = ""
print(emptyString.join(f"{97:08b}"))    #01100001

Как видите, метод format принимает второй аргумент помимо значения ascii. Это используется, чтобы указать, как форматировать конечный результат. Существуют различные формы двоичных файлов, например, без начальных 0 или последовательностей, начинающихся с 0b. Использование .join для пустой строки, по-видимому, в основном для сохранения ее в виде строки. Надеюсь, это объясняет, что происходит.

...