I'm trying to make a program which prints all the pairs of amicable numbers in a given range (not including by reversing the pair that have already been printed, like if 220, 284 have been printed, 284, 220 cannot be printed). Here's my code below:
def factorgiver(number):
    num=1
    factors=[]
    while num<number:
        if number%num==0:
            factors.append(num)
            num+=1
        else:
            num+=1
    return(factors)
def isamicable(number1, number2):
    q1=factorgiver(number1)
    q2=factorgiver(number2)
    w1=0
    w2=0
    for i in q1:
        w1+=i
    for i in q2:
        w2+=i
    print(w1, w2)
    if w1==number2 and w2==number1:
        return True
    else:
        return False
range1=int(input("Enter the first number of the range: "))
range2=int(input("Enter the last number of the range: "))
range2+=1
for i in range(range1, range2):
    w=i+1
    for q in range(w, range2):
        if isamicable(i, q):
            print(i, q)
I've checked both functions and they are working as intended, but when I run the code, it also includes the numbers lower than my given range and does also gives different output every time.
 
    