対象
これからプログラミングを学びたい、けど何からやればいいかわからない。
そういう人はまず「動かす場所を用意」して「動いているところを見る」のがいいと思う。
この記事は「paizaで問題を解く」ことを前提に、「Pythonのソースファイルを動かす」ことをゴールとして書く。paizaが目的でなければ適宜読み替えてほしい。Eclipseを選んでいる理由は「まとまってて導入が簡単」「実行するのが簡単」「日本語で使える」という点。
標準入力への値の設定方法だけ確認する場合、ソース解説だけ見てもらえばいい。
環境
・Windows10
・Eclipse2021
・Python3.9.5
目次
1. 下準備
2. ダウンロード
3. インストール
4. プロジェクト作成
5. 動作確認
6. ソース解説
7. おわり
下準備
これから作業するフォルダを作っておく。
どんな名前でもいいが「半角文字」で「わかりやすく」しておこう。
ダウンロード
下記3つのものをダウンロードする。
・7zip(持っていれば不要)
・Eclipse
・get-pip
「eclipse」で検索すればだいたいトップに来る。「Java」と書かれているがPython版も同じページにあるので問題ない。
移動先の最初に7zipへのリンクがある。
必要があれば新しいタブで開いておこう。
少し下にスクロールすると様々なバージョンのダウンロードリンクがある。
今回はPythonのWindows、Full Editionを選ぶ。
7zipの方はこんな感じ。自分の環境にあったものを選ぼう。わからなければ一番上で。
最後にget-pipだが、手順上後回しにしてもいい。
eclipse本体の解凍にそこそこ時間がかかるため。→いったん飛ばす
get-pip
「get pip python」で検索すると上の方に来ると思う。
ページの中ほどに「get-pip.py」の項目があるので、リンクから保存する。
インストール
以下の手順で行う。
1. 7zipをインストール
2. Eclipse(pleiades)を解凍
3. pipをインストール
まず7zipをインストールする。
ダウンロードした7zipのファイルをダブルクリックすればいい。
7zipをインストールすると、右クリックから「7zip」が選べるようになる。
ダウンロードしたEclipse(pleiades~)の圧縮ファイルを右クリックして、
7zip -> 展開… を選ぶ。
ウィンドウが出てくるので、好きなフォルダを選んで解凍する。
ここでは最初に作ったPythonフォルダを選んでいる。
※2段目のテキストは作成フォルダ名だが、短くしておいてもいい。実際後で短くした。
OKを選ぶと解凍が始まる。これが結構時間がかかる(10分くらい)。
そのため飛ばした人はここでpipをダウンロードしよう。pipダウンロード
解凍が終わればEclipse自体のインストールは完了。もう使えるのだが、Windows環境だとなぜかpipが使えないままらしい。先にpipをインストールする。
pipとは?
ダウンロードした「get-pip.py」をpython/3フォルダにコピーする。
[解凍フォルダ/pleiades/python/3/]
コマンドプロンプトを起動して、python/3フォルダに移動する。
cd [get-pip.pyを置いたフォルダ]
確認のためdirコマンドを打ちpython.exeとget-pip.pyがあることを確認する。
dir
そして下記コマンドを実行する。
python.exe get-pip.py
インストールが終わると「Successfully」が表示される。
表示されている警告は「環境変数にないけどいいのか?」という意味。Eclipse上でしかPythonを使わないのであれば特に問題はない。
これでインストールは完了。
プロジェクト作成
これからはEclipse内での作業になる。
Eclipseは[解凍フォルダ/pleiades/eclipse]フォルダの中にある。
毎回開くのでショートカットをどこかに作っておくといいだろう。
初回のみコマンドプロンプトが立ち上がるので、何かキーを押して終了させる(エンターキーとか)。
Eclipseは開くときにワークスペース(作業の保存場所)を聞いてくる。
Eclipseで作業したものはすべてそこに保存されるので、わかりやすい場所を選ぶ。
せっかくなのでここでは[paiza]というフォルダを作りそれを選ぶ。
Eclipseが起動したら、pipが適用されていることを確認する。
上のメニューバーから[ウィンドウ]>[設定]を選び、
[PyDev]>[インタープリター]>[Pythonインタープリター]を選び、pipが表示されていることを確認する。
いよいよプロジェクトを作っていく。左側のパッケージエクスプローラーで右クリック
[新規]>[プロジェクト]を選択。
汎用的なPythonプロジェクトを作る。
[PyDev]>[PyDevプロジェクト]を選び[次へ]を選択。
プロジェクト名を「paiza」にして、srcフォルダ作成を選択。(自由)
完了を押すとpaizaフォルダとsrcフォルダが作られる。
この中でソースコードを作っていく。
ソースファイルはすべてsrcフォルダの中、それ以外のファイルはsrcフォルダの外で管理するのが基本。
srcフォルダの中でフォルダ分けしたいときは[PyDevパッケージ](フォルダ)を作る。その中に[PyDevモジュール](ソースファイル)を作成する。
テキストファイルなどソース以外のものを作るときは[フォルダー][ファイル]を選ぶ。
右クリックでフォルダー・パッケージを選んでいると、その中に指定したものが作られる。
[PyDevモジュール]を作成したときは「モジュール:メイン」を選ぶ。
サンプルとして以下のようなフォルダ構成とする。
paiza
┣ src
┃ ┣ callSkillcheckMethod.py
┃ ┗ skillCheck
┃ ┗ rankC
┃ ┗ sample.py
┗ data
┗ input
┗ skillCheckData
動作確認
実際に動かしてみる。
まず動くものを作らないといけない。
[sample.py]と[callSkillcheckMethod.py]を以下のように作る。
def main():
input_line = int( input() )
for _ in range( input_line ):
s = input().rstrip().split( ' ' )
print( "hello = " + s[0] + " , world = " + s[1] )
if __name__ == '__main__':
main()
import sys
import time
from skillCheck.rankC import sample as target
def main():
f = open( '../../data/input/skillCheckData', 'r' )
sys.stdin = f
# 処理前の時刻
t1 = time.time() * 1000
print( "===================== start =====================" )
target.main()
print( "===================== end =====================" )
# 処理後の時刻
t2 = time.time() * 1000
# 経過時間を表示
elapsed_time = int( t2 - t1 )
print( f"経過時間:{elapsed_time} ms" )
if __name__ == '__main__':
main()
sample.pyはpaizaのサンプルコード。
データの方にサンプルの入力値を設定する。
2
2 5
3 4
保存したら実行してみる。
実行はパッケージエクスプローラーから[callSkillcheckMethod.py]を右クリック、「[実行]>[Python実行]」を選ぶ。
ウィンドウ下部にコンソールが出てきて、実行結果が表示されるはず。
実行の方法は記録として残るため、2回目以降の実行は上部アイコンの緑色の三角を押せば[callSkillcheckMethod.py]が実行される。
新しい問題に挑戦するときは[sample.py]と同じように新しくファイルを作って保存。[callSkillcheckMethod.py]のインポートだけ直せば、同じように実行して新しい方が呼び出される。
from [新しいソースのパッケージ] import [新しいソース] as target
ソース解説
[callSkillcheckMethod.py]の中身について軽く触れておく。
from skillCheck.rankC import sample as target
import
で自分で作ったソースコードを読み取ることができる。
from
はどこのパッケージから読み取るかを指定している。”.”でフォルダの区切りを表していて、既定の場所を始点にしている。プロジェクト作成の時「srcフォルダを作ってPATHに加える」を選んでいるので、始点としてsrcフォルダを使うことができる。
as
はインポートしたものを使うときの名前を指定する。これによりどんな名前のものをインポートしても"target"として使うことができる。
f = open( '../../data/input/skillCheckData', 'r' )
sys.stdin = f
テキストファイルを読み込んで標準入力に設定している。
open('ファイル名', '実行モード')
でファイルを指定して読み込んでいる。実行モードは省略可能。
sys.stdin
で標準入力を表している。ここに読み込んだファイルf
を設定することで、あたかも標準入力で値が渡されたようにしている。
target.main()
target
はインポートした自作の処理。target.main()
でそのメイン関数を実行している。コンソールは共通なので、target
の出力もコンソールに表示される。
# 処理前の時刻
t1 = time.time() * 1000
# 処理後の時刻
t2 = time.time() * 1000
# 経過時間を表示
elapsed_time = int( t2 - t1 )
print( f"経過時間:{elapsed_time} ms" )
time.time()
は現在時刻を’秒’を整数として取得する。×1000をしているのでミリ秒として変数に保存している。
処理前と処理後に現在時刻を取ることで、引き算で経過時間を取得することができる。
print(f"...{変数名}...")
でprintで表示する文字列中に変数を割り込ませることができる。
if __name__ == '__main__':
main()
この2行はなくてもエラーにはならない。が、消すと何もしなくなる。
Pythonはファイルを指定して実行されると、ファイルの1行目から順番に処理をしていく。それはインポート時に読み込んだタイミングでも起動されるようになっている。
そのため、むやみな実行を回避するために処理をすべてdef
の中に書き(関数化し)、読み込み時には全部スキップさせ最後にif
で「もし”main”として呼ばれていたら」という条件にすることで、「これは自分が呼び出された」という意味にして判断させている。
おわり
テキストファイルを入力として、何度も処理を実行するのが手間だったため、1つ呼出用の処理を作ることで手間を軽減させた。別にやろうと思えば実行の構成から入力ファイルを設定して対象のファイルを直接実行することもできる。だが修正が面倒なため(構成画面を開かないといけない)この方法に行きついた。
プログラミング学習では処理の動きを実際に見ることが重要。paizaに関していえば〇か×かの判定だけではなく、値を変えた時どのタイミングで何が起きているのか、気になる部分にprint関数を仕込んで、コンソールで見てみると理解が深まる。
以上です。