2024-04-18 03:57:58 发布
网友
我正在写一个加密程序,它可以进行列换位。 一个人以字符串的形式输入一个键,例如,key='ZEBRAS' 我需要确定每个字母对应的数字索引,按字母升序排列。 例如
A是最高的,所以它排名第一。z是最低的,所以它的等级是6。 我想将这个值存储到一个适当的数据结构中,所以当我去加密一条消息时,我会首先读取对应于位置1的列,最后读取对应于位置6的列。你知道吗
从已排序的唯一字母组创建字典,索引从1到字符串长度(您需要unicity,如果一个字母出现了多次,则会生成多个索引(如下所示,我在单词中添加了一个S):
s="ZEBRASS" us=set(s) sl=dict(zip(sorted(us),range(1,len(us)+1))) print(sl)
sl包含:
sl
{'Z': 6, 'A': 1, 'E': 3, 'R': 4, 'S': 5, 'B': 2}
要“加密”,请将字典应用于字符串:
sc = [sl[c] for c in s] print(sc)
结果:
[6, 3, 2, 4, 1, 5, 5]
创建一个临时列表来存储排序后的单词,并从临时列表中提取位置。下面是示例代码:
>>> word = 'ZEBRAS' >>> sorted_word = sorted(word) >>> sorted_word ['A', 'B', 'E', 'R', 'S', 'Z'] >>> index_string = [sorted_word.index(a)+1 for a in word] >>> index_string [6, 3, 2, 4, 1, 5]
谢谢你的意见书。我正在寻找多个重复的字母作为一个不同的分数计算。所以“斑马”会变成zebrasab picture
我所做的是使用键中的纯文本创建一个类,以查找字符串中字母的索引,以及字母的字母权重。然后我按初始重量和位置对它进行排序,然后调整最后的重量,使其在字符串的后面位置更重。你知道吗
import alpha class KeyChar(object): def __init__(self,l,pos,w): self.letter = l self.position = pos self.weight = w def setWeight(self,w): self.weight = w def getRawKeyList(key): key_list = [] key_weight_normalized = dict() i = 0 for c in key: weight = alpha.giveAlphabet('u')[c] char = KeyChar(c,i,weight) i=i+1 key_list.append(char) return key_list def adjustKeyWeights(key_obj_list): #first sort based off weight kchar_sorted = sorted(key_obj_list, key = lambda kchar: (kchar.weight,kchar.position)) i=0 for k in kchar_sorted: #print k.letter, k.position, k.setWeight(i) #readjust weights based on weight #print k.weight i=i+1 return kchar_sorted # return weighted key sorted by letter weight (smallest letter first) def getWeightedKeyList(key): k_adjusted = adjustKeyWeights(getRawKeyList(key)) final_key = sorted(k_adjusted, key = lambda kchar: kchar.weight) key_list = getKeyAsList(final_key) return final_key,key_list def main(): key = 'ZEBRASAB' key_obj_list,key_list = getWeightedKeyList(key.upper()) #DEBUGGING / TESTING for k in key_obj_list: print k.letter, k.position, k.weight main()
从已排序的唯一字母组创建字典,索引从1到字符串长度(您需要unicity,如果一个字母出现了多次,则会生成多个索引(如下所示,我在单词中添加了一个S):
sl
包含:要“加密”,请将字典应用于字符串:
结果:
创建一个临时列表来存储排序后的单词,并从临时列表中提取位置。下面是示例代码:
谢谢你的意见书。我正在寻找多个重复的字母作为一个不同的分数计算。所以“斑马”会变成zebrasab picture
我所做的是使用键中的纯文本创建一个类,以查找字符串中字母的索引,以及字母的字母权重。然后我按初始重量和位置对它进行排序,然后调整最后的重量,使其在字符串的后面位置更重。你知道吗
相关问题 更多 >
编程相关推荐