M1.1213 Stat[1]

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

Questa voce è stata pubblicata in Algoritmi, Informatica, M1, M1.1213, Matematica, Programmazione, Python, Statistica e contrassegnata con , , , . Contrassegna il permalink.

36 risposte a M1.1213 Stat[1]

  1. bobcarr ha detto:

    si il bubble sort funziona ma ha un difetto: troppi cicli, dal primo for bisogna uscire non appena la lista è ordinata

    • Cappellazzo Giacomo ha detto:

      #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

      • bobcarr ha detto:

        adesso può andare
        mi domando: si potrebbe contare quante volte il programma esegue il ciclo for per riuscire a ordinare la lista?

        • Cappellazzo Giacomo ha detto:

          #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

        • bobcarr ha detto:

          non mi pare che il programma risponda al quesito

        • Cappellazzo Giacomo ha detto:

          #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}

  2. bobcarr ha detto:

    bene, sistemato il max e min passiamo a: mettere la lista in ordine crescente (o decrescente): 1 credito in palio

    • Cappellazzo Giacomo ha detto:

      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()

      • bobcarr ha detto:

        prova con la sequenza 5.2, 2.5, 4.0, 3.1

        • Cappellazzo Giacomo ha detto:

          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)

        • Cappellazzo Giacomo ha detto:

          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)

        • bobcarr ha detto:

          non è consentito usare la funzione max()
          inoltre la riga di input doppia non è bella

    • Cappellazzo Giacomo ha detto:

      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)

    • Cappellazzo Giacomo ha detto:

      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

      • bobcarr ha detto:

        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?

        • Cappellazzo Giacomo ha detto:

          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

  3. bobcarr ha detto:

    buon lavoro ma perché due cicli?

    • Cappellazzo Giacomo ha detto:

      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

      • bobcarr ha detto:

        Alcune osservazioni:
        Vedo più volte c=c, ma ti sembra naturale?
        La variabile a mi sembra superflua

        • Cappellazzo Giacomo ha detto:

          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

        • bobcarr ha detto:

          A cosa serve contmin?
          Perchè il test if i==c?

        • Cappellazzo Giacomo ha detto:

          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.

        • bobcarr ha detto:

          Ma contmin era inutile
          Adesso a cosa serve i=0 ?

        • Cappellazzo Giacomo ha detto:

          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

        • bobcarr ha detto:

          mi pare ci sia un for di troppo o sbaglio?

    • Cappellazzo Giacomo ha detto:

      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

      • bobcarr ha detto:

        nella prima assegnazione i=0, non è lo stesso i del ciclo for, quindi non serve
        perché d=lista[0] ?

        • Cappellazzo Giacomo ha detto:

          Poichè per individuare il minore devo fare assumere alla variabile d un numero presente nella lista.

        • bobcarr ha detto:

          e non ci puoi mettere 0?

        • Cappellazzo Giacomo ha detto:

          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

        • Cappellazzo Giacomo ha detto:

          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

  4. Cappellazzo Giacomo ha detto:

    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”.

    • Cappellazzo Giacomo ha detto:

      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)

      • bobcarr ha detto:

        ottimo lavoro
        adesso viene il bello: scrivere un programma che calcoli il max e il min SENZA le funzioni python
        tutt’altra minestra

        • Cappellazzo Giacomo ha detto:

          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

Lascia un commento