Sono un principiante di Python e mi sto insegnando a comprendere le liste. Ho fatto bene con quasi tutto il codice for-loop che ho tradotto per elencare la comprensione, ma sono molto bloccato su quello che pensavo fosse un ciclo abbastanza semplice.Python for-loop to list comprehension
n = 10000
def sim(y):
count = 0
for i in range(10000):
if 0.9 <= y[i] <= 1.8:
count += 1
probability = count/10000.0
print("P(a < x <= b) : {0:8.4f}".format(probability))
print ("\t case: \n"),sim([0.25 if random() < 0.8 else 1.5 for r in range(n)])
Finora ho cercato variazioni sul seguente ma è tutti gli errori ottenendo connessi con l'uso di liste, come "oggetto 'int' è unsubscriptable" e "tipo non supportato operando (s) per +: 'int' e 'lista' ".
def sim(y):
c4 = sum([y for range(y) in range(len(y)) if 0.9 < y[i] <= 1.8])/10000
print("P(a < x <= b) : {0:8.4f}".format(c4))
Lo scopo è quello di prendere fondamentalmente il parametro passato sim() e scorrere per tutta la lunghezza di esso mentre incrementare di 1 solo per quei valori trovati vero dalla condizione tra 0,9 e 1,8. Sto provando a controllare ciascuno dei randoms per quella condizione. Quindi somma solo quelli che sono veri.
A proposito, la risposta dovrebbe aggirarsi intorno a 0.2 - se si vuole verificare, basti pensare che 1.5 è l'unico modo per adattarsi tra 0.9 e 1.8.
Apprezzo la tua pazienza mentre sto imparando.
Grazie Martijn ma non sembra che tutti i numeri siano sommati. Sta restituendo 0,00 risultati. Ho provato 0.9
stackuser
@stackuser: ah, questo perché questa è una divisione intera; corretto per renderlo float division invece. –
@stackuser: prova la mia versione .. 'i' non è un indice in' y', è un valore * di * 'y'. Il codice scorre su 'y' stesso, non su un' range() '.. –