首页 > 解决方案 > Jython 范围问题

问题描述

我正在编写这个程序来获取输入类的列表以及分数。目标是打印班级输入以及与数字分数输入相关的字母等级。

但是,当放入超过 1 个类时,它会给我一个错误,说序列索引超出范围。此外,无论我输入什么分数,它总是在班级旁边打印“A”。

course_list = []
score_list = []
grade_list = []
while True:
  course = requestString("Enter a class name or 'q' to quit")
  if  course == 'q':
    break
  else:
    course_list.append(course)
    score = requestString("Enter the class score")
    score_list.append(score)    

if score >= 90:
  grade_list.append(" A")
elif score >= 80:
  grade_list.append(" B")
elif score >= 70:
  grade_list.append(" C")
elif score >= 60:
  grade_list.append(" D")
else:
  grade_list.append(" F")

print "-=Class Scores=-"

final_list = [course_list, grade_list]

for i in range(len(course_list)):
  final = ''
  for j in range(len(final_list)): 
    final += (final_list[j][i])
  print final

标签: pythonrangejython

解决方案


这与 Jython 无关。您所要做的就是将整个if score [...]-Block 缩进到与score_list.append(score).

你的代码的问题是这个块在while-loop 之外,所以你扩展course_listscore_list直到输入是q,但只有在完成之后你才能获取最后一个分数并扩展grade_list一次。

所以grade_list总是有 1 的长度(或者 0,如果没有给出课程)并且索引final_list[j][i]失败,因为它期望 的长度course_list等于 的长度grade_list

course_list = []
score_list = []
grade_list = []
while True:
  course = requestString("Enter a class name or 'q' to quit")
  if  course == 'q':
    break
  else:
    course_list.append(course)
    score = requestString("Enter the class score")
    score_list.append(score)    
    # this has to happen inside the while-loop:
    if score >= 90:
      grade_list.append(" A")
    elif score >= 80:
      grade_list.append(" B")
    elif score >= 70:
      grade_list.append(" C")
    elif score >= 60:
      grade_list.append(" D")
    else:
      grade_list.append(" F")

print "-=Class Scores=-"

final_list = [course_list, grade_list]

for i in range(len(course_list)):
  final = ''
  for j in range(len(final_list)): 
    final += (final_list[j][i])
  print final

推荐阅读