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 )
場合によっては、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' )
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' )
採点時に発生したランタイムエラーメッセージを学生に提供すると、学生がメッセージの内容をもとにテストケースを漏洩させる可能性があります。そのため、次のような形式でエラーメッセージを作成することをお勧めします。
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 ())