字符串>ASCII+1>位字符串

2024-04-20 14:10:25 发布

您现在位置:Python中文网/ 问答频道 /正文

项目: 向每个字符的数字ASCII值添加1。 将其转换为位字符串。 将此字符串的位向左移动一个位置。 加密字符串中的单个空格字符分隔生成的位字符串

程序输入和输出示例如下所示:

输入一条消息:你好,世界

0010011001101011011011011100001 0000111110001 1100001 1100111 1011011011 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)


我的结果: 输入消息:你好,世界

[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

****最大的目标是遵循这一传统,即不使用内置函数,而是使用循环


Tags: to字符串inforstringlenascii字符
1条回答
网友
1楼 · 发布于 2024-04-20 14:10:25

在下面的代码示例中,输入字符串被转换为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

因此,对于最后一种将字符转换为二进制的方法,我们需要首先获得ascii数值,然后使用.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似乎主要是为了将其保持为字符串。希望这能解释发生了什么

相关问题 更多 >