Формула возвращает объект ‘int’, не подлежащий повторению

#python-3.x

#python-3.x

Вопрос:

Вот код, который выдает ошибку:

 from math import sqrt 

def normal(vector):
    sum = 0
    for i in vector:
        sum = sum   (i**2)
        norm = sqrt(sum)
    return round(norm, 4)

def innerproduct(vector_x, vector_y):
    sum = 0  
    for i in vector_x:
        for j in vector_y:
            sum = sum   (i*j)
            inner_product = sum
    return inner_product

def distance(vector_x, vector_y):
    distance = 0
    for i in vector_x:
        for j in vector_y:
            dist = normal(i)**2   normal(j)**2 - (2*(innerproduct(i,j)))
    return sqrt(dist)
  

первые две функции работают нормально, но третья возвращает TypeError: объект ‘int’ не подлежит повторению.

Комментарии:

1. Может быть, вы вызываете distance с int в аргументе, поэтому в цикле for возникает ошибка?

2. Вставьте полное сообщение об ошибке. И код, который вызывает третий метод.

3. Ошибка типа (последний вызов last) —-> 1 выведите(«расстояние (vector_x, vector_y):», distance(vector_x, vector_y)) в distance (vector_x, vector_y) 20 для i в vector_x: 21 для j в vector_y: —> 22 dist = int (нормальный(i) **2) int (нормальный(j)**2) — (2*( innerproduct(i,j))) 23 возвращает sqrt(dist) в нормальном (векторном) виде 3 определения нормального (векторного): 4 сумма = 0 —- > 5 для i в векторе: 6 sum = sum (i **2) 7 norm = sqrt(сумма) Ошибка типа: объект ‘int’ не может быть повторен

Ответ №1:

Ошибка, которую я получил, заключается в :

 Traceback (most recent call last):
  File "t.py", line 25, in <module>
    print(distance([1,2],[5,6]))
  File "t.py", line 22, in distance
    dist = normal(i)**2   normal(j)**2 - (2*(innerproduct(i,j)))
  File "t.py", line 5, in normal
    for i in vector:
TypeError: 'int' object is not iterable
  

Потому что в вашей функции normal вы выполняете цикл for для int ( vector ).

Комментарии:

1. Я попытался добавить в range (вектор), чтобы избежать этой ошибки, но это не сработало.

2. ваша векторная переменная является int, вы не можете выполнять итерации по ней, и вы также не можете использовать range для нее. В вашей функции distance , когда вы вызываете normal , вы вводите i в аргумент, это значение int из vector_x

3. итак, каково возможное решение?

4. Возможно, при вызове normal ставьте vector_x вместо i, но я не знаю о вашей формуле