#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, но я не знаю о вашей формуле