将字符串之间的字符与ASCII表位置进行比较

时间:2015-08-02 10:37:35

标签: python string python-3.x character ascii

我是python的新手,并试图编写一个程序来比较字符串;特别是每个字符串中的顺序字符和这些字符的十进制ASCII值。

例如,我有字符串1' abcd1234'和字符串2' bcde2345'

在ASCII十进制中,这将是97,99,101,103,53,55,57,59 和97,98,99,100,49,50,51,52

我想找到序列中每个字符的十进制数的差异,并能够将这个小数差应用于一个新的字符串来移动它的字符。

到目前为止,我有以下内容:

str1 = 'abcd1234'
str2 = 'bcde2345'
str3 = '7:69h5i>'
tem = {55,58,54,57,104,53,105,62}  # just a test to see if I could use a set

print(str1)
for i in str1:
    print(ord(i))

print('\n')

print(str2)
for i in str2:
    print(ord(i))

print('\n')

print(str3)
for i in str3:
    print(ord(i))


print('\n')

i = 0

print(tem)
for i in tem:
    print(chr(i))

我以为我可以用套装来做,但是当我打印它们时,字符会以某种方式重新排列 我确信有一种简单的方法可以实现我之后的目标!

2 个答案:

答案 0 :(得分:0)

setdefinition无序的。

  

set对象是不同的可哈希对象的无序集合

在Python中查看有关有序集的问题:Does Python have an ordered set?

至于转变:如果我正确理解你的问题,下面的代码应该或多或少地做你需要的:

str1 = 'abcd1234'
str2 = 'bcde2345'
str3 = '7:69h5i>'

assert len(str1) == len(str2) == len(str3)

str3 = list(str3)  # to be able to access the characters we need to turn the str into list

for idx in range(len(str1)):
    shift_val = ord(str2[idx]) - ord(str1[idx])  # get the diff
    print(shift_val)
    str3[idx] = chr(ord(str3[idx]) + shift_val)  # apply the diff 

print(''.join(str3))

答案 1 :(得分:0)

看起来您想对三个字符串执行简单映射,这通常使用list comprehensionsgenerator expressions(对于lazy evaluation)来完成。

如果我(@johnsyweb is)正确理解您的问题,我会尝试以下方式:

#!/usr/bin/env python3
str1 = 'abcd1234'
str2 = 'bcde2345'
str3 = '7:69h5i>'

ord1 = (ord(c) for c in str1)
ord2 = (ord(c) for c in str2)
ord3 = (ord(c) for c in str3)

diffs = (x - y for x,y in zip(ord1, ord2))

result = (chr(x + y) for x,y in zip(diffs, ord3))

print(''.join(result))

See it run!