这是我正在为一个班级工作的问题(下面是我的问题和我写的代码):
该计划应接受一系列学生及其考试成绩以回应 “?”提示。输入两位数的考试成绩(没有人得到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])
答案 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条件的括号。