2013-02-18 13 views
6

Próbuję napisać program, który pozwala wprowadzić liczbę uczniów w klasie, a następnie wprowadzić 3 oceny testu dla każdego ucznia, aby obliczyć średnie. Jestem nowy w programowaniu i ciągle dostaję błąd, którego nie rozumiem, co to znaczy i jak to naprawić. Oto, co mam do tej pory:Jak naprawić TypeError: "int" obiekt nie jest 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

Witamy w Stack Overflow! Jeśli jedna z poniższych odpowiedzi rozwiązuje Twoje pytanie, zaznacz ją jako zaakceptowaną odpowiedź, klikając kontur znacznika wyboru :) – bdesham

Odpowiedz

15

Więc kiedy piszesz

for number in students: 

co chcesz jest „uruchomienie tego bloku kodu students czasach, gdzie students jest wartością Właśnie weszła”. Ale w Pythonie rzeczą, którą przechodzisz na a for statement, musi być jakiś obiekt iterowalny. W tym przypadku to, czego potrzebujesz, to tylko range statement. To wygeneruje listę numerów, a iteracja te pozwolą pętla for wykonać odpowiednią liczbę razy:

for number in range(students): 
    # do stuff 

Pod maską range tylko generuje listę numerów sekwencyjnych:

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

W twoim przypadku nie ma znaczenia, jakie są liczby; następujące dwa for oświadczenia zrobi to samo:

for number in range(5): 

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

Ale użyciu wersji range jest uważane za bardziej idiomatyczne i jest bardziej wygodne, jeśli trzeba zmienić jakieś listy w pętli (co jest prawdopodobnie to, czego” zajdzie potrzeba zrobienia tego później).

+0

To najprostszy sposób, jeśli chcesz po prostu wykonać pętlę _students_ razy, tak jak i ty. Jeśli chcesz faktycznie użyć _number_ w swojej pętli, linia kodu w odpowiedzi arcx jest właściwą drogą. – RobH

+0

Oczywiście, choć bądź ostrożny. Jeśli chcesz * wyświetlić * liczby, odpowiedź Arkx dostarczy ci liczb, które mają sens dla ludzi: "Uczeń nr 1 to Sally Smith, uczeń nr 2 to Jimmy Jones" itp. Ale jeśli przechowujesz wartości w lista Pythona - której indeksy zaczynają się od zera - prawdopodobnie lepiej jest użyć formularza 'range (number_of_students)' i po prostu dodać jeden do zmiennej iteracji, gdy trzeba go wyświetlić użytkownikowi. – bdesham

+0

Zobacz ostatnie zdanie mojego komentarza oringinalnego na temat tej odpowiedzi; zobacz także mój komentarz na temat odpowiedzi Arkx. – RobH

2

Numery nie mogą być iterowane. Co pewnie szukasz jest funkcja range, które będą tworzyć sekwencję liczb do liczby chcesz:

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

Powodem dodałem + 1 nie jest, ponieważ drugi argument zakres jest Ekskluzywny.

+0

dlaczego zacząć od 1? – tacaswell

+0

Domena to liczba studentów. Dziwnie jest zacząć odliczać ludzi od zera. Zastanawiam się nad przypadkiem, w którym chcesz coś zrobić z numerem, np. Zapisać go w pliku lub coś podobnego. – eagleflo

+0

To jest poprawny sposób, jeśli zamierzasz użyć _number_ w swojej pętli. Jeśli chcesz tylko wykonać pętlę _students_ razy, zobacz odpowiedź bdeshama. – RobH

Powiązane problemy