istanziare oggetti ciclicamente Python2

enricovela

Utente Attivo
184
48
Hardware Utente
CPU
Ryzen 3600
Dissipatore
Stock
Scheda Madre
MSI Gaming plus max x470
Hard Disk
970 evo plus
RAM
16 GB @3000 MHz
Scheda Video
RX 5700 Pulse
Alimentatore
Straight power 11 650 W
Case
Cooler Master MB510L
Sistema Operativo
Ubuntu 18 / Windows 10
Non sono espertissimo, per un proggetto che sto seguendo, mi servirebbe poter instanziare ciclamente degli oggetti. Iterando il processo n volte.

E' possibile fare una cosa del genere? Se si cosa devo andare a studiare?

giusto per intederci:

Python:
class Pollo:
    def __init__(self, intero):
         self.intero = intero

     def Stampa(self):
         print(self.intero)
i = 0

casa = [5]

while i < 6:
    casa[i] = Pollo(i)
     i = i +1

casa[2].Stampa()
 
Ultima modifica:

1nd33d

Utente Attivo
653
279
Hardware Utente
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
Hard Disk
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
Scheda Video
XFX RX480 GTR Black Edition
Scheda Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
Alimentatore
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
Sistema Operativo
Windows 10 64bit - Linux Mint 18
In realtà ciò che vuoi fare è molto semplice, quindi rispondendo alla seconda domanda: dovresti studiarti bene le basi di python e soprattutto i i tipi standard alla voce "Built-in Types" della documentazione ufficiale (magari python3, a meno che tu non abbia esigenze particolari per usare il 2).
Python non ha i vettori, o almeno non come quelli del C. In python abbiamo le liste, che sono quindi di lunghezza variabile.
L'istruzione
Codice:
casa = [5]
crea una lista con un solo elemento che è l'intero di valore 5, e non, come probabilmente ti aspettavi, una lista di lunghezza 5 (il ciclo successivo sarebbe comunque sbagliato perchè itera 6 volte e usciresti dalla lista).
In questi casi ti conviene partire da una lista vuota e quindi con una delle seguenti istruzioni, che sono equivalenti:
Codice:
casa = [ ]
casa = list()
Poi il ciclo diventa una sequenza di "append", che ti suggerisco di fare con un "for in":
Codice:
for i in range(6):
   casa.append(Pollo(i))
in questo caso "range" è una classe che rappresenta una sequenza di interi tra 0 e 5 compresi, per ora puoi ignorare cosa sia di preciso, grosso modo è come scrivere "for i in [0,1,2,3,4,5]" così che ad ogni iterazione del for "i" assume un valore tra 0 e 5 (in ordine crescente in questo caso) e termina dopo l'ultimo elemento.

In definitiva il codice complessivamente è:
Codice:
class Pollo:
    def __init__(self, intero):
        self.intero = intero

    def Stampa(self):
        print(self.intero)

casa = []
for i in range(6):
    casa.append(Pollo(i))

casa[2].Stampa()
La "pythonic way" per popolare quella lista sarebbe invece:
Codice:
casa = [Pollo(i) for i in range(6)]
 
Ultima modifica:
  • Mi piace
Reactions: Andretti60

enricovela

Utente Attivo
184
48
Hardware Utente
CPU
Ryzen 3600
Dissipatore
Stock
Scheda Madre
MSI Gaming plus max x470
Hard Disk
970 evo plus
RAM
16 GB @3000 MHz
Scheda Video
RX 5700 Pulse
Alimentatore
Straight power 11 650 W
Case
Cooler Master MB510L
Sistema Operativo
Ubuntu 18 / Windows 10
Grazie mille :ok:
 

Entra

oppure Accedi utilizzando