2016-04-16 10 views
0

scantronをオフ状態からオンにして、それをオンにすると2つの配列を比較し、その比較に基づいて学生の等級を表示するプログラムを作成することになります。 2つのアレイ。私はクラスの作成も担当しています。Scantronを作成してPythonでテストを評価する

私はマシンの電源を入れることができますが、グレーディング部分は私が問題を抱えているところです。私のプログラムは、「グレード=アンサー(正しい、学生、グレード)」で「正しいが定義されていません」と伝えています。私は戻ったり、変数を正しく渡さなかったと思います。以下はコードです。誰でも助けてもらえますか?

#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() 

答えて

0

をあなたが作成したクラスをインスタンス化する必要がある

grade = Answers(correct, student, theGrade) 

あり、 main()関数でこれらの変数を実際に使用できるようにする必要があります。例えば

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'] 

は、あなたが上記のクラスでそれらを宣言するという理由だけで、彼らが利用可能だという意味ではありません ...少し遠くあなたを取得します。

+0

ありがとうございます!私は以下を作成する必要があるので、クラスに配列を配置します:•\t初期状態がoffのクイズグリッドを作成するコンストラクタ(Pythonではdef __init __(self))。 •\tマシンの電源を入れる設定方法。 •\t正解の配列を初期化する設定メソッド。 •\t生徒の回答の配列を初期化する設定メソッド。 •\t生徒の回答に等級付けを行う作業方法。 •\t正解の数を取得するgetメソッド。 •\t正解の数を表示する作業方法。 – Rozay

+0

クラスメンバーをコンストラクタで渡すのではなく、 – tenCupMaximum

+0

助けてくれてありがとう。私はそれを修正しましたが、評定を呼び出す際に問題を抱えていました。 – Rozay

0

変数correctはあなたのmain関数内で定義されていません。

たとえば、grade = Answers(correct, student, theGrade)の前に行correct = 'C'を追加すると、正しい回答がCであることがわかります。

完成した製品は、このようなものになります。あなたは何correctまたはstudentあるいはtheGradeを定義していない

... 
correct = 'C' 
grade=Answers(correct, student, theGrade) 
... 
関連する問題