请帮我调试这个python程序,列表迭代错误

时间:2018-06-13 04:18:41

标签: python debugging runtime-error

问题:

  • 找到匹配的2个句子的百分比。
  • 如果是100%,请打印“完全匹配!”
  • 忽略正在检查的任何2个字之间的1个字符的差异。 (1个字符的误差范围)

计划:

from difflib import SequenceMatcher

 def difWord(s1, s2):

        m = len(s1)
        n = len(s2)

        if abs(m - n) > 1:
            return false

        count = 0
        correct = 0

        i = 0
        j = 0
        while i < m and j < n:

            if s1[i] != s2[j]:
                count+=1

        if count==1:
            return true




    def seqMatch(a,b):

        rat = SequenceMatcher(None,a,b).ratio()

        if rat==1 :
            print("Exact Match!")
        else :
            print(rat*100)



        splitted1 = a.split()
        splitted2 = b.split()

        c=0
        for x,y in splitted1.iteritems(),splitted2.iteritems() :

            if difWord(x,y) :
                c+=1;

        per = (count*100)/4
        print(per)



    if __name__ == "__main__":

        a = "He is a boy"
        b = "She is a girl"
        c = "He is a boy"

        seqMatch(a,b)

错误:

Traceback (most recent call last):

  File "C:\Users\eidmash\Documents\Demo-Project\Day0.py", line 59, in <module>
    seqMatch(a,c)

  File "C:\Users\eidmash\Documents\Demo-Project\Day0.py", line 43, in seqMatch
    for x,y in splitted1.iteritems(),splitted2.iteritems() :

AttributeError:'list'对象没有属性'iteritems'

2 个答案:

答案 0 :(得分:1)

尝试

for x,y in zip(splitted1,splitted2)

答案 1 :(得分:1)

根据你的追溯,错误在行:

    for x,y in splitted1.iteritems(),splitted2.iteritems():

方法str.split()返回一个列表,因此它不是一个提供iteritems函数的字典。但是,您可以在zip函数的帮助下一次遍历两个列表。将该行修改为:

    for x, y in zip(splitted1, splitted2):

否则,如果不使用zip函数将两个列表的项捆绑在一起,Python会将其解释为迭代两个恰好是两个列表的项,从而产生它们用于for循环(如果列表本身没有正好两个项目,实际上会导致错误,因为它们将被解压缩到xy),这不是你想要的。