2013-02-18 13 views
6

Sto provando a scrivere un programma che consente di inserire il numero di studenti in una classe, quindi inserire 3 voti di prova per ogni studente per calcolare le medie. Sono nuovo alla programmazione e continuo a ricevere un errore che non capisco cosa significa o come risolverlo. Questo è quello che ho finora:Come posso correggere TypeError: l'oggetto 'int' non è iterable?

students=int(input('Please enter the number of students in the class: ')) 

for number in students: 
     first_grade=(input("Enter student's first grade: ")) 
     second_grade=(input("Enter student's second grade: ")) 
     third_grade=(input("Enter student's third grade: ")) 
+0

Benvenuti in Stack Overflow! Se una delle risposte di seguito ha risolto la tua domanda, contrassegnala come risposta accettata facendo clic sul contorno del segno di spunta :) – bdesham

risposta

15

Quindi, quando si scrive

for number in students: 

ciò che si vuole è "eseguire questo blocco di codice students volte, dove students è il valore ho appena entrato". Ma in Python, la cosa che passi a a for statement deve essere una specie di oggetto iterabile. In questo caso, quello che vuoi è solo un range statement. Questo genererà un elenco di numeri, e scorrendo questi permetterà il vostro ciclo for per eseguire il giusto numero di volte:

for number in range(students): 
    # do stuff 

Sotto il cofano, il range solo genera un elenco di numeri sequenziali:

>>> range(5) 
[0, 1, 2, 3, 4] 

Nel tuo caso, non importa davvero quali siano i numeri; le seguenti due for affermazioni avrebbero fatto la stessa cosa:

for number in range(5): 

for number in [1, 3, 97, 4, -32768]: 

Ma utilizzando la versione range è considerato più idiomatica ed è più conveniente se è necessario modificare un qualche tipo di elenco nel ciclo (che è probabilmente quello che si' avremo bisogno di fare più tardi).

+0

Questo è il modo più semplice se vuoi semplicemente eseguire il ciclo _students_ numero di volte, come sei. Se vuoi usare effettivamente _number_ nel tuo loop, la linea di codice nella risposta di arcx è la strada giusta da percorrere. – RobH

+0

Certo, fai attenzione. Se vuoi solo * visualizzare * i numeri, la risposta di arkx ti darà i numeri che hanno senso per gli umani: "Studente n. 1 è Sally Smith, Studente n. 2 è Jimmy Jones", ecc. Ma se stai memorizzando valori in una lista Python - gli indici di cui iniziano con zero - è probabilmente meglio usare il form 'range (number_of_students)' e aggiungerne uno alla variabile iteration ogni volta che è necessario visualizzarlo all'utente. – bdesham

+0

Vedere l'ultima frase del mio commento oringo su questa risposta; inoltre, vedi il mio commento sulla risposta di arkx. – RobH

2

I numeri non possono essere ripetuti. Quello che probabilmente stai cercando è la funzione range, che creerà una sequenza di numeri fino al numero che si desidera:

for number in range(1, students + 1):

La ragione per cui ho aggiunto + 1 non è perché il secondo argomento di gamma è esclusivo.

+0

perché iniziare da 1? – tacaswell

+0

Il dominio è il numero di studenti. È piuttosto strano iniziare a contare persone da 0. Sto pensando al caso in cui vuoi fare qualcosa con il numero, come salvarlo in un file o qualcosa di simile. – eagleflo

+0

Questo è il modo corretto se userai effettivamente _number_ nel tuo loop. Se si desidera eseguire il ciclo _students_ numero di volte, vedere la risposta di bdesham. – RobH

Problemi correlati