2016-04-16 12 views
0

Ich habe die Aufgabe, ein Programm zu erstellen, das ein Scantron simuliert, das aus einem ausgeschalteten Zustand eingeschaltet wird. Wenn es einmal eingeschaltet ist, vergleicht es zwei Arrays und zeigt einen Schülergrad basierend auf dem Vergleich des zwei Arrays. Ich bin auch mit dem Erstellen von Klassen beauftragt.Erstellen eines Scantron zum Bewerten eines Tests in Python

Ich kann die Maschine einschalten, aber der Grading-Teil ist, wo ich Probleme habe. Mein Programm sagt mir, dass "richtig ist nicht definiert" in "grade = Answers (correct, student, theGrade)". Ich glaube nicht, dass ich zurückgekehrt bin oder die Variable nicht korrekt übergeben habe. Unten ist der Code. Kann mir bitte jemand helfen ??

#this program creates a scantron grading system 
#the machine will be turned on, scan the correct answers, 
#then will grade the student's answers, and display results 

#start class initializing machine off and then switching on 
class quizGrader: 

#initialize state of machine off 
def __init__(self): 

    self.power = 'Off' 

#create module to ask if the user would like to turn on the machine 
def switch(self): 

    #ask user if they'd like to turn on the machine 
    powerOn = input('Would you like to turn the machine on? (enter Y for yes)') 

    #create if statement for system to be turned on or off 
    if powerOn == 'y' or powerOn == 'Y': 
     self.power = 'On' 

    else: 
     self.power = 'Off' 

def get_power(self): 
    return self.power 

#create class for correct answers, student answers, and 
#for the student's scantron to be graded 
class Answers: 

#initialize the grades 
def __init__(self, correct, student, theGrade): 

    #declare what each self. will be equal to 
    self.__correctAnswers = correct 
    self.__studentAnswers = student 
    self.__studentGrade = theGrade 

#create set method for correctAnswers 
def set_correctAnswers(self, correct): 
    self.__correctAnswers = correct 
    correct = ['A','B','C','D','E','E','D','C','B','A', \ 
       'A','B','C','D','E','E','D','C','B','A'] 
    print('Correct answers have been recorded...') 

    return correct 
#create set method for studentAnswers 
def set_studentAnswers(self, student): 
    self.__studentAnswers = student 
    student = ['B','B','C','D','A','E','D','C','B','A', \ 
       'A','B','C','D','E','E','D','C','B','A'] 

    return student 
#create set method for student's scantron to be graded 
def set_studentGrade(self, theGrade): 
    self.__studentGrade = theGrade 

    right = 0 
    index = 1 

    #create a for loop and if statement for the right answers 
    #to be counted and then calculate the % of the grade 
    for index in range(0,20): 
     if self.__correctAnswers [index] == self.__studentAnswers [index]: 
      right += 1 
      percent = float(right/20) 
      percent = theGrade 

    return theGrade 

#return all the methods previously created 
def get_correctAnswers(self, correct): 
    return self.__correctAnswers 

def get_studentAnswers(self, student): 
    return self.__studentAnswers 

def get_studentGrade(self, theGrade): 
    return self.__studentGrade 

#start main module 
def main(): 

#create an object from the quizGrader class 
machine = quizGrader() 

#display that the machine is off 
print('The machine is powered:', machine.get_power()) 

#ask the user if they'd like to turn the machine on 
machine.switch() 

#display the user's choice to turn on or leave machine powered off 
print('The machine is now/still powered:',machine.get_power()) 

#create an object from the Answers class 
grade = Answers(correct, student, theGrade) 


#display that the correct answers have been recorded and display the answers 
print('Correct answers have been recorded:',grade.get_correctAnswers()) 
print() 
print() 
#display that the student's answers have been recorded and display the answers 
print('Student answers have been recorded:', grade.get_studentAnswers()) 
print() 

#grade the student's answers 
grade.studentGrade() 

#display the amount of answers student answered correctly 
#and the percentage of their grade based on correct answers 
print('The student grade is',right,'out of 20 or',percent,'%.') 

#close main function  
main() 

Antwort

0

Sie haben nicht definiert, was correct oder student oder sogar theGrade sind

grade = Answers(correct, student, theGrade) 

Sie müssen die Klassen instanziiert Sie erstellt haben, aber Sie müssen diese Variablen tatsächlich in der Funktion main() verfügbar haben.

Zum Beispiel:

def main(): 

#create an object from the quizGrader class 
machine = quizGrader() 

correct = ['A','B','C','D','E','E','D','C','B','A', \ 
       'A','B','C','D','E','E','D','C','B','A'] 

student = ['B','B','C','D','A','E','D','C','B','A', \ 
       'A','B','C','D','E','E','D','C','B','A'] 

erhalten Sie ein wenig weiter ... Nur weil man sie in den Klassen oben erklären, bedeutet nicht, sie verfügbar sind.

+0

Danke! Aber ich habe das Array in die Klasse eingefügt, weil ich folgendes erstellen muss: • \t Ein Konstruktor (def __init __ (self) in Python), der einen quizGrader mit einem Anfangszustand von off erzeugt. • \t Eine festgelegte Methode, mit der das Gerät eingeschaltet wird. • \t Eine set-Methode, die ein Array korrekter Antworten initialisiert. • \t Eine set-Methode, die ein Array von Schülerantworten initialisiert. • \t Eine Arbeitsmethode, die Schülerantworten auswertet. • \t Eine get-Methode, die die Anzahl der richtigen Antworten ermittelt. • \t Eine Arbeitsmethode, die die Anzahl der richtigen Antworten anzeigt. – Rozay

+0

Sie sollten Klassenmitglieder setzen, anstatt zu versuchen, sie im Konstruktor – tenCupMaximum

+0

zu übergeben, danke für die Hilfe. Ich habe es behoben, aber immer noch Probleme mit dem Aufruf der zu benotenden Listen. – Rozay

0

Die Variable correct ist in Ihrem main Funktion nicht definiert.

Zum Beispiel könnten Sie einfach die Zeile correct = 'C' vor der Zeile grade = Answers(correct, student, theGrade) hinzufügen, um zu zeigen, dass die richtige Antwort C ist.

Das fertige Produkt wie folgt aussehen würde:

... 
correct = 'C' 
grade=Answers(correct, student, theGrade) 
... 
Verwandte Themen