パンダの休日

雑多な書き残し

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Python 備忘録で検索すると同じような記事やらブログやらが何百件も引っかかるんですが、他所様とダブリまくりなのは承知の上で備忘録。
Pythonを触り始めた頃の自分が見たら役に立てるだろう、という感じの内容で書いておきます。
Python初心者かつプログラミング初心者が勉強しながらのメモ書きなので信憑性は全く保証できません。
環境はPython3.4.1、Windows7 64bitです。
内容は随時更新します。(最終更新日2014/11/10)


★ Pythonのバージョン。
 2.7でいい。3系列は非対応のライブラリが多く挫折。
 2.7は文字列の扱いが面倒臭いので3に移行した。
 有名ライブラリも多くが対応し始めている。
 2から3への移行が難しいために否定的な意見を見かけるが、趣味グラマーの使い勝手では3が良い。

★ インストールに関して
 公式サイトからDLしたインストーラーでインストール
 インストール時に「パスを通す」設定を有効にする。
 パスを通すとコマンドプロンプト上でどのディレクトリにいてもパスの通っている場所のプログラムを参照できる。
 easy_install(またはdistribute)
  外部のライブラリを入れるのに使う。
  インストールはここに分かりやすく書かれている。
  easy_installはexeなのでScriptにパスを通すかcdするかして実行する。
  ***追記***
   Python 3.4以降ではpipが標準でついてくるのでeasy_installは必要ない。
   Pythonのインストール時にパスを通す設定になっていればコマンドプロンプトにpipと入れるだけで使える。
 コマンドプロンプトのプロパティで作業フォルダーを指定すると楽。
 今のところ開発環境はPyscripterが初心者向けで使いやすい。
 Pyscripterは初期設定ではutf-8でファイルが保存されないのでツール→オプション→IDEオプション内の
 default file encoding for new file をutf-8にしておく。同じくIDEオプション内Auto complete with one entryもオフがお勧め。


★ 個人的に役に立ったもしくはよく使うライブラリ
 math(標準)
 os(標準)
 time(標準)
 tkinter(標準)
 random(標準)
 shelve(標準)
 subprocess(標準)
 sys(標準)
 guippy
 Pillow


★ 小ネタ
 ・コーディング規約というものがあり、後からとても気になることになるのでまず"PEP8"を読む。

 ・整数の桁数が欲しい場合にlen(str(数値))

 ・test.pyというファイルは作らない方が良い。

 ・文字列はリスト同様にn番目の文字を拾うことができる。
>>>"abc"[0]    # -> "a" 


 ・リストにマイナスで後ろから数えられる。
>>>[0, 1, "a", "Hello"][-1]    # -> "Hello"


 ・関数などの使い方が分からなければ対話モードでhelp(分からないモノ)

 ・dir(A)でAが使えるメソッド(A.***)を表示できる。

 ・良く使う関数などは普段使うディレクトリにmytools.py的な道具入れに作っておいてインポートして使うと便利。

 フォルダーにスクリプトを作りフォルダーのあるディレクトリからインポートする場合
>>>from フォルダー名 import スクリプト名
#フォルダー内に__init__.py(空でも可)があることが必要


 ・Pythonでも三項演算子は使える
>>>条件に合うときの値 if 条件 else そうでないときの値
>>>100 if 3 < 5 else 0
# ->100
>>>100 if 5 < 3 else 0
# ->0

 ・リスト内包表記を使う
>>>[x for x in range(10) if x%2==0]
# ->[0, 2, 4, 6, 8]
#[処理最深部 第一インデント 第二インデント・・・]のように並んでいる
>>>[x if x<3 else -1 for x in range(10)]
# ->[0, 1, 2, -1, -1, -1, -1, -1, -1, -1]
#三項演算子を用いるとelseを使った表記も可能
#1番目の例とは全く違う構造なので注意。
for i in [x if x%3*x%5 else ("" if x%3 else "Fizz") + ("" if x%5 else "Buzz") for x in range(1,16)]:print(i)
#三項演算子とリスト内包表記とコロンの後の式を用いた1行FizzBuzz

 ・リストのメソッドsort()はリスト内のリストのn番目の要素を比較して並び替えることができる。
>>>list.sort(key = lambda x:x[n])
#[[1, 3], [2, 0], [3, 2]].sort(key= lambda x:x[1])は[[2, 0], [3, 2], [1, 3]]となる


 ・リストや文字列を反転させたものが欲しい時は後ろに[::-1]を付ける。
>>>"abc"[::-1]=="cba"


 ・リストなどに対して使えるmax(),min(),sum(),は()の中の最大値・最小値・合計を出すのに便利。

 ・for文にif文と同じようにelseを付けるとforの中でbreakされなかった場合の処理を書ける。
