初学者索引在python中超出范围

时间:2013-05-14 01:31:23

标签: python

这是我正在为一个班级工作的问题(下面是我的问题和我写的代码):

该计划应接受一系列学生及其考试成绩以回应 “?”提示。输入两位数的考试成绩(没有人得到100或低于10),一个 空间和学生的名字。继续输入这些,直到用户输入“停止” - 你的程序应该能够处理任何形式的“停止” - 例如,“停止”,“停止”, “停止”,“sTOP”等 然后,您应该显示按考试成绩排序的学生姓名列表(低至 高)。 例如(用户输入带下划线):

? 23 Warren
? 44 Dona
? 33 Tom
? stop
Warren
Tom
Dona

所以我理解我写的所有内容,我明白这不是一个特别复杂的问题。虽然,我的代码编写方式,当我输入“stop”来显示我完成输入的程序时,它在for循环中运行输入“stop”,创建索引超出范围错误。如何让它仅在while循环中运行“stop”而不是for循环?

    students = []
    nameScore = ""
    while (nameScore.lower() != "stop"):
        nameScore = input ("? ")
        students.append(nameScore)

    students.sort()

    for student in students:
        x = student.split()
        print (x[1])

2 个答案:

答案 0 :(得分:1)

如果您在追加之前“中断”,则"stop"中不会包含students

while True:
    nameScore = input ("? ")
    if nameScore.lower() == "stop": break
    students.append(nameScore)

此外,如果您以这种方式编写while - 循环,则无需预先初始化nameScore

答案 1 :(得分:0)

您可以稍微改变程序的流程,并在进入while循环之前让它“填充”输入字符串;这样它会在附加输入之前检查:

students = []
nameScore = input("? ")
while nameScore.lower() != "stop":
    students.append(nameScore)
    nameScore = input ("? ")

students.sort()

for student in students:
    x = student.split()
    print (x[1])

重复一点代码,但它完成了这项任务。

另一种方法是使用list slice删除最后一个元素:

students = []
nameScore = ""
while nameScore.lower() != "stop":
    students.append(nameScore)
    nameScore = input ("? ")

students = students[:-1]    # Remove the last element
students.sort()

for student in students:
    x = student.split()
    print (x[1])

顺便说一句,在Python中不需要围绕while条件的括号。