grader.sh
は、学習者が提出ボタンをクリックすると実行され、grader.sh
からgrader.py
が実行されて採点が始まります。grader.py
を作成するためによく使用されるelice_utils.pyの関数について、一般的な形式とともに説明します。
secure_send_grader()
: ユーザーにメッセージをターミナル経由で出力します。
secure_send_score()
: 実習の最終得点を設定します。
Copy from grader_elice_utils import EliceUtils
elice_utils = EliceUtils ()
elice_utils . secure_init () # elice_utilsをインポートして初期化します。
try : # 採点を実行します。
elice_utils . secure_send_grader ( '文字列' ) # 学習者のターミナルウィンドウに文字列を送信します。
elice_utils . secure_send_score ( 100 ) # 学習者の実習の得点を送信します。100点を獲得した場合、正解のウサギがポップアップします。
except Exception : # 採点のプロセス中にエラーが発生した場合
elice_utils . secure_send_score ( 0 ) # 実習の得点を0点に設定します。
sys . exit ( 1 )
grader.py
を変更して、さまざまな方法で学生のコードを採点できます。
以下の例を通じて、grader.py
の作成方法を確認できます。
grader.py
を作成する際に注意する点は次のとおりです。
注意事項1
場合によっては、if文を使用して値を比較する際に、形式や形状が一致していない値を比較するとTypeError、RangeErrorなどのエラーが発生することがあります。この場合、Graderはすぐに動作を停止し、正常な採点が行われなくなります。そのため、if文を使用する場合は、次のコードのような形式を使用することをお勧めします。
Copy try :
if (submission . drink_relfreq == drink [ drink [ 'Attend' ] == 1 ] [ 'Name' ] . value_counts (normalize = True ) ) . all () :
total_score += 100
elice_utils . secure_send_grader ( '相対頻度を正しく計算しました!\n' )
except Exception :
elice_utils . secure_send_grader ( '相対頻度が正しく計算されませんでした。もう一度計算してみましょう。\n' )
注意事項2
状況に応じて、具体的なエラーメッセージを明示する必要がある場合があります。その場合は、内部例外を使用してメッセージを作成してください。Pythonの内部例外については、次のリンクを参照してください。https://docs.python.org/ko/3/library/exceptions.html#concrete-exceptions
Copy import student_codes
try :
if student_codes . answer == 12 :
total_score += 100
elice_utils . secure_send_grader ( '正解です!\n' )
# index range error
except IndexError :
elice_utils . secure_send_grader ( 'インデックスが指定された範囲を超えています。\n' )
# name error
except NameError :
elice_utils . secure_send_grader ( '未定義の変数を使用しました。\n' )
# zero division error
except ZeroDivisionError :
elice_utils . secure_send_grader ( '0で割ることはできません。\n' )
注意事項3
採点時に発生したランタイムエラーメッセージを学生に提供すると、学生がメッセージの内容をもとにテストケースを漏洩させる可能性があります。そのため、次のような形式でエラーメッセージを作成することをお勧めします。
Copy # 非推奨の場合
try :
# 採点コードの作成
except Exception as err :
elice_utils . secure_send_grader ( 'Internal Error:\n %s \n' % str (err))
elice_utils . secure_send_score ( 0 )
sys . exit ( 1 )
# 推奨される方法
try :
# 採点コードの作成
except Exception :
elice_utils . secure_send_grader ( '採点中にエラーが発生しました。コードが正常に実行されているか確認してください。\n' )
elice_utils . secure_send_score ( 0 )
sys . exit ( 1 )
"""
もし、非推奨の場合で採点コードを書いた場合は?
"""
# grader.pyの全文を出力可能
raise Exception ( open ( '.elice/grader.py' ). read ())
Last updated 5 months ago