0

这是我正在为一堂课解决的问题(以下是我的问题和我编写的代码):

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

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

所以我理解我所写的一切,我明白这不是一个特别复杂的问题。虽然,按照我的代码编写方式,当我输入“stop”以显示我已完成输入的程序时,它会在 for 循环中运行输入“stop”,从而创建索引超出范围错误。我怎样才能让它只在while循环中而不是在for循环中运行“停止”?

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

    students.sort()

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

2 回答 2

1

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

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

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

于 2013-05-14T01:36:07.197 回答
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])

有点代码重复,但它完成了工作。

另一种方法是使用列表切片删除最后一个元素:

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 条件周围的括号不是必需的。

于 2013-05-14T01:35:29.477 回答