You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python查找学生数组最低成绩时触发int与str比较TypeError报错

问题说明

编写Python代码实现学生信息(姓名、学号、成绩)录入、平均成绩计算功能时,需要从存储数据的列表中提取最低学生成绩,运行代码时持续抛出Traceback回溯报错,无法得到预期结果。

原实现代码
def my_array():
 students = list()
 total = 0
 
 NumStudents = int(input("Please enter number of students: "))
 for i in range(int(NumStudents)):
   Student_Name = input("Please enter student name: ")
   students.append(Student_Name)
   Student_Num = int(input("Please enter student number: "))
   students.append(int(Student_Num))
   Student_Mark = int(input("Please enter student mark: "))
   students.append(int(Student_Mark))
   total += Student_Mark
   listA = students
   new_list = np.array_split(listA, NumStudents) 
   for item in new_list:
     print(list(item))
     #print(list(item[0]))
   print('Average Student Mark is', str(total / NumStudents))
 def find_min(students):
   minimum = students[0]
   for x in students[1:]:
     if x < minimum:
       minimum = x
       return minimum
 find_min(students)
my_array()
运行报错信息
Traceback (most recent call last):
  File "C:\Users\MMaseko\PycharmProjects\utopiaWasteDisposalPlant\iterable.py", line 37, in <module>
    my_array()
  File "C:\Users\MMaseko\PycharmProjects\utopiaWasteDisposalPlant\iterable.py", line 36, in my_array
    find_min(students)
  File "C:\Users\MMaseko\PycharmProjects\utopiaWasteDisposalPlant\iterable.py", line 33, in find_min
    if x < minimum:
TypeError: '<' not supported between instances of 'int' and 'str'
错误原因定位
  • 数据存储结构错误:将字符串类型的姓名、整数类型的学号、整数类型的成绩全部平铺存入同一个students列表,列表内同时混存两种类型的数据,遍历做大小比较时会触发类型不支持比较的报错。
  • 代码缩进错误:列表拆分、成绩打印、平均分计算、最小值查找的逻辑全部写在了录入学生信息的for循环内部,每录入1个学生就会执行一次全量计算,执行时机完全错误。
  • 函数逻辑错误:自定义find_min函数的return语句写在了if判断块内部,只要遍历到第一个比初始值小的元素就会直接返回,不会遍历完全部元素,即便数据类型正确也无法得到真正的最小值。
  • 依赖缺失:代码中调用了np.array_split方法,但没有提前导入numpy库,即便解决了类型报错,执行到这行也会抛出NameError。
  • 筛选逻辑缺失:找最低成绩时直接把混存了姓名、学号、成绩的全量列表传入比较函数,没有单独提取成绩字段做计算。
修正后代码

修正思路:按单个学生维度分组存储信息,单独维护纯成绩的列表用于计算平均分、最低分,调整所有计算、输出逻辑的位置到全部学生信息录入完成后,移除不必要的第三方库依赖,修正最小值函数的返回逻辑。

def find_min(num_list):
    minimum = num_list[0]
    for x in num_list[1:]:
        if x < minimum:
            minimum = x
    return minimum

def my_array():
    students = []
    total = 0
    mark_list = []
    NumStudents = int(input("Please enter number of students: "))
    for i in range(NumStudents):
        Student_Name = input("Please enter student name: ")
        Student_Num = int(input("Please enter student number: "))
        Student_Mark = int(input("Please enter student mark: "))
        # 按学生分组存储信息,避免不同类型数据平铺混存
        students.append([Student_Name, Student_Num, Student_Mark])
        total += Student_Mark
        mark_list.append(Student_Mark)
    # 所有信息录入完成后再执行打印、计算逻辑
    for item in students:
        print(item)
    print('Average Student Mark is', total / NumStudents)
    min_mark = find_min(mark_list)
    print('Lowest Student Mark is', min_mark)

my_array()

内容的提问来源于stack exchange,提问作者Mduduzi Maseko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:54:32