Для моей работы я должен иметь возможность сортировать оценки пользовательской викторины в текстовом файле по алфавиту. Когда я однако использовать:Ошибка при сортировке текстового файла по алфавиту
with open(filename, 'a') as f:
f = open(filename, "r")
lines = [line for line in f if line.strip()]
f.close()
lines.sort()
, а затем распечатать результаты с помощью оболочки Python, когда пользователь запрашивает я использовал:
if get_bool_input("Do you wish to view previous results for your class"):
with open(filename, 'r') as f:
print(f.read())
Однако это не сортирует результаты, но держит их в том порядке, они были представлены, как показано здесь:
Do you wish to view previous results for your classyes
Kyle : 4
Dan : 0
Jana : 0
Kyle : 0
Kyle : 0
Kyle : 9
Kyle : 6
Bob : 2
Bobby : 1
Kyle : 1
Kyle : 0
Kyle : 1
Kyle : 10
Bobby Mclobby : 7
Bobby Mcdobby : 5
Kyle Cliffe : 9
Вот весь код для тех, кто интересно:
import random
import operator
OPERATIONS = [
(operator.add, "+"),
(operator.mul, "*"),
(operator.sub, "-")
]
NB_QUESTIONS = 10
def get_int_input(prompt=''):
while True:
try:
return int(input(prompt))
except ValueError:
print("Not a valid input (integer is expected)")
def get_bool_input(prompt=''):
while True:
val = input(prompt).lower()
if val == 'yes':
return True
elif val == 'no':
return False
else:
print("Not a valid input (yes/no is expected)")
if __name__ == '__main__':
name = input("What is your name?").title()
class_name = input("Which class do you wish to input results for? ")
print(name, ", Welcome to the OCR Controlled Assessment Maths Test")
score = 0
for _ in range(NB_QUESTIONS):
num1 = random.randint(1,25)
num2 = random.randint(1,25)
op, symbol = random.choice(OPERATIONS)
print("What is", num1, symbol, num2)
if get_int_input() == op(num1, num2):
print("Correct")
score += 1
else:
print("Incorrect")
print("Well done", name, "you scored", score, "/", NB_QUESTIONS)
filename = class_name + ".txt"
with open(filename, 'a') as f:
f.write(str(name) + " : " + str(score) + '\n')
with open(filename, 'a') as f:
f = open(filename, "r")
lines = [line for line in f if line.strip()]
f.close()
lines.sort()
if get_bool_input("Do you wish to view previous results for your class"):
with open(filename, 'r') as f:
print(f.read())
else:
input ("Press any key to exit")
Параметр 'with' конструкция открывает и присваивает дескриптор переменной' F 'в этом случае. Вы не должны этого делать: 'f = open (имя файла,« r »)' внутри 'with'. – ssundarraj