pippo = 5
print (pippo)
#pippo = "Ciao"
#print (pippo)

# creare una lista pluto di interi contenente solo il 5
pluto = [5]
print (pluto)

pippo_2 = pippo
pippo_2 = 7
print ("pippo = " + str(pippo) + " pippo_2 = " + str(pippo_2))

pluto_2 = pluto
pluto_2 = [7]
pluto_2[0] = 7
print ("pluto = " + str(pluto) + " pluto_2 = " + str(pluto_2))

class Punto :
    def __init__ (self):
        self.x = 0
        self.y = 0

# scrivere una funzione che dato un punto p restituisce la sua
# descrizione come stringa nel formato (x; y)
def stampaPunto(p):
    return "(" + str(p.x) + "; " + str(p.y) + ")"

p=Punto()
print (p)
print (stampaPunto(p))
#modificare p in modo che sia (2; -3)
p.x = 2
p.y = -3
print (stampaPunto(p))

# definire una class Retta y = mx + q

class Retta :
    def __init__ (self):
        self.m = 0
        self.q = 0

# scrivere una funzione che data una retta r restituisce la sua
# descrizione come stringa nel formato y = m * x + q
def stampaRetta(r):
    return "y = " + str(r.m) + " * x + " + str (r.q)

# scrivere una funzione  che dati una retta r e un punto p
# restituisce True se p appartiene a r,
# False altrimenti

def appartiene (p, r):
    return p.y == r.m * p.x + r.q


# scrivere una funzione che date una lista l di punti 
# e una retta r, restituisce il numero di punti in l
# appartenenti alla retta r 
# (si sfrutti la funzione "appartiene")

def conta_appartenenti(l, r) :
    # primo modo: scorro direttamente gli elementi della lista
    conto = 0
    for punto in l:
        if appartiene(punto, r):
            conto +=1
    #secondo modo: scorro gli indice della lista
    conto = 0
    for i in range (0,len(l)) :
        if appartiene(l[i], r) :
            conto += 1
    return conto

# scrivere una funzione che 
# - crea una lista di punti lista_punti
# - inserisce in lista_punti (con un ciclo) i punti (i;i) 
#   per i che va da 0 a 9
# - inserisce in lista_punti il punto (3; -4)
# - crea la retta bisettrice y = x 
#   (bisettrice del I e III quadrante)
# - chiama conta_appartenenti sui parametri lista_punti 
#   e bisettrice e ne stampa il risultato
def test_conta_appartenenti ():
    lista_punti = list()
    for i in range(0,10):
        punto = Punto()
        punto.x = i
        punto.y = i
        lista_punti.append (punto)
    punto = Punto()
    punto.x = 3
    punto.y = -4
    lista_punti.append (punto)
    bisettrice = Retta()
    bisettrice.m = 1
    bisettrice.q = 0
    print (conta_appartenenti(lista_punti, bisettrice))

test_conta_appartenenti()