調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

Paizaスキルチェックのエディタが微妙な感じなので少し簡単になるようにテンプレートのコードを書いてみた

なにがどうなって。

・Paizaさん提供のスキルチェックを頻繁に利用している。
・主にPython3で遊んでるけど、備え付けのエディタが微妙(後述)
・とりあえずVSCODEでコード書きたいし、そのままコピペで提出できたら楽だよね←つくろう。
・すきるちぇっく:https://paiza.jp/challenges

つくったやつ

github.com

備え付けのエディタが微妙

そもそも他のエディタなり使ったほうがよいよ。的なことが書いてあるからそうするのがベター

問題1:「デバッグ実行」できないところ。

さっと作って、そのまま通せるコードが書ければいいけど、
詰まって途中のデータ等が参照したくても気合でprint()デバッグが必要
(ほかにいいやり方があれば・・・unittest作ればそれでもいけるかもしれない。もしかしたらそうしろということかもしれない。)

問題2:「標準入力」に少々癖がある。

仕様読めばいいんだけど。
https://paiza.jp/guide/samplecode
僕は上のを読んでも久々にやると解釈間違ってて実際の問題とは別のとこで詰まって「ぐぬぬ」ってなってた。

微妙だなーと思うのはこの2点。スキルチェックは問題に対してコーディングするとこがメインのはずだけど、
上の2点はそことは直接関係なくて詰まるのでしんどい。ならその辺はあらかじめ書いとけば楽だと思ったので作ったしだい。

ソース全部と個別の感想

コードは上に張っているのと一緒。

import unittest
class Output():
    # 入力例
    input_lines = [3,28,16,777]
    # テスト結果
    expected = "perfect\nnearly\nneither"
    @staticmethod
    def main():     
        out = Output()
        print(out.mainlogic())

    def mainlogic(self):      
        try:
            result = ""
            #mainlogic
            return result
        except Exception as e:
            print(e)        

    input_lines_cursor = 0
    def input(self):
        self.input_lines_cursor += 1
        return self.input_lines[self.input_lines_cursor-1]

# 提出前確認用テストコード
class Testlogic(unittest.TestCase):
    def test_logic(self):
        actual = Output()
        self.assertEqual(Output.expected, actual.mainlogic())

if __name__ == "__main__":
    unittest.main()
    #Output.main()
テストのインポートとメインのロジック
import unittest
class Output():
    # 入力例
    input_lines = [3,28,16,777]
    # テスト結果
    expected = "perfect\nnearly\nneither"

unittest用の値。内容は課題に応じて直す想定
ここの作りがびみょい。。。課題からコピペしてそのまま使えるのが
一番だけど、いまはちまちま「”」つけたりしないといけない。

かんばればselenium君で引っ張ってこれないかなーなんて。

標準入力input()
    input_lines_cursor = 0
    def input(self):
        self.input_lines_cursor += 1
        return self.input_lines[self.input_lines_cursor-1]

問題2の標準入力用のメソッド。
paizaでは input() の記述で入力値を受け取れる。
input()を呼び出すたびにどんどんキューから取り出すイメージ(System.IO.Streamreaderのreadlineのイメージ)
パッと仕様をわすれてもソースみれば大体思い出せるでしょう。

ローカルで使用するには「self.input()」と記載する必要があって、
Paiza側に提出するときはselfを外さないといけないのであんまり・・・
うまいこと「self」を無視できないかもう少し詰めたいな。

テスト
# 提出前確認用テストコード
class Testlogic(unittest.TestCase):
    def test_logic(self):
        actual = Output()
        self.assertEqual(Output.expected, actual.mainlogic())

if __name__ == "__main__":
    unittest.main()
    #Output.main()

コメントの通り。上で定義しているとこを比較してるだけ。
mainはLocalで確認してる最中はunittest、提出するときはmainの方を動かすようにコメントを調整しないといけない。

所感

だいぶ書きやすくはなったけど、まだ課題が残っててもうちょっと改造したい。
あとは頻繁にでてくる input().split()とかも置いておけばサクサクいけるかなー。
手直しはいるけど、このぐらいワシワシ書いててもコピペでそのまま動くんだから微妙といいつつpaizaのエディタすごいよなーとも思った。