def step(x):
    if x >= 0:
        return 1
    return 0

# Training data (AND Gate)
X = [(0,0), (0,1), (1,0), (1,1)]
T = [0,0,0,1]

# Initial weights and bias
w1 = 0
w2 = 0
b = 0

# Learning rate
lr = 0.1

# Number of epochs
epochs = int(input("Enter number of epochs: "))

for epoch in range(epochs):
    print("\nEpoch", epoch + 1)

    for i in range(len(X)):
        x1, x2 = X[i]

        net = x1*w1 + x2*w2 + b
        y = step(net)

        error = T[i] - y

        w1 = w1 + lr * error * x1
        w2 = w2 + lr * error * x2
        b = b + lr * error

        print("Input:", X[i],
              "Target:", T[i],
              "Output:", y,
              "Error:", error)

    print("w1 =", w1)
    print("w2 =", w2)
    print("bias =", b)

print("\nFinal Weights")
print("w1 =", w1)
print("w2 =", w2)
print("bias =", b)