Python中TypeError: unsupported operand type(s) for /: 'str' and 'int'错误求助
问题分析与修复方案
嘿,我看到你被这个TypeError卡了一周,别着急,咱们一步步拆解问题:
核心错误原因
- 函数返回值错误:你的
firstTerm()、midTerm()、final()这三个函数,最后返回的是字符串字面量(比如return 'firsttermScore'),而不是你计算好的分数变量。这导致firstterm、midterm、final这三个变量存的都是字符串,根本不是数值。 - 平均分计算逻辑错误:你错误地把
midterm和final转成字符串后做拼接,这会把三个字符串连在一起(比如三个分数是80、85、90,拼接后变成"808590"),然后试图用这个字符串除以3,字符串和整数当然不能做除法,所以触发了TypeError。
除此之外,代码里还有几个隐藏的小问题,比如区间重叠、变量命名冲突、拼写错误,我一起帮你修复了。
修复后的完整代码
def determine_score(grade): if 95 <= grade <= 100: return 'A+' elif 90 <= grade <= 94: return 'A' elif 87 <= grade <= 89: return 'A-' elif 83 <= grade <= 86: return 'B+' elif 80 <= grade <= 82: return 'B' elif 77 <= grade <= 79: return 'B-' elif 73 <= grade <= 76: return 'C+' elif 70 <= grade <= 72: return 'C' elif 60 <= grade <= 69: return 'D' elif 0 <= grade <= 59: return 'F' else: return 'invalid score' def firstTerm(): fst_sub1 = int(input("Enter first term marks of the first subject: ")) fst_sub2 = int(input("Enter first term marks of the second subject: ")) fst_sub3 = int(input("Enter first term marks of the third subject: ")) fst_sub4 = int(input("Enter first term marks of the fourth subject: ")) fst_sub5 = int(input("Enter first term marks of the fifth subject: ")) firsttermScore = (fst_sub1 + fst_sub2 + fst_sub3 + fst_sub4 + fst_sub5) / 5 return firsttermScore # 去掉引号,返回计算好的数值 def midTerm(): mid_sub1 = int(input("Enter mid term marks of the first subject: ")) mid_sub2 = int(input("Enter mid term marks of the second subject: ")) mid_sub3 = int(input("Enter mid term marks of the third subject: ")) mid_sub4 = int(input("Enter mid term marks of the fourth subject: ")) mid_sub5 = int(input("Enter mid term marks of the fifth subject: ")) midtermScore = (mid_sub1 + mid_sub2 + mid_sub3 + mid_sub4 + mid_sub5) / 5 return midtermScore # 去掉引号,返回数值 def finalTerm(): # 重命名函数,避免和变量名冲突 fnl_sub1 = int(input("Enter final marks of the first subject: ")) fnl_sub2 = int(input("Enter final marks of the second subject: ")) fnl_sub3 = int(input("Enter final marks of the third subject: ")) fnl_sub4 = int(input("Enter final marks of the fourth subject: ")) fnl_sub5 = int(input("Enter final marks of the fifth subject: ")) finalScore = (fnl_sub1 + fnl_sub2 + fnl_sub3 + fnl_sub4 + fnl_sub5) / 5 return finalScore # 去掉引号,返回数值 total = 0 highest = 0 numStudents = int(input("How Many Students are there? ")) while numStudents < 0 or numStudents > 100: numStudents = int(input("Please enter a number between 0 and 100? ")) list_marks = [] # 把列表初始化移到循环外,避免每次循环重置 winner = "" top_grade = "" for i in range(numStudents): student_name = input("Enter Student's Name Please: ") firstterm = firstTerm() midterm = midTerm() final_score = finalTerm() # 用final_score代替final,避免覆盖函数 # 直接对三个数值求和后计算平均分 student_avg = (firstterm + midterm + final_score) / 3 list_marks.append([student_name, student_avg]) # 更新最高分和对应学生 if student_avg > highest: highest = student_avg winner = student_name top_grade = determine_score(highest) # 打印当前学生的结果 current_grade = determine_score(student_avg) print(f"Exam result for {student_name}: {list_marks[-1]}, grade is: {current_grade}") # 打印最终的最高分结果 print(f"The Student with the highest average is: {winner}, With the highest average of: {highest}, GPA is: {top_grade}")
关键修改点说明
- 修复函数返回值:把每个成绩函数里的
return '变量名'改成return 变量名,确保返回的是计算好的浮点数值,而不是字符串。 - 修正平均分计算:删除不必要的
str()转换,直接对三个数值求和后除以3,得到正确的平均分。 - 调整成绩区间:重新梳理了
determine_score的分数区间,确保每个分数只对应一个等级,没有重叠或漏洞。 - 解决命名冲突:把
final函数重命名为finalTerm,避免循环里的变量覆盖函数引用,导致后续循环报错。 - 优化最高分跟踪:在每次循环中正确更新最高分对应的学生和等级,避免最后只显示最后一个学生的等级。
- 修复拼写错误:把
invalide改成invalid,修正了单词拼写错误。
内容的提问来源于stack exchange,提问作者jumon chowdhury
相关产品推荐
相关产品推荐