>>>while True:
...  for i in range(101):
...    if i == 150:
...      break
...  else:
...    print("100までの数は全て150と等しくありません") 
...    continue
...  break #for文をbreakで抜けた場合に評価されwhile文からもbreakされる(2重break)

 ・エスケープシーケンスは覚えないといけないのでググる

 ・CSVファイルを書き出せばExcelで使ったり他ソフトでグラフを描かせるのに便利。

 ・defで関数作っておいてif __name__ == "__main__":の下で呼び出すのがスマートらしい。

 ・itertoolsはリストで回して使う。(内包表記も可)

 ・ifなどのコロンの後に1行分だけ書ける。(書かないほうが見た目はいい)

 ・セミコロンを入れるとCなどと同じように続けて次の式をかけるが何のメリットもない
>>>for i in range(3):print(i);print(2*i)
#1行だが有効な書き方


 ・ファイルを開く時は読むときも書くときもencodingを指定するのが無難
file = open("***.txtl", "r",encoding="utf-8")


 ・簡易な時間計測にはtime.time()を処理の前後で変数に代入し引き算する。

 ・Tkinterなどを使ってコマンドプロンプトが不要なプログラムを実行するときはPythonwを使う。

 ・subprocess.Popen()を使って他のプログラムを呼び出して実行できる。
>>>pro=subprocess.Popen(["python", "HelloWorld.py"], stdout=subprocess.PIPE) 
#PythonでHelloWorld.pyを実行
>>>print(pro.communicate()[0]) # ->HelloWorld.pyの標準出力を出力

 ・以下の方法でコマンドプロンプトへ書いたのと同じように標準出力の結果を得られるがプログラムへの入力ができない。
os.system("python HelloWorld.py")


 ・Windowのコマンドプロンプトでは"cls"と入力すればコンソールの画面の表示状態をクリアできるので↑を応用して以下のようにすればprint()で表示させたものを全て消せる。
os.system("cls")


 ・print()で表示させた1行を消して書き換えたい場合はsys.stdout.write()とsys.stdout.flush()を使う。
for i in range(1000000):
sys.stdout.write("\r{}".format(i))
sys.stdout.flush()
#999999までカウントアップで表示される


 ・winsoundのBeep(周波数、長さms)で音が鳴るが使い所はなさそう。

 ・USBメモリに入れて持ち運べるPortable Pythonというものがある。

 ・Windowsキー+Rでファイル名を指定して実行を開き、cmdと打つとコマンドプロンプトが開く。

 ・辞書型.get(k,v)で辞書にkがある場合は参照して、無ければvを返す。

 ・コマンドプロンプトからnotepad /p ファイル名 でテキストファイルなどを印刷できる。
>>>os.system(["notepad /p ***.txt"]) #プログラム内でtxtファイル作って印刷させることもできる。(closeしてから)


 ・コマンドプロンプトでの実行結果をテキストに保存する場合は python ***.py >任意のファイル名.txt とすればよい。

 ・↑を応用してコンマで区切った実行結果を python ***.py >***.csvとすればCSVファイルを簡単に作れる。

 ・ライブラリなどを拾ってきてsetup.pyというファイルがあるならば python setup.py install と実行。

 ・decimalを使えば任意の精度の実数を扱える。

 ・fractionsで分数(有理数)を扱える。

 ・setという重複を許さないリストが場合によっては便利そう。

 ・shelveモジュールを使えば実行中の変数などの状態をファイルに保存しておける

 文字列内に代入を行う場合は % を使う方法より"{}".format()を使うことが推奨されている。
>>>print("結果はa={},b={}".format(5,10))
# ->結果はa=5,b=10
>>>print("結果はa={0},b={1}でした。私は{0}が好きです。".format("猫","2.33"))
# ->結果はa=猫,b=2.33でした。私は猫がすきです。
>>>print("結果はa={0:08.4},b={1:@>5}でした".format(12.345,"abc"))
# ->結果はa=00012.35,b=@@abcでした
#aは出力文字数8の0詰め精度4桁。
>>> print("\n{:*^20}".format("実は犬も好きだ"))
# ->******実は犬も好きだ*******


★ 練習課題
 FizzBuzz
 竹内関数
 素数生成
 素因数分解
 平方根を求める
 モンテカルロ法で円周率を求める
 数独生成
 自作brainfuck
 

★ その他
 本は買っても1冊。パーフェクトPythonがオススメ。最初は本を読むよりGoogleが便利。
 初心者向けに愛知大学の教授(?)が大変分かりやすいドキュメントを公開されている。→ページへ
 Project Eulerが楽しい。
 
スポンサーサイト

shader

Author:shader
多趣味飽き性に振り回されて色々やってます。

直接連絡したい方は御気軽にメールしてください。 3日以内には返信させて頂きます。

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。