istanziare oggetti ciclicamente Python2

enricovela

Utente Attivo
443
124
CPU
Ryzen 3600
Dissipatore
Thermaltake Water 3.0 240
Scheda Madre
MSI Gaming plus max x470
HDD
970 evo plus;Crucial MX500 1TB; GIGABYTE M.2 PCIe SSD; p300
RAM
16 GB @3000 MHz
GPU
quadro fx 3800
Audio
Audioengine D1
Monitor
LG 32QK500
PSU
Straight power 11 650 W
Case
Cooler Master MB510L
Net
FTTH Tim
OS
Pop!_OS
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
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
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
Reazioni: Andretti60

enricovela

Utente Attivo
443
124
CPU
Ryzen 3600
Dissipatore
Thermaltake Water 3.0 240
Scheda Madre
MSI Gaming plus max x470
HDD
970 evo plus;Crucial MX500 1TB; GIGABYTE M.2 PCIe SSD; p300
RAM
16 GB @3000 MHz
GPU
quadro fx 3800
Audio
Audioengine D1
Monitor
LG 32QK500
PSU
Straight power 11 650 W
Case
Cooler Master MB510L
Net
FTTH Tim
OS
Pop!_OS
Grazie mille :ok:
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!