我是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))
我以为我可以用套装来做,但是当我打印它们时,字符会以某种方式重新排列 我确信有一种简单的方法可以实现我之后的目标!
答案 0 :(得分:0)
set
是definition无序的。
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 comprehensions或generator 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))