AttributeError: 'tuple' object has no attribute 'split'

AttributeError: 'tuple' object has no attribute 'split'

我正在尝试编写一些 Python 来获取密码并将其拆分为字母及其在密码中的频率。我遇到的问题是我可以获得代码来打印密码中字母的频率,但我试图单独获取它们,这样我就可以将它们转换为百分比,以便将它们与 a 中的常见值进行比较书,例如。例如。我可以将我的密码中 E 的计数与英语中 12.7% 的平均值进行比较。我遇到的问题是,当我尝试拆分字母列表及其频率时,我得到了 AttributeError:'tuple' 对象没有属性 'split'。不确定我能做什么所以一些帮助将不胜感激。这是我的代码: 导入集合 导入字符串

def freq():
    info = input("File Name")
    filehandle = open(info, "r")
    data = filehandle.read().upper()
    char_counter = collections.Counter(data)
    for char, count in char_counter.most_common():
        if char in string.ascii_uppercase:
            print(char, count)
            s = (char, count)
            frequency = s.split(",")
            for freq in frequency:
                print(freq)

freq()

这是shell

的直接复制
File Nametest.rtf
E 59
Traceback (most recent call last):
  File "/Users/x/Desktop/Frequency.py", line 17, in <module>
    freq()
  File "/Users/x/Desktop/Frequency.py", line 13, in freq
    frequency = s.split(",")
 AttributeError: 'tuple' object has no attribute 'split'

这是它之前所做的:

File Nametest.rtf
E 59
A 43
T 39
R 37
O 29
F 25
P 25
S 23
L 23
I 22
N 19
D 18
B 17
C 15
H 14
M 12
G 9 
U 8
W 8
V 6
Y 4
X 3
K 3

如果可能的话,我正在寻找 E 12% A 10% 等或类似的东西。

如有任何帮助,我们将不胜感激。非常感谢:)

您正在创建一个元组,元组没有拆分,因为逗号不是元组的实际部分,它是分隔代码中不同条目的一种方式。拆分仅适用于某些类型,即字符串,并且仅当逗号是 string/type 实例的一部分时才有效。

我不确定你打算从那部分代码中得到什么,但你告诉它创建一个元组 (char, count),然后在逗号处拆分该元组(不可能,即使它确实发生了,你会有一个数组 [char, count]) 然后对于那个拆分元组中的每个值,打印值,这将打印 char, count.

也许重新检查一下您处理此问题的方式,您不会从该拆分中获得任何您尚未在先前打印语句中显示的有用信息。如果你的意图只是字母和频率,那么你已经完成了,如果你想获得比例,将所有频率相加,然后使用每个单独的频率来获得它所代表的总数的比例?

您应该更改您的代码:

def freq():
    info = input("File Name")
    filehandle = open(info, "r")
    data = filehandle.read().upper()
    char_counter = collections.Counter(data)
    for char, count in char_counter.most_common():
        if char in string.ascii_uppercase:
            print(char, count)
            frequency = (char + str(count))
            for freq in frequency:
                print(freq)

固定行数:

    s = (char, count)
    frequency = s.split(",")

根据如此微小的信息很难判断这些行的确切功能是什么,但解决方案应该是这样的。