Riassunto su Python:

  • Valori, tipi base: int, float, str     es. x = 10 o y = 12.4 o ciao = “Ciao”
  • Tipi derivati: liste (in realtà vettori).   x = [1, 23, 45, 94], y = “Ciao”
  • cicli while, e for
  • uso di continue e break
  • uso della funzione random del modulo random


[python]
#Esempio, genero 100 numeri tra 1 e 1000 a caso
from random import random
#random() genera un valore in [0,1) a caso
for i in range(100):
x = int(random()*1000+1) # se random() in [0,1), x in [1,1000]
print(x,end="") # end="" elimina il ‘\n’ (python 3)
if ((i+1) % 20 == 0):
print() # vado a capo ogni 20 righe
print()
print("0") # ultimo valore è zero.
[/python]
Salvando il programma sopra come ad esempio GeneraInteri.py, e eseguendolo dalla console con

> ipython GeneraInteri.py > listainteri.txt

si crea un file di testo “listainteri.txt” che contiene gli interi casuali generati.
A questo punto, scriviamo un programma che li legge e calcola, somma, minimo, massimo media e controlla se la distribuzione di questo ipotetico dado a 1000 facce è bilanciata. Cioè, se in ogni sottointervallo di larghezza $$K$$, appaiono effettivamente $$100 / K$$ valori.
[python]
somma = 0
media = 0
minimo = 10000
massimo = 0
contatore = 0
bins = [0]*10
finito = True
while True:
a = input() # leggo un intera riga
x = a.split() # separo le singole stringhe (numeri)
# x = [‘234′,’324’,…]
if int(x[0]) == 0:
break # se il primo elemento è zero, ho finito
for y in x:
a = int(y)
somma += a
contatore += 1
if minimo > a:
minimo = a
if massimo < a:
massimo = a
print("Letti %d numeri" % contatore)
print("massimo = ",massimo)
print("minimo = ",minimo)
print("somma = ", somma)
print("media = ", somma/contatore)
[/python]
Esercizio:
Aggiungere il controllo sulla distribuzione: il vettore bins[0..9] deve contenere un valore intero pari al numero di elementi che cadono nell’intervallo 0..99,100..199,200..299, etc. quindi per ogni valore, trovate l’intervallo a cui appartiene, e incrementate l’opportuno bins[i], alla fine stampate il valore di tutti i bins, se il vostro generatore è veramente uniforme, tali contatori devono essere vicini (la loro differenza deve essere trascurabile).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *