Пожалуйста, помогите мне отладить эту программу Python, с ошибкой итерации списка - PullRequest
0 голосов
/ 13 июня 2018

Вопрос:

  • Чтобы найти процент совпадения двух предложений.
  • Если 100%, выведите «Exact Match!»
  • Игнорируйте разницу в 1 символ между любыми 2 проверяемыми словами.(Поле погрешности 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 голосов
/ 13 июня 2018

Согласно вашей трассировке, ошибка в строке:

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

Метод str.split() возвращает список, поэтому это не словарь, который бы предоставилiteritems функция.Однако вы можете просто перебирать два списка одновременно с помощью функции zip.Измените эту строку на:

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

В противном случае, без использования этой функции zip для объединения элементов двух списков, Python будет интерпретировать это как итерацию по двум элементам, которые оказалисьдва списка, получая их для использования в цикле for (на самом деле это приведет к ошибке, если сами списки не содержат ровно два элемента, поскольку они будут распакованы в x и y), что не то, что вам нужно.

0 голосов
/ 13 июня 2018

попробуй

for x,y in zip(splitted1,splitted2)

...