我做了一个频率分析程序。它为某个字符串返回这个排序的元组:
frequency = [('Z', 110), ('D', 81), ('O', 78), ('V', 69), ('I', 69), ('J', 64), ('C', 58), ('N', 56), ('M', 54), ('Y', 35), ('G', 30), ('P', 27), ('B', 24), ('H', 23), ('X', 23), ('R', 19), ('T', 16), ('W', 15), ('A', 12), ('K', 12), ('F', 8), ('Q', 8), ('E', 2), ('S', 1)]
所以我想打印密文和它的频率。此外,我有一个按英文字母频率排序的字母表(ordered_alphabet = "ETAOINSRHLDCUMFPGWYBVKXJQZ"
)我想将这些字母中的每一个放在我的密码字母和频率旁边,以帮助我找出密码信可以。
我也是这样的:
for item in frequency:
print("%s : %s \t \t %s" % (item[0], item[1], ordered_alphabet[frequency.index(item)]))
返回:
Z : 110 E
D : 81 T
O : 78 A
V : 69 O
I : 69 I
J : 64 N
C : 58 S
N : 56 R
M : 54 H
Y : 35 L
G : 30 D
P : 27 C
B : 24 U
H : 23 M
X : 23 F
R : 19 P
T : 16 G
W : 15 W
A : 12 Y
K : 12 B
F : 8 V
Q : 8 K
E : 2 X
S : 1 J
为什么第一个 ordered_letter(E
) 与其他有序字母不一致?我对所有字母都使用了 \t
。
最佳答案
制表不保证对齐,制表符宽度取决于编辑器/终端设置。您可以尝试使用 str.format
来固定最大字段大小并放弃使用制表。仅使用空格进行确定性格式化。
例如(我将 3 硬编码为大小,但您可能希望预先计算最大大小):
print("{} : {:3} {}" .format (item[0], item[1], ordered_alphabet[frequency.index(item)]))
没有硬编码和最大尺寸计算:
maxdigit = len(str(max(x[1] for x in frequency)))
for item in frequency:
print("{} : {:{}} {}" .format (item[0], item[1], maxdigit, ordered_alphabet[frequency.index(item)]))
让我明白
Z : 110 E
D : 81 T
O : 78 A
V : 69 O
I : 69 I
J : 64 N
C : 58 S
N : 56 R
M : 54 H
Y : 35 L
G : 30 D
P : 27 C
B : 24 U
H : 23 M
X : 23 F
R : 19 P
T : 16 G
W : 15 W
A : 12 Y
K : 12 B
F : 8 V
Q : 8 K
E : 2 X
S : 1 J
关于python - 为什么第一个制表符 (\t) 与其他制表符不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47023601/