2013-02-18 25 views
6

Bir sınıftaki öğrenci sayısını girmenizi ve ardından ortalamaları hesaplamak için her öğrenci için 3 test notu girmenizi sağlayan bir program yazmaya çalışıyorum. Programlamada yeniyim ve bunun ne anlama geldiğini veya nasıl düzeltileceğini anlamadığım bir hatayı almaya devam ediyorum.TypeError'ı nasıl düzeltirim: 'int' nesnesi yinelenemez değil mi?

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

Yığın Taşmasına Hoş Geldiniz! Aşağıdaki cevaplardan biri sorunuzunuzu çözdüyse, lütfen onay işaretinin anahatlarını tıklayarak kabul edilen yanıt olarak işaretleyin :) – bdesham

cevap

15

Yani "students Sadece girilen değer olduğu, kod students kez bu bloğu çalıştırmak" ne istiyorsun,

for number in students: 

yazarken. Ama Python'da, a for statement'a ilettiğiniz şey, bir çeşit yinelenen nesne olmalıdır. Bu durumda, istediğiniz şey sadece bir range statement. Bu numaralarının listesini oluşturacaktır ve bu yineleme sizin for döngü süreleri doğru sayıda çalıştırmak için izin verecektir:

>>> range(5) 
[0, 1, 2, 3, 4] 
: Kaputun altında

for number in range(students): 
    # do stuff 

, range sadece ardışık sayıların bir listesini oluşturur

Sizin durumunuzda, sayıların gerçekten önemi yoktur; muhtemelen ne sen' hangi (döngü içinde listenin çeşit değiştirmek gerekiyorsa

for number in range(5): 

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

Ama range sürümünü kullanarak daha deyimsel olarak kabul edilir ve daha uygun olur edilir: Aşağıdaki iki for ifadeleri aynı şeyi yapardı daha sonra yapmak gerekecek).

+0

Bu en kolay yol, sadece döngüleri _students_ defalarca yürütmek istiyorsanız, sizin gibi. Aslında, döngü içinde _number_ kullanmak istiyorsanız, arcx'in cevabındaki kod satırı gitmek için doğru yoldur. – RobH

+0

Elbette, dikkatli olun. Eğer sadece * sayıları * göstermek istiyorsanız, arkx'ın cevabı size insanlara mantıklı olan rakamlar verecektir: "Öğrenci # 1, Sally Smith; Öğrenci # 2, Jimmy Jones", vb. Bir Python listesi - endeksleri sıfır ile başlar - muhtemelen menzil (number_of_students) formunu kullanmak daha iyidir ve kullanıcıya görüntülemeniz gerektiğinde iterasyon değişkenine bir tane ekleyin. – bdesham

+0

Bu cevabın oringinal yorumunun son cümlesini görün; ayrıca arkx'ın cevabı hakkındaki yorumumu da görün. – RobH

2

Numaraları iterated edilemez: Bu defa ne var.

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

I + 1 ilave nedeni aralığına ikinci argüman yoktur çünkü: Ne muhtemelen aradığınız numaraya kadar bir sayı dizisi oluşturacak range fonksiyonu, istediğiniz olduğu münhasır.

+0

neden 1'den başlayarak? – tacaswell

+0

Alan, öğrencilerin sayısıdır. İnsanları 0'dan saymaya başlamak oldukça garip. Numarayla bir şeyler yapmak istediğiniz bir dosyaya ya da benzer bir şeye kaydetmek gibi bir durumun önüne geçiyorum. – eagleflo

+0

Döngünün içinde gerçekten _number_ kullanacaksanız, doğru yol budur. Sadece döngü _students_ sayısını yürütmek istiyorsanız, bdesham'ın cevabına bakın. – RobH

İlgili konular