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

#creare una lista di interi contenente solo l'intero 5 e di nome pluto
pluto = [5]
print (pluto)

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

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

pluto_3 = list()

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

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

#scrivere una funzione che prende un punto e restituisce la stringa (x; y)
def stampa_punto (p) :
    return "(" + str(p.x) + "; " + str(p.y) + ")" 

#scrivere una funzione che prende una retta e restituisce la stringa y = mx + q
def stampa_retta (r) :
    return "y = " + str(r.m) + "*x +" + str (r.q)

# scrivere una funzione che prende un punto e una retta e restituisce True 
# se il punto appartiene alla retta, False altrimenti
def appartiene (p, r):
    #if p.y == r.m * p.x + r.q :
    #    return True
    #else :
    #   return False
    return p.y == r.m * p.x + r.q

# scrivere una funzione che presa una lista di punti e una retta, 
# restituisce il numero di punti della lista appartenenti alla retta
def conta_appartenenti (lista, r) :
    # primo modo: scorro direttamente gli elementi della lista
    conto = 0
    for punto in lista:
        if appartiene(punto, r):
            conto +=1
    #secondo modo: scorro gli indice della lista
    conto = 0
    for i in range (0,len(lista)) :
        if appartiene(lista[i], r) :
            conto += 1
    return conto

# scrivere una funzione che fa il test della funzione conta_appartenenti
# creando una lista che contiene i punti (i; i) per i che va da 0 a 9 
# con infine il punto (2; 5)
# e una retta y = mx (la bisettrice del I e III quadrante) e stampando
# il numero di punti della lista che appartengono alla bisettrice
def test_conta_appartenenti():
    # lista = []
    lista = list()
    for i in range (0,10) :
        p = Punto()
        p.x = i
        p.y = i
        lista.append (p)
    p = Punto()
    p.x = 2
    p.y = 5
    lista.append (p)
    print (len(lista))
    bisettrice = Retta()
    bisettrice.m=1
    bisettrice.q=0
    print (conta_appartenenti(lista,bisettrice))
    

p1 = Punto()
print (stampa_punto(p1))
p1.x = 1
p1.y = 2
print (stampa_punto(p1))
#p1 = None
#print(stampa_punto(p1))

r1 = Retta() # y = x
r1.m = 1

r2 = Retta() # y = x + 1
r2.m = 1
r2.q = 1

print (appartiene(p1,r1))
print (appartiene(p1,r2))

test_conta_appartenenti()

