being a beginner to python I am just starting to come to terms with it. as part of an assignment I have been asked to create a quiz for a teacher who has 3 classes. The quiz consists of 10 question, randomly generated, which should be saved by class, I chose to use a database for this. the teacher should then be able to sort the scores in
- alphabetical order with each student’s highest score for the tests
- by the highest score, highest to lowest
- by the average score,highest to lowest.
The code below is what I have gotten so far. I am asking for any suggestion or ideas on how I could create,add and/or improve my code to meet the criteria.
I know there is errors, so please take it easy. Any help is very much appreciated
import random, sqlite3, os
def inputName():
userName = str(input("Please enter your full name: "))
if userName == "":
print("An error occured! Please enter your full name!", "\n")
inputName()
elif userName.isdigit():
print("An error occured! Please only include letters in your name!")
userName = None
inputName()
else:
return userName
def randomQuiz():
score = int(0)
num_question = int(0)
while num_question < int(11):
ops = {
'+': op.add,
'-': op.sub,
'*': op.mul,
}
keys = list(ops.keys())
rand_key = random.choice(keys)
operation = ops[rand_key]
num1 = random.randint(1, 10)
num2 = random.randint(1, 10)
correct_result = operation(num1, num2)
print ("What is {} {} {}?".format(num1, rand_key, num2))
while True:
try:
user_answer = int(input("Your answer: "))
except ValueError:
print("Only enter numbers!")
continue
else:
break
if user_answer != correct_result:
print ("Incorrect. The right answer is {}".format(correct_result))
num_question = num_question + int(1)
return False
else:
print("Correct!")
num_question = num_question + int(1)
score = score + int(1)
return True
score = 0
num_questions = 10
for i in range(num_questions):
if test():
score +=1
print("{}: You got {}/{} correct.".format(userName, score, num_questions))
return score
def inputClass():
userClass = input("Please specify if you are in class 1, class 2, or class 3: ")
try:
userClass = int(userClass)
except ValueError:
print("An error occured, please enter the corresponding number if you are in class 1, class 2, or class 3!","\n")
inputClass()
if userClass == 1:
userClass = str("Class 1")
elif userClass == 2:
userClass = str("Class 2")
elif userClass == 3:
userClass = str("Class 3")
else:
print("An error occured, please enter the corresponding number if you are in class 1, class 2, or class 3!","\n")
userClass = None
inputClass()
return userClass
def createDatabase():
if os.path.exists("ArithmeticQuizScores.db") == False: #checks if file doesn't exists
makeFile = open("ArithmeticQuizScores.db", "w") #if not, then it will create one
makeFile.close()
else:
return True
def createTable():
makeTableInDatabase = sqlite3.connect("ArithmeticQuizScores.db")
editDatabase = makeTableInDatabase.cursor()
editDatabase.execute("""CREATE TABLE IF NOT EXISTS Class1StudentsScores (studentName text, studentClass text, studentScore1 text, studentScore2 text, studentScore3 text)""")
editDatabase.execute("""CREATE TABLE IF NOT EXISTS Class2StudentsScores (studentName text, studentClass text, studentScore1 text, studentScore2 text, studentScore3 text)""")
editDatabase.execute("""CREATE TABLE IF NOT EXISTS Class3StudentsScores (studentName text, studentClass text, studentScore1 text, studentScore2 text, studentScore3 text)""")
makeTableInDatabase.commit()
editDatabase.close()
def addFirstData(studName, studClass, studScore):
value = [studName, studClass, studScore]
OpenDatabase = sqlite3.connect("ArithmeticQuizScores.db")
addToDatabase = OpenDatabase.cursor()
if studClass == str("Class 1"):
addToDatabase.execute('''INSERT INTO Class1StudentsScores ("studentName", "studentClass", "studentScore1") VALUES (?, ?, ?)''', value)
elif studClass == str("Class 2"):
addToDatabase.execute('''INSERT INTO Class2StudentsScores ("studentName", "studentClass", "studentScore2") VALUES (?, ?, ?)''', value)
else:
if studClass == str("Class 3"):
addToDatabase.execute('''INSERT INTO Class3StudentsScores ("studentName", "studentClass", "studentScore1") VALUES (?, ?, ?)''', value)
OpenDatabase.commit()
addToDatabase.close()
def addSecondData(StudN, StudS):
value2 = [StudN, StudS]
OpenDB = sqlite3.connect("ArithmeticQuizScores.db")
addToDB = OpenDB.cursor()
if StudC == ("Class 1"):
addToDB.execute('''INSERT INTO Class1StudentsScores ("studentName","studentScore2") VALUES (?, ?)''', value2)
elif studClass == ("Class 2"):
addToDB.execute('''INSERT INTO Class2StudentsScores ("studentName","studentScore2") VALUES (?, ?)''', value2)
else:
if studClass == ("Class 3"):
addToDB.execute('''INSERT INTO Class3StudentsScores ("studentName","studentScore2") VALUES (?, ?)''', value2)
OpenDB.commit()
addToDB.close()
def checkIfScore(SClass, SName, sScore):
GetConnection = sqlite3.connect("ArithmeticQuizScores.db")
GetCursor = GetConnection.cursor()
if SClass == str("Class 1"):
GetCursor.execute("SELECT * FROM Class1StudentsScores ORDER BY studentName ASC")
CheckName = GetCursor.fetchall()
for row in CheckName:
if row[0] == SName:
if row[2] is not None:
return addSecondData(SName, SClass, sScore)
else:
return addFirstData(SName, SClass, sScore)
else:
return addFirstData(SName, SClass, sScore)
elif SClass == str("Class 2"):
for row in CheckName:
if row[0] == SName:
if row[2] is not None:
return addSecondData(SName, SClass, sScore)
else:
return addFirstData(SName, SClass, sScore)
else:
return addFirstData(SName, SClass, sScore)
else:
if SClass == str("Class 3"):
for row in CheckName:
if row[0] == SName:
if row[2] is not None:
return addSecondData(SName, SClass, sScore)
else:
return addFirstData(SName, SClass, sScore)
else:
return addFirstData(SName, SClass, sScore)
def Quiz():
name = inputName()
Class = inputClass()
score = randomQuiz()
makeDB = createDatabase()
makeT = createTable()
addData = checkIfScore(name, Class, score)
Quiz()
Aucun commentaire:
Enregistrer un commentaire