如何用Python 3面向对象编程计算最大值,报错'int' object is not iterable
问题错误原因
- 第一处错误在
for i in n语句:n是输入后转换的整数类型,Python不支持直接遍历整数,所以抛出'int' object is not iterable错误,需要改成遍历range(n)来实现循环n次的逻辑。 - 第二处是逻辑设计问题:你仅初始化了1个
student类实例,每次循环都会覆盖之前存储的姓名和gpa值;同时self.gpa存储的是单个整数,调用max()方法时需要传入可迭代对象,也会触发同类报错。
错误截图如下:
结合列表与面向对象的实现方案
如果你要实现的是「录入n个学生的信息,输出所有学生中的最高gpa」,可以参考如下修改后的代码:
class Student: # 用构造方法初始化每个实例的属性,不要用类属性存储单例值 def __init__(self, name, gpa): self.name = name self.gpa = gpa def count_max_gpa(student_list): # 从学生列表中提取所有gpa,取最大值 all_gpa = [stu.gpa for stu in student_list] return max(all_gpa) def main(): student_list = [] n = int(input("n: ")) # 遍历range(n)实现循环n次 for _ in range(n): # 如果name是学号可以改成int(input) name = input("请输入学生姓名: ") gpa = float(input("请输入学生gpa: ")) # 每次循环新建一个Student实例,存入列表 student_list.append(Student(name, gpa)) max_gpa = count_max_gpa(student_list) print(f"最高gpa为: {max_gpa}") if __name__ == "__main__": main()
代码说明
- 定义
Student类时使用构造方法__init__,每个学生对应一个独立的类实例,属性互不干扰 - 用列表
student_list存储所有创建好的学生实例,实现多数据的批量管理 - 取最高gpa时先从列表中提取所有学生的gpa值组成新的可迭代列表,再调用
max()方法计算
内容的提问来源于stack exchange,提问作者tinymermaid
相关产品推荐
相关产品推荐


