Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Str对象没有属性引用_Python_Readfile_Insertion Sort - Fatal编程技术网

Python Str对象没有属性引用

Python Str对象没有属性引用,python,readfile,insertion-sort,Python,Readfile,Insertion Sort,我正在开发一个程序,该程序获取姓名列表并返回前20个姓名,而不考虑性别 我很难理解我做错了什么,因为我试图使用插入排序,但它不起作用 这是代码 class babyName(): __slots__ = ("name" , "gender" , "occurrences") def __init__(self, name, gender, occurrences): self.name = name

我正在开发一个程序,该程序获取姓名列表并返回前20个姓名,而不考虑性别

我很难理解我做错了什么,因为我试图使用插入排序,但它不起作用

这是代码

        class babyName():
            __slots__ = ("name" , "gender" , "occurrences")

            def __init__(self, name, gender, occurrences):
                self.name = name
                self.gender = gender
                self.occurrences = occurrences

            def __str__(self):
                return self.name + "," + self.gender + "," + self.occurrences

        def mkEntry(name, gender, occurrences):
            entry = babyName(name, gender, occurrences)

            return entry

        def readFile(year):
           lst = []
           lst2 = []
           topm = 20
           topf = 20
           yob = ("yob" + str(year) + ".txt")
           for line in open("names/" + yob ):     
               line = line.split(",")
               if line[1] == "F":
                   if topf > 0:
                       entry = mkEntry(line[0], line[1], line[2])
                       lst.append(entry)
                       topf -= 1
               elif line[1] == "M":
                   if topm > 0:
                       entry = mkEntry(line[0], line[1], line[2])
                       lst2.append(entry)
                       topm -= 1
            mergedlist = lst + lst2

            return mergedlist

        def insertion_sort(lst):
            for i in range(1, len(lst)):
                h = i - 1
                val = lst[i].occurrences
                val2 = lst[i-1].occurrences
                while (h >= 0) and (val2 > val):
                    lst[h+1] = lst[h]
                    h = h - 1
                lst[h+1] = val

       def main():
           year = input("Enter the year of birth:")
           file = readFile(year)
           insertion_sort(file)
           for x in file:
               print(x)

       main()
怎么了

lst[h+1] = val # val isn't a babyName instance
应该是

lst[h+1] = lst[i]

嗯。移动/插入的东西不应该有占位符吗

def insertion_sort(lst):
    for i in range(1, len(lst)):
        # placeholder for the item being moved
        tmp = lst[i]
        h = i - 1
        val = lst[i].occurrences
        val2 = lst[i-1].occurrences
        while (h >= 0) and (val2 > val):
            lst[h+1] = lst[h]
            h = h - 1
        lst[h+1] = tmp

您可能想看看本文中的伪代码。

太好了,使其实际运行,但现在它不断返回一个具有相同值的列表。。。。