DOMANDA [Python] Creazione lista con range impostato dall'utente

censa

Utente Attivo
535
91
CPU
intel core i7 4770k
RAM
8gb DDR3
GPU
Nvidia gtx760
OS
Windows 8.1
ciao a tutti, oggi stavo provando a dilettarmi con pyhton e volevo provare a generare una lista con range impostato dall'utente..solo che nel momento dell'esecuzione mi si genra il seguente errore a cui non so rimediare (per ora)
inoltre, è possibile eseguire lo stesso procedimento senza utilizzare .append()?
questo è il codice:
 

Allegati

  • Cattura2.PNG
    Cattura2.PNG
    16.9 KB · Visualizzazioni: 139
  • Cattura.PNG
    Cattura.PNG
    11.1 KB · Visualizzazioni: 137

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Una lista si rappresenta con [ ]. Come vedi nell’esecuzione ti viene detto che stai usando .append() con un intero e non con una lista
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
O una lista la definisci per intero da subito o la costruisci a partire dalla lista vuota aggiungendo elementi; es. per lista di interi
Python:
lista = [] #lista vuota
n = int(input("Numero di elementi? -> "))
for i in range(n):
    k = int(input("Elemento %d ? -> " % (i)))
    lista.append(k)
print(lista)
s=input("Premi <INVIO> per terminare.")
 

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
Prima di tutto un appunto, quando tu scrivi
Python:
for i in range(N)
non devi incrementare il contatore a ogni iterazione, in quanto viene già fatto dal for.

Ci sono poi diversi modi per definire una lista. Se vuoi semplicemente una lista di lunghezza N contenente lo stesso valore V ripetuto, puoi usare la scrittura
Python:
L = [V]*N
#esempio
>>> [0]*5
[0, 0, 0, 0, 0]
Per qualcosa di più elaborato, piuttosto che usare append, è meglio ricorrere a una "pythonic form" tipica di questo linguaggio. Nel tuo caso specifico puoi scrivere:
Python:
lista = [int(input()) for i in range(lunghezza)]
#ma visto che del "contatore" i non te ne fai niente, puoi anche scrivere
lista = [int(input()) for _ in range(lunghezza)]
In generale, gran parte dei cicli iterativi del tipo
Python:
lista = [ ]
for i in R:
   lista.append(fai_qualcosa(i))
possono essere riscritti come
Python:
lista = [fai_qualcosa(i) for i in R]
Il costrutto completo ammette ulteriori varianti, utile quando si vuole verificare una condizione sul valore iterato (quindi non un semplice contatore diversamente dal tuo caso):
Python:
#Dato un oggetto iterabile i cui elementi sono numeri interi, ricopia in "lista" solo i valori pari
lista = [ ]
for i in R:
   if i%2 == 0:
       lista.append(i)

#può essere riscritto come:
lista = [i for i in R if i%2==0]

E la flessibilità continuerebbe ancora... ma lascio il divertimento a te :D
 
Ultima modifica:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!