I have been programming a maths quiz that can be used for teachers and I have have been trying to make the code as short as possible so it is easier to understand.
If there is any way I could make it more concise, please tell me and explain the programming behind it.
import sys import random def get_bool_input(prompt=''): while True: val = input(prompt).lower() if val == 'yes': return True elif val == 'no': return False else: sys.exit("Not a valid input (yes/no is expected) please try again") status = input("Are you a teacher or student? Press 1 if you are a student or 2 if you are a teacher") if status == "1": score=0 name=input("What is your name?") print ("Alright",name,"welcome to your maths quiz") level_of_difficulty = int(input(("What level of difficulty are you working at?\n" "Press 1 for low, 2 for intermediate " "or 3 for high\n"))) if level_of_difficulty not in (1,2,3): sys.exit("That is not a valid level of difficulty, please try again") if level_of_difficulty == 3: ops = ['+', '-', '*', '/'] else: ops = ['+', '-', '*'] for question_num in range(1, 11): if level_of_difficulty == 1: number_1 = random.randrange(1, 10) number_2 = random.randrange(1, 10) else: number_1 = random.randrange(1, 20) number_2 = random.randrange(1, 20) operation = random.choice(ops) maths = round(eval(str(number_1) + operation + str(number_2)),5) print('\nQuestion number: {}'.format(question_num)) print ("The question is",number_1,operation,number_2) answer = float(input("What is your answer: ")) if answer == maths: print("Correct") score = score + 1 else: print ("Incorrect. The actual answer is",maths) if score >5: print("Well done you scored",score,"out of 10") else: print("Unfortunately you only scored",score,"out of 10. Better luck next time") class_number = input("Before your score is saved ,are you in class 1, 2 or 3? Press the matching number") if class_number not in ("1","2","3"): sys.exit("That is not a valid class, unfortunately your score cannot be saved, please try again") else: filename = (class_number + "txt") with open(filename, 'a') as f: f.write("\n" + str(name) + " scored " + str(score) + " on difficulty level " + str(level_of_difficulty)) 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"): for line in lines: print (line) else: sys.exit("Thanks for taking part in the quiz, your teacher should discuss your score with you later") if status == "2": class_number = input("Which classes scores would you like to see? Press 1 for class 1, 2 for class 2 or 3 for class 3") if class_number not in (1,2,3): sys.exit("That is not a valid class") filename = (class_number + "txt") with open(filename, 'a') as f: f = open(filename, "r") lines = [line for line in f if line.strip()] f.close() lines.sort() for line in lines: print (line)