Corso di introduzione al Python


Terzo incontro

Primi esempi di programmi in Python
  1. palla
  2. rifrazione
  3. fattoriale





""" Simulazione dei rimbalzi di una palla dentro una stanza
    Calcolo ricorrente per calcolare la posizione e la velocita'
   
    Ad ogni rimbalzo, la palla perde il 5 % della velocita' """

from graphics import *
from graftarta2 import Graf


   

def perimetro(fin):
    Line(Point(-300,-150), Point(300,-150)).draw(fin)
    Line(Point(300,-150), Point(300,150)).draw(fin)
    Line(Point(300,+150), Point(-300,150)).draw(fin)
    Line(Point(-300,150), Point(-300,-150)).draw(fin)

def vai(vx,vy,fin):
    x = 0.0 # m
    y = 0.0 # m
    m=0.02 #massa kg
    dt = 0.05 # s
    t = 0 # s
    n=0
    #fin.pennasu()
    while t<50:
                    vy=vy-9.8*dt #velocita' m/s
                    x=x+vx*dt
                    y=y+vy*dt
                    fin.asPos(x,y)
                    if y<-150:
                       y=-149
                       vy=-vy*0.95
                    if y>150:
                       y=149
                       vy=-vy*0.95
                    if x<-300:
                       x=-299
                       vx=-vx*0.95
                    if x>300: 
                       x=299
                       vx=-vx*0.95
                    n=n+1   
                    t = t+dt


fin=Graf("tarta che rimbalza",500,400)
fin.coordinate(-350,-200,350,200)
fin.nascondi_tarta()
fin.mostra_palla(5)
perimetro(fin)
fin.getMouse()
vai(80,50,fin)




""" rifrazione dall'aria al vetro con grafico """

from graftarta2 import Graf
from graphics import *
import math

t=Graf("Rifrazione", 500, 300)
t.coordinate(-250,-160,250,160)



def prepara():
    """ linea di separazione di due mezzi e normale """
    t.avanti(200)
    t.avanti(-400)
    t.avanti(200)
    t.destra(-90)
    t.avanti(200)
    t.avanti(-400)
    t.avanti(200)
    t.destra(90)
    Testo=Text(Point(10,120),'aria')
    Testo.draw(t)
    Testo1=Text(Point(10,-120),'acqua')
    Testo1.draw(t)
   
def rifra():
    """ chiede l'angolo di incidenza e calcola l'angolo di rifrazione;
        ripete la richiesta finche' non si scrive f """
    prepara()
    n=1.50
    q='w'
    while q<>'f':
        i=input('scrivi un angolo ')
        print 'angolo di incidenza ',i
        r=math.asin(math.sin(i*math.pi/180)/n)*180/math.pi
        print 'angolo di rifrazione ',r
        t.destra(-i)
        t.avanti(200)
        t.avanti(-200)
        t.destra(90+i)
        t.destra(90-r)
        t.avanti(200)
        t.avanti(-200)
        t.destra(-180+r)
        q=raw_input('premi un tasto (f fine) invio  ')
    t.close()
rifra()




""" Abelson e Di Sessa pag. 41 provare gli angoli 144, 45, 105, 125"""
from graftarta2 import Graf
fin=Graf('poligoni',500,450)
fin.coordinate(-500,-450,500,450)


def poli(lato, angolo, fin):
    fin.avanti(lato)
    fin.destra(angolo)
    somma = angolo
    while somma % 360 != 0:
        fin.avanti(lato)
        fin.destra(angolo)
        somma = somma+angolo

def poli2(lato, angolo, fin):
    fin.avanti(lato)
    fin.destra(angolo)
    fin.avanti(lato)
    fin.destra(2*angolo)   
    somma = 3*angolo
    while somma % 360 != 0:
        fin.avanti(lato)
        fin.destra(angolo)
        fin.avanti(lato)
        fin.destra(2*angolo)
        somma = somma+3*angolo

def  triang_incastro(lato):
    if lato>15:
        for i in range(3):
            #triang_incastro(lato/2)
            gr.avanti(lato)
            #triang_incastro(lato/2)
            gr.destra(120)
            triang_incastro(lato/2)









def fattoriale(n):
    if n==0:
        return 1
    else:
        return n*fattoriale(n-1)



Lavori di gruppo
 n su k =  n!/(k!*(n-k)!)