2013-02-18 35 views
6

Tôi đang cố gắng viết một chương trình cho phép bạn nhập số học sinh trong một lớp, và sau đó nhập 3 điểm kiểm tra cho mỗi học sinh để tính trung bình. Tôi mới tham gia lập trình và tôi vẫn gặp phải lỗi mà tôi không hiểu ý nghĩa của nó hoặc cách khắc phục. Đây là những gì tôi có cho đến thời điểm này:Làm cách nào để sửa TypeError: đối tượng 'int' không thể lặp lại?

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

Chào mừng bạn đến với Stack Overflow! Nếu một trong các câu trả lời bên dưới đã giải quyết câu hỏi của bạn, vui lòng đánh dấu câu hỏi đó là câu trả lời được chấp nhận bằng cách nhấp vào đường viền của dấu kiểm :) – bdesham

Trả lời

15

Vì vậy, khi bạn viết

for number in students: 

những gì bạn muốn là, "chạy khối mã này students lần, nơi students là giá trị tôi vừa bước vào". Nhưng trong Python, thứ bạn chuyển đến a for statement cần phải là một loại đối tượng có thể lặp lại. Trong trường hợp này, những gì bạn muốn chỉ là range statement. Điều này sẽ tạo ra một danh sách các số, và lặp lại qua những sẽ cho phép for vòng lặp của bạn để thực hiện đúng số lần:

for number in range(students): 
    # do stuff 

Dưới mui xe, các range chỉ tạo ra một danh sách các số tuần tự:

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

Trong trường hợp của bạn, nó không thực sự quan trọng những con số này là gì; hai for câu sau đây sẽ làm điều tương tự:

for number in range(5): 

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

Nhưng sử dụng phiên bản range được coi là thành ngữ hơn và thuận tiện hơn nếu bạn cần phải thay đổi một số loại danh sách trong vòng lặp của bạn (mà có lẽ những gì bạn' sẽ cần phải làm sau).

+0

Đây là cách dễ nhất nếu bạn chỉ muốn thực hiện vòng lặp _students_ lần, như bạn đang có. Nếu bạn muốn thực sự sử dụng _number_ trong vòng lặp của bạn, dòng mã trong câu trả lời của arcx là cách chính xác để đi. – RobH

+0

Chắc chắn, mặc dù hãy cẩn thận. Nếu bạn chỉ muốn * hiển thị * các con số, thì câu trả lời của arkx sẽ cung cấp cho bạn con số hợp lý với con người: "Sinh viên số 1 là Sally Smith; Sinh viên số 2 là Jimmy Jones", v.v. Nhưng nếu bạn đang lưu trữ các giá trị trong một danh sách Python - các chỉ số bắt đầu bằng số không - tốt hơn là nên sử dụng biểu mẫu 'range (number_of_students)' và chỉ thêm một biến vào biến lặp bất cứ khi nào bạn cần hiển thị nó cho người dùng. – bdesham

+0

Xem câu cuối cùng của bình luận oringinal của tôi về câu trả lời này; cũng, xem bình luận của tôi về câu trả lời của arkx. – RobH

2

Không thể lặp lại các số. Có gì lẽ bạn đang tìm kiếm là range chức năng, mà sẽ tạo ra một chuỗi các con số lên đến số bạn muốn:

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

Lý do tôi thêm + 1 có được vì đối số thứ hai để phạm vi là độc quyền.

+0

tại sao bắt đầu từ 1? – tacaswell

+0

Miền là số học sinh. Thật kỳ lạ khi bắt đầu đếm mọi người từ 0. Tôi đang nghĩ đến trường hợp bạn muốn làm điều gì đó với con số, như lưu nó vào một tệp hoặc một cái gì đó tương tự. – eagleflo

+0

Đây là cách chính xác nếu bạn định sử dụng _number_ trong vòng lặp của mình. Nếu bạn chỉ muốn thực thi vòng lặp _students_ lần, hãy xem câu trả lời của bdesham. – RobH

Các vấn đề liên quan