为何我的Python GPA转换代码会重复弹出输入提示?
GPA转换代码重复输入问题的解决
问题根源
- 重复的输入语句:代码开头的
GPA = round(float(input('Enter Term GPA (0-4.3):')), 1)是多余的,它会先触发一次输入请求;之后while循环内又有相同的输入语句,导致即便是有效输入,也会被要求再输入一次。 - 最大值定义错误:
MaximumGrade = int(4.3)会将4.3强制转换为整数4,导致用户输入4.1-4.3之间的GPA时被判定为无效值,应该直接设为4.3。
修正后的代码
MinimumGrade = 0 MaximumGrade = 4.3 # 修正:保留浮点数值,不转整数 F = 0 D = 0.85 D_Plus = 1.15 C_Minus = 1.5 C = 1.85 C_Plus = 2.15 B_Minus = 2.5 B = 2.85 B_Plus = 3.15 A_Minus = 3.5 A = 3.85 A_Plus = 4.06 def LetterGrade(gpa): # 优化:将GPA作为参数传入,避免依赖全局变量 if gpa <= D: print("\t %s %s" % ("Letter Grade:", "F")) elif gpa < D_Plus: print("\t %s %s" % ("Letter Grade:", "D")) elif gpa < C_Minus: print("\t %s %s" % ("Letter Grade:", "D+")) elif gpa < C: print("\t %s %s" % ("Letter Grade:", "C-")) elif gpa < C_Plus: print("\t %s %s" % ("Letter Grade:", "C")) elif gpa < B_Minus: print("\t %s %s" % ("Letter Grade:", "C+")) elif gpa < B: print("\t %s %s" % ("Letter Grade:", "B-")) elif gpa < B_Plus: print("\t %s %s" % ("Letter Grade:", "B")) elif gpa < A_Minus: print("\t %s %s" % ("Letter Grade:", "B+")) elif gpa < A: print("\t %s %s" % ("Letter Grade:", "A-")) elif gpa < A_Plus: print("\t %s %s" % ("Letter Grade:", "A")) elif gpa >= A_Plus: print("\t %s %s" % ("Letter Grade:", "A+")) done = False while done == False: GPA = round(float(input('Enter Term GPA (0-4.3):')), 1) if GPA < MinimumGrade or GPA > MaximumGrade: continue else: print("%s %0.1f" %("Term GPA:", GPA)) LetterGrade(GPA) # 优化:传入当前GPA参数 done = True
额外优化说明
- 将
LetterGrade函数改为接收GPA参数的形式,避免依赖全局变量,让代码逻辑更清晰、模块化。
内容的提问来源于stack exchange,提问作者Fikayo Akande
相关产品推荐
相关产品推荐

