Post di Statistica e programmazione.
Risolto il problema di calcolare la media di una serie di dati ci proponiamo ora i seguenti problemi:
1) degli stessi dati calcolare il valore massimo,il valore minimo e il range.
2) mettere i dati in ordine crescente o decrescente
per ora può bastare
si il bubble sort funziona ma ha un difetto: troppi cicli, dal primo for bisogna uscire non appena la lista è ordinata
#Bubble_Sort
ordina=True
LISTA=input(“Digitare in numeri da ordinare {es. x,y }”)
lista=list(LISTA)
while ordina:
ordina=False
for b in range (0,len(lista)-1):
if lista[b]>lista[b+1]:
ordina=True
lista[b], lista[b+1]=lista[b+1],lista[b]
print lista
adesso può andare
mi domando: si potrebbe contare quante volte il programma esegue il ciclo for per riuscire a ordinare la lista?
#Bubble_Sort
ordina=1
LISTA=input(“Digitare in numeri da ordinare {es. x,y }”)
lista=list(LISTA)
while ordina!=0:
ordina=0
for b in range (0,len(lista)-1):
if lista[b]>lista[b+1]:
ordina=ordina+1
lista[b], lista[b+1]=lista[b+1],lista[b]
print lista
non mi pare che il programma risponda al quesito
#Bubble_Sort
ordina=True
cont=0
LISTA=input(“Digitare in numeri da ordinare {es. x,y }”)
lista=list(LISTA)
while ordina!=0:
ordina=False
for b in range (0,len(lista)-1):
if lista[b]>lista[b+1]:
ordina=True
cont=cont+1
lista[b], lista[b+1]=lista[b+1],lista[b]
print lista
print “Per riuscire a ordinare la lista ci sono voluti “,cont,” scambi”
{Scusi, ho interpretato male il suo quesito}
bene, sistemato il max e min passiamo a: mettere la lista in ordine crescente (o decrescente): 1 credito in palio
lista=input (“Che numeri vuoi ordinare? “)
for i in range (min(lista),max(lista)+1,1):
b=i in lista
if b==True:
print i,
input()
prova con la sequenza 5.2, 2.5, 4.0, 3.1
nlist=input(“Da quanti numeri è composta la lista? “)
lista=[]
n=0
while n!=nlist:
n=n+1
a=input(“Digitare un numero della lista: “)
lista.append(a)
while 0!= len(lista):
b=max(lista)
print b,
lista.remove(b)
nlist=raw_input(“Digitare i numeri della lista. Digitare ‘s’ per terminare “)
lista=[]
while nlist!=”s”:
lista.append(nlist)
nlist=raw_input(“Digitare i numeri della lista. Digitare ‘s’ per terminare “)
while 0!= len(lista):
b=max(lista)
print b,
lista.remove(b)
non è consentito usare la funzione max()
inoltre la riga di input doppia non è bella
nlist=raw_input(“Digitare i numeri della lista. Digitare ‘s’ per terminare “)
while nlist!= ‘s’:
nlist=raw_input(“Digitare i numeri della lista. Digitare ‘s’ per terminare “)
lista=[]
lista.append(nlist)
while 0!= len(lista):
c=lista[0]
for i in lista:
if i>=c:
c=i
print c,
lista.remove(c)
Mi chiedo perché due righe di input
Inoltre: alla fine ho perso tutta la lista
nlist=raw_input(“Digitare i numeri della lista. Digitare ‘s’ per terminare “)
lista=[]
listaord=[]
while nlist!= ‘s’:
lista.append(nlist)
nlist=raw_input(“Digitare i numeri della lista. Digitare ‘s’ per terminare “)
while 0!= len(lista):
c=lista[0]
for i in lista:
if i>=c:
c=i
listaord.append(c)
lista.remove(c)
print listaord
be, il programma funziona però: restano ancora i due raw_input, inoltre la lista in uscita sembra composta di caratteri e non di numeri
una riflessione sull’algoritmo: tu prendi il massimo elemento della lista e lo inserisci nella nuova, poi lo elimini dalla vecchia e riparti; non si potrebbe formare la nuova lista ordinata inserendo DIRETTAMENTE il numero al posto che gli spetta?
Prof, finalmente sono giunto a una conclusione.
#Bubble_Sort
LISTA=input(“Digitare in numeri da ordinare {es. x,y }”)
lista=list(LISTA)
for a in range (0,len(lista)):
for b in range (0,len(lista)-1):
if lista[b]>lista[b+1]:
scambio=lista[b]
lista[b]=lista[b+1]
lista[b+1]=scambio
print lista
buon lavoro ma perché due cicli?
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
i=0
c=0
d=0
contmin=1
for i in lista:
c=c
a=i
if a>c:
c=a
if a==c:
c=a
else:
c=c
while contmin!=0:
contmin=contmin-1
d=c
if a<d:
d=a
if a==d:
d=a
else:
d=d
print "Il valore massimo è: ",c
print "Il valore minimo é: ",d
print "Il range è di: ",c-d
Alcune osservazioni:
Vedo più volte c=c, ma ti sembra naturale?
La variabile a mi sembra superflua
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
i=0
c=0
d=0
contmin=1
for i in lista:
if i>c:
c=i
if i==c:
c=i
while contmin!=0:
contmin=contmin-1
d=c
if i<d:
d=i
if i==d:
d=i
print "Il valore massimo è: ",c
print "Il valore minimo é: ",d
print "Il range è di: ",c-d
A cosa serve contmin?
Perchè il test if i==c?
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
i=0
c=0
for i in lista:
d=i
for i in lista:
if i>=c:
c=i
if i<=d:
d=i
print "Il valore massimo è: ",c
print "Il valore minimo é: ",d
print "Il range è di: ",c-d
Ho cambiato leggermente l'algoritmo. Nel precedente ho usato la variabile contmin per far assumere alla variabile d un valore che era presente nella variabile lista.
Ma contmin era inutile
Adesso a cosa serve i=0 ?
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
c=0
for i in lista:
d=i
for i in lista:
if i>=c:
c=i
if i<=d:
d=i
print "Il valore massimo è: ",c
print "Il valore minimo é: ",d
print "Il range è di: ",c-d
mi pare ci sia un for di troppo o sbaglio?
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
i=0
c=0
d=lista[0]
for i in lista:
if i>=c:
c=i
if i<=d:
d=i
print "Il valore massimo è: ",c
print "Il valore minimo é: ",d
print "Il range è di: ",c-d
nella prima assegnazione i=0, non è lo stesso i del ciclo for, quindi non serve
perché d=lista[0] ?
Poichè per individuare il minore devo fare assumere alla variabile d un numero presente nella lista.
e non ci puoi mettere 0?
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
c=0
d=0
for i in lista:
if i>=c:
c=i
if id e di conseguenza d=0
L’algoritmo alla fine mi stampa i seguenti valori:
Il valore massimo è: 3
Il valore minimo é: 0
Il range è di: 3
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
i=0
c=0
d=0
for i in lista:
if i>=c:
c=i
if i<=d:
d=i
print "Il valore massimo è: ",c
print "Il valore minimo é: ",d
print "Il range è di: ",c-d
L’algoritmo alla fine mi stampa i seguenti valori:
Il valore massimo è: 3
Il valore minimo é: 0 (non è presente nella lista)
Il range è di: 3
a=input(“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y}”)
print “Il valore massimo è: “,max(a)
print “Il valore minimo è: “,min(a)
print “Il range è di: “,max(a)-min(a)
Ho cercato nel web una funzione per ordinare gli elementi di una lista e ho trovato la funzione a.sort(), ma può ordinare solo le liste.
La variabile a è una “tuple” e Python dice che la funzione non è compatibile con una “tuple”.
a=input(“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y}”)
print “Il valore massimo è: “,max(a)
print “Il valore minimo è: “,min(a)
print “Il range è di: “,max(a)-min(a)
b=list(a)
b.sort()
print b
(Bastava convertire la “Tuple” in List)
ottimo lavoro
adesso viene il bello: scrivere un programma che calcoli il max e il min SENZA le funzioni python
tutt’altra minestra
lista=input (“Digitare i numeri di cui si vuole individuare il maggiore, il minore ed il range. Separarli con una virgola {es. x, y} “)
i=0
c=0
d=0
contmin=1
for i in lista:
c=c
a=i
if a>c:
c=a
if a==c:
c=a
else:
c=c
print “Il valore massimo è: “,c
for i in lista:
a=i
while contmin!=0:
contmin=contmin-1
d=c
if a<d:
d=a
if a==d:
d=a
else:
d=d
print "Il valore minimo é: ",d
print "Il range è di: ",c-d