我正在尝试对字典进行排序,"最高"和"平均"从最高到最低,但我无法从文本文件中获取字典。我不确定我是否应该使用数组,或者是否有解决方法?
这是我的代码:
import random
score = 0
print("Hello and welcome to the maths quiz!")
while True:
position = input("Are you a pupil or a teacher?: ").lower()
if position not in ("teacher","pupil"):
print ("Please enter 'teacher' or 'pupil'!")
continue
else:
break
if position == 'pupil':
your_name = ""
while your_name == "":
your_name = input("Please enter your name:") # asks the user for their name and then stores it in the variable name
class_no = ""
while class_no not in ["1", "2", "3"]:
class_no = input("Please enter your class - 1, 2 or 3:") # Asks the user for an input
score = 0
for _ in range(10):
number1 = random.randint(1, 11)
number2 = random.randint(1, 11)
operator = random.choice("*-+")
question = ("{0} {1} {2}".format(number1,operator,number2))
solution = eval(question)
answer = input(question+" = ")
if answer == str(solution):
score += 1
print("Correct! Your score is, ", score , )
else:
print("Your answer is not correct")
class_no = ("Class " + class_no + ".txt")
print("Congratulations {0}, you have finished your ten questions!".format(your_name))
if score > 5:
print("Your total score is {0} which is over half.".format(score))
else:
print("Better luck next time {0}, your score is {1} which is lower than half".format(your_name, score))
with open(class_no, "a") as Student_Class:
Student_Class.write(your_name)
Student_Class.write(",")
Student_Class.write(str(score))
Student_Class.write("\n")
else:
while True:
Group = input("Which class would you like to view first? 1, 2 or 3?: ")
if Group not in ("1", "2", "3"):
print ("That's not a class!")
continue
else:
break
Group = ("Class " + Group + ".txt")
while True:
teacherAction = input("How would you like to sort the results? 'alphabetical', 'highest' or 'average'?: ").lower() # Asks the user how they would like to sort the data. Converts answer into lower case to compare easily.
if teacherAction not in ("alphabetical","highest","average"):
print ("Make sure you only input one of the three choices!")
continue
else:
break
with open (Group, "r+") as scores:
PupilAnswer = {}
for line in scores:
column = line.rstrip('\n').split(',')
name = column[0]
score = column[1]
score = int(score)
if name not in PupilAnswer:
PupilAnswer[name] = []
PupilAnswer[name].append(score)
if len(PupilAnswer[name]) > 3:
PupilAnswer[name].pop(0)
if teacherAction == 'alphabetical':
for key in sorted(PupilAnswer):
print(key, PupilAnswer[key])
elif teacherAction == 'highest':
highest = {}
for key, value in PupilAnswer.items():
maximum = max(value)
highest[key] = maximum
for key in sorted(highest, key=highest.get, reverse=True):
print (key, highest[key])
else:
for name in sorted(PupilAnswer):
average = []
for key in (PupilAnswer[name]):
average.append(key)
length = len(average)
total = 0
for key in (average):
total = total + (key)
totalAverage = (total)/length
print (name, totalAverage)
print ("Thank you for using the quiz!")
input("Press 'enter' to exit!")