忍者ブログ
日々の研究生活のメモ書きなど
(2010/11/22)
勢いでblogを作成してしまいました。

扱うテーマについては、C言語(たまーにc++も)、gnuplot、Debian、Macなどです
(これから他のジャンルに手を出していく可能性もあります)
メモ書き程度のものですが、同じことで悩んでいる方の役に立てれば幸いです

本業は学生で、物理屋を目指しています


( 2015/11/06 追記)
「bus error」「segmentation fault」で来られた方にはとてもイラっとするブログタイトルで申し訳ありません
bus error はファイルの入出力関連
segmentation fault は配列のindexまわりのエラーである可能性があるので、そこらへんをチェックしてください


( 2018/01/01 追記)
( 2018/01/21 追記)
実は、2017年末に理学博士の学位を取れました〜
2018年1月中旬から某所で研究者(ポスドク)として働きます

つまり、このブログには4回生からD5で理学博士を取得する間の8年間に習得した 知識や経験値がすべて蓄積されている、ということになります(まじか)
ただし、物理に関することはほぼここには書いていないのであくまで計算機やプログラミング言語に関することだけです・・・
あとはgnuplotとかポケモンGOとか







PR

UFJ銀行の場合、公式ページに詳しく書かれている

■ 参考 : 外国送金のお受け取り



Beneficiary Bank : 銀行名のこと
MUFG Bank, LTD.

SWIFT code :
みずほ銀行 MHCBJPJT
三菱UFJ銀行 BOTKJPJT
三井住友銀行 SMBCJPJT
りそな銀行 DIWAJPJT

Branch Name : 支店名、自分の支店名を書く
hoge BRANCH

Beneficiary Account Number : 受取人口座番号
XXX-YYYYYYY
XXXは口座の支店番号、YYYYYYは口座番号

Beneficiary Name : 受取人名
個人の場合は英字にすればOK

routing number :
日本では、IBAN(アイバン)やABA(エービーエー)といったコードはありません。
IBAN (International Bank Account Number)は、主に欧州で採用される銀行口座の所在国、支店、口座番号を一意に特定するための統一規格のコードで日本では採用されておりません。
ABAは、Routing Number(ルーティングナンバー)とも呼ばれる米国における銀行コードです。
とのこと








最近はレイドやリサーチで簡単に高個体値が手に入る
最大CPに関してはだいたいこれくらいとか記憶の片隅にあるし、その場にいる人達に聞いたら誰かしら知ってたりする
ただ、わざわざ測定しなくても早見表のようなものを作っておくと便利じゃないだろうか・・・?
とずっと思っていた

そんなときに↓のツイートを見かけたあぁ・・・Numbersに数式を埋め込めば早見表簡単につくれるやん・・・






これを見よう見まねで自分も作ってみた
(クリックでリンク先に飛べます)

ミュウツー早見表ラティオス早見表ホウオウ早見表


表の見方はこんな感じ↓

ミュウツー早見表








CPの計算式は実装から1度変更があった(ラプラスのCPが下がったのはそれが原因)
日本語の記事でそれを説明してるところは説明が不十分だったりするので注意


日本語の記事
CPの計算式がわかりやすく書かれている
■ 参考 : 【ポケモンGO】 パラメータ徹底解説 〜CP編〜


■ 参考 : Exact CP Formula from Stats and CpM (and an update to the HP Formula)


■ 参考 : Exact Pokemon CP Formula


CP Multiplier (CPM)という係数について各レベルごとにリストされている
PL40のときは0.790300という情報はいたるところに書かれているけど、他のPLのときの数値はここを見ればOK
■ 参考 : CP Multiplier


この記事はなんでメモしたのか忘れた
■ 参考 : How CpMultiplier and AdditionalCpMultiplier work together to make levels












ググった感じ色々と情報が出てきた
好みのものを探すのが色々と楽しい、気晴らしにはちょうどいい



CTANにもCV用のスタイルシートが色々と置いてある
試しに色々と「mod­erncv」とかをダウンロードしてみると、サンプルも付いていた
■ 参考 : CV - CTAN


■ 参考 : LaTeX template


「cv latex template researcher」とかでググったり、画像検索するとあれこれテンプレートが出てくる





結局、一番気に入ったテンプレートをコンパイルするにはあれこれスタイルシートが必要だったけど道中のことは眠くて全然覚えてない・・・
何の参考にならねー

今のCVはPagesで書いてるけどそのうち、個人ホームページのものを差し替える予定








次のようなエラーが出た
font関連っぽい

texエラー
ぐぐってみたところ、単純にフォントがないから起こっているっぽい

■ 参考 : Error in TeX Live – Font … not loadable: Metric (TFM) file not found

texlive-fonts-recommended をインストールしろ、とコメントがあるのでportでインストールしたら解決した
sudo port install texlive-fonts-recommended






ここの数字をいじればOK

numbers

■ 参考 : MacのためのNumbers: Numbers スプレッドシートで行と列を追加する/変更する











しばらく書いてなかったので書きます

前の記事は2018/3/29なので、そこから約2ヶ月分の近況報告です

■ 参考 : 【ポケモンGO】トレーナーレベルがカンスト(TL40)しました + 2度目のEXレイド招待





3月末〜今日までであったイベントなどなど


3/24
一部の地域(福岡市内だけっぽい)でナイトレイドが実装されて、レイドの終了時間が19時から延長になる

リサーチという機能が追加される
スペシャルリサーチとフィールドリサーチがある

↓はカイロスのコラ
3/28
アプデが来て、ロード画面に「ミュウ」がいることが確認される
スペシャルリサーチの報酬がミュウであることがほぼ確定
5台持ちマン

リサーチについての公式発表
リサーチの報酬まとめ
報酬で嬉しいのはラッキー、ヨーギラス、ミニリュウ、ふしぎなアメ、わざマシンスペシャル、金ズリあたりがもらえる報酬で
これらはラインのグループチャットとかでローカルにその情報が回ってくる
田舎での地元情報はネットよりも、やっぱり地元のが強い

帰宅途中に突然色ソーナノが孵化した
色違いソーナノ1


3/29段階での成績
バトルガール15000
歩いた距離2500km
現在の記録


3/31 EXレイド
確かこれはマック?
2度目のEXレイド ミュウツーEXレイド 個体値びみょう


3/31
メタモンに化けている可能性のあるポケモンの種類が増える
メタモンが変化している可能性がある


ミュウを捕まえるためのスペシャルリサーチに挑戦する
リワード


4/1 エイプリルフールということで、1週間ほどポリゴン仕様からドット絵に変わっていた
初代のポケモンをやっていた世代は歓喜していたが、50~70代世代の人がみんな見にくいとか言ってたw
この嬉しさが全然わかってないなぁ〜w

IMG_3284IMG_3318IMG_3319IMG_3320IMG_3321IMG_3322IMG_3323IMG_3324IMG_3325IMG_3326IMG_3327IMG_3328IMG_3329IMG_3330


ラティアスのレイドが始まる
ラティオスの方は1ヶ月遅れで始まる
ラティアスレイド3


初ミュウツーをCP3800まで強化してきた
ミュウツーCP3800


フィールドリサーチの方を7日こなすと、特別な報酬がもらえる
その報酬がなんとか過去にレイドに出ていた三鳥
1ヶ月ずつ報酬が変わっていて、ファイヤー→サンダー(今ここ)
ファイヤー1


4/8 東京の方に研修に行く日にミュウの報酬まで終わった
一番たいへんだったのは、間違いなくメタモン
これはホント運がいいか悪いかの話
あとゴーストタイプを10匹ってのもあったけど、自分は初日の晩に3時間ほどぶらついて終わらせた
結局メタモンはレイドのときにいつも喋るおばちゃんに「あそこにメタモンおったよ?」という情報を元にレイドをやらずに全力疾走で取りに行った
とてつもなく助かった・・・・
ミュウリワード



ミュウとの遭遇
友人と沖縄料理屋で飲んでるときに、ミュウの報酬を取った

ミュウをゲットするときはなぜか背景が現実画面になる(この機能の名前忘れた)
あとミュウは光学迷彩を付けていて、透明になっているのでかなり探しにくい

個体値は79%でフル強化してもCP3000はいかない・・・残念
ミュウ4ミュウ6ミュウ7ミュウ7ミュウ8ミュウ12


またEXレイドに当選した
4度目のEXレイド



トレーニング時代からずっと一緒に戦ってきたシャワーズのジム回数が10000を超えた
10000勝


4/11からカントーのポケモンがいっぱい出るイベントが始まる
まともなイベントをやるのがリリースされて1年半以上経ってからというところにナイアンのセンスを感じる
イベント


千葉の穴場ジムを見つけた
ジム置き


リサーチ報酬のファイヤーがバグっている(報告多数)
バグったファイヤー1バグったファイヤー2


またEXレイドに当選した
5度目のEXレイド当選


ゲンガー様が見ている
ゲンガー様が見ている



4/15はコミュニティデイで、色メリープが発生していた
コミュニティデイ 色メリープコミュニティデイ6


リサーチもコミュニティデイ仕様になっていた
コミュニティデイ2


ちょいちょいミニリュウが出て来る
コミュニティデイ7


メリープトレイン
メリープトレイン


ミュウツーをやっとフル強化できた
ミュウツーフル強化2


6回目のEXレイド招待
6回目のEXレイド


5回目のEXレイドの戦績はこんな感じ
EEFのミュウツーは次期フル強化候補
5回目のEXレイド


リワードのラッキーが100%だった
ラッキーFFF



サンダーがもうすぐ10000勝
9460勝


地元で4人ラティオス
ギリギリ勝てた・・・・
地元で4人ラティ4


8回目のEXレイド招待状
8回目のEXレイド ソフトバンク


色ボスゴドラ
色ボスゴドラ進化1ボスゴドラ進化2



この数日の間にナイトレイドが実装されたりしましたが、まだその恩恵は受けれていません・・・
そのうちまたまとめます
















quick lookで見れなくてイラッとした

まずはechoで本当に思ってるファイルがリストされてるのか確認
そのあと、mv で実際にリネームすればOK
#!/bin/sh
for i in `find . -name "*dat"`
do
mv $i ${i%.dat}.txt
#echo $i
done











今回は、もうめんどくさくなって画像をペタペタ貼り付けただけだけど綺麗に並べる方法もある
今後のためにリンクをメモしとく

tableを使う方法は簡単に隙間の調整ができるので便利そう

あとは
<div style="float:left; margin: 20px;">
<img src="画像のURL"/>
</div>
って感じで、margineを設定するのも便利そう

■ 参考 : HTMLで画像を横並びにする方法










切り捨て
double floor( double x )

切り上げ
double ceil( double x )

両方共math.hに入ってる

■ 参考 : C言語 小数点の切り捨て - math.h - [ floor ]

■ 参考 :C言語 小数点の切り上げ - math.h - [ ceil ]





&nbsp; 半角スペース
&nnsp; 半角スペース&nbsp;よりも広い空白
&emsp; &nbsp;よりも2倍広い空白を入れられる
&thinsp; で細い空白文字を入れられる

連続して並べれば、自分の欲しいスペースが得られるはず
texのhspaceとかvspaceみたいなのがあればいいんだが・・・







おまけ

& は &amp;
> は &gt;
< は &lt;






以前書いた記事のおさらい+まとめみたいな感じ

■ 参考 : 【シェルスクリプト】2の累乗をfor文で回す

■ 参考 : 【シェルスクリプト】exprを使わずにより早いfor文を書く







$(())という書き方は実はもっと色々とできるっぽい
↓の記事に詳しくまとめられている

■ 参考 : bashで四則演算( -×÷)や割り算のあまり(剰余)を求めるような簡単な計算をする

・四則演算
・余りを求める $(( 5 % 3 )) とか(今回はこれが使いたかった)
・累乗を求める
・偶奇の判定、$(( なんか & 1 ))で返り値が1なら奇数、0なら偶数


ただし、$(())の最大のデメリットは整数しか扱えないこと

小数を使いたい場合はbcコマンドを使う
またはawkとかでもOKか

■ 参考 : 【シェルスクリプト】bcコマンド








まず終了ステータスについて

■ 参考 : exitコマンド(シェルを終了する)

シェルスクリプトの最後に
exit [n]
と書いた場合はnが終了コード
nを書かない場合は最後に実行したコマンドの終了コードを引き継いで正常終了する
nに数字以外を書くとエラー終了

nは0から255の数字を入れる
1のみエラー終了、それ以外は正常終了






■ 参考 : 終了ステータスを設定
終了ステータスは $? というシェル変数に代入されているので、その値を見て処理を分岐させればOK


ただし、そんな処理分岐をしなくても
command1が成功したら、command2を実行するという風に処理を進めたい場合は次のように書けばOK
command1 && command2 && command3


コマンドが失敗した場合のみ進めるというのもあるが、こっちは使いみちがあんまりわからん
代替手段をcommand2とcommand3に書いておくのかな?
command1 || command2 || command3


rm -f の終了ステータスは常に0になる
他のユーザのファイルを削除しようとした場合は1になる
とりあえずrm -f の終了ステータスは信用しないようにする







話は変わって、シェルスクリプトのset -eについて

■ 参考 : シェルスクリプトを書くときはset -euしておく

この記事ではset -euと書いてあるけど、自分が使いたいのはひとまず set -e
これはシェルスクリプトの中で、正常終了しないコマンドがあった場合はそこでシェルスクリプトの処理が止まる

set -uは未定義の変数を使おうとしたときに打ち止めしてくれるオプション
ある処理がうまくいってなくて、その結果未定義な変数があるときにちゃんと処理を止めてくれるという優れもの


ある処理1からある処理2まではset -eのオプションの機能を止めたい場合は
set +e
# ここからset -eを止めてる
#
#
#
set -e
# ここからset -eが機能してる
#
みたいにset +eを使えばOK












条件分にコロンを使う
while :
do
# なんかする
done

条件分にtrueを使う
while true
do
# なんかする
done









最近何かのことを調べていて以下のブログにたどり着いた
色々とページを見てたら、目からウロコが落ちた
■ 参考 : 最近覚えたシェルスクリプトの小ネタ


「testコマンドを使うとフォークしてしまって大量に叩くとパフォーマンス悪い」らしい
つまり、if [ ]; thenのこと

その代用に挙げられていたのが
[[ "$a" = "hoge" ]] && echo "hoge" || echo "fuga"


これを使って・・・・

ファイルがあるかどうかで分岐
[[ -f $file ]] && echo "file aru" || echo "file nai"

ディレクトリがあるかどうかで分岐
[[ -d $dir ]] && echo "dir aru" || echo "dir nai"

[[ ]]と中身は絶対に半角スペースを開けないとエラーになるので注意

判定を反転させたいときは ! を -dとか-fの前につければいい

あと&&とか||の後の処理を複数行に分けて書きたいときは{ } でくくればOK











CentOS6とCentOS7でコマンドが大きく変わっているので注意
↓にわかりやすくまとめられている

■ 参考 : CentOS7 systemctlコマンドの使い方 自分用メモ


今動いているサービスは
systemctl
で確認できる
# hogeサービスを起動する
systemctl start hoge.service

# hogeサービスを止める
systemctl stop hoge.service

# hogeサービスを再起動する
# reloadとの違いがわからん
systemctl restart hoge.service

# hogeサービスの状況を見れる
systemctl status hoge.service

# hogeサービスを自動起動するようにする
systemctl enable hoge.service

# hogeサービスを自動起動を止める
systemctl disable hoge.service


systemctl emergency
とかでレスキューモードに入ったりもできるらしい(まぁ使わんか・・・・)




■ reload と restart の違いは何か?

ここ↓に書いてあった

■ 参考 : 【systemctl】コマンドの使い方 〜オプション一覧、起動や自動起動、ステータスの見方、serviceとの違い、reloadとrestartの違い〜


restart(再起動)とreload(再読み込み)の大きな違いは、失敗したときの挙動が異なる点です。
再起動で失敗する場合はたいてい、停止は成功して起動が失敗するので、1秒程度以上のサービス停止が発生します。
一方、再読み込みで失敗した場合は、停止をしていないので、設定変更前の状態で起動し続けられます

reloadのが安全だな・・・














returnとyieldは別物
メソッドが呼び出されるごとに、どんどん進んでいくのがyield

↓の記事の説明がとてもわかりやすい

■ 参考 : python の yield。サクッと理解するには return と比較











だいぶ前に使って、ブックマークに入れたまんまだったので代わりにここに貼り付けとく


■ 参考 : gnuplotでファイルの一行目をtitleにする

ファイルの1行目になんか文字があって
file = "hoge.txt"
time = system("head -1 " . file)
set title sprintf("%2.2f hrs", time / 3600)

ファイルの1行目を#から始まるようにしておかないとこのファイルをplotとかしたときに抵触する気がする
または文字が書いてあるだけのファイルを別に用意しておけばいい?






もう一つ別の例

■ 参考 : gnuplot

これはplotのtitleにファイルから読み込んだ文字を入力したい場合
図の凡例にデータファイルから読み込んだデータを入れたいときには, title column (line number)とすればいい。(参考URL)
p "filename" u ($0):2:xtic(1) title column(2) w p









これ↓
■ 参考 : Gnuplotting/gnuplot-palettes

ここに乗ってるサンプルの配色例↓
overview




使い方は
load 'hoge.pal'
hoge.palを自分が使いたいものに置き換えればOK


例えばbrbg.palの中身はこんな感じ
これを直接 ~/.gnuplot に書き込んでおいてもOK
# line styles for ColorBrewer BrBG
# for use with divering data
# provides 8 colors with brown low, white middle, and blue-green high
# compatible with gnuplot >=4.2
# author: Anna Schneider

# line styles
set style line 1 lt 1 lc rgb '#8C510A' # dark brown
set style line 2 lt 1 lc rgb '#BF812D' # medium brown
set style line 3 lt 1 lc rgb '#DFC27D' #
set style line 4 lt 1 lc rgb '#F6E8C3' # pale brown
set style line 5 lt 1 lc rgb '#C7EAE5' # pale blue-green
set style line 6 lt 1 lc rgb '#80CDC1' #
set style line 7 lt 1 lc rgb '#35978F' # medium blue-green
set style line 8 lt 1 lc rgb '#01665E' # dark blue-green

# palette
set palette defined ( 0 '#8C510A',\
1 '#BF812D',\
2 '#DFC27D',\
3 '#F6E8C3',\
4 '#C7EAE5',\
5 '#80CDC1',\
6 '#35978F',\
7 '#01665E' )










新しい計算機にログインして、ふいにcontrol+Dを押してしまいログアウトしてしまった・・・
.cshrcをまだ用意していないのが原因だった

.cshrcに
set ignoreeof
と書いておけばOK

というか書いてある.cshrcをscpしていなかったからこうなっただけだった
何も知らずに偉い人の.cshrcを一部コピペしたりして使ってたけど、やはり先人は偉大だった


bashの場合は
IGNOREEOF=100
とかでcontrol+Dを100回まで無視するとか設定するらしい





わかりやすくcontrol+Dについてまとめられているページ↓

■ 参考 : Ctrl-D の話









クラスについてまとめるつもりだったけど、↓の記事のが詳しいから困ったらそっちを読むよろし(未来の自分へ)

■ 参考 : Python クラスについて





■ クラス
クラスは組み込み型のint型やlist型と同じように独自の属性やメソッドを備えたデータ型を作成できる
クラス作成はclass文で始める
class クラス名 :
 def メソッド名(self, ・・・):
  ・・・
 def メソッド名(seld, ・・・):
  ・・・


classを定義した後に呼び出すと、クラスのインスタンスが作成される
class hoge_class:  # クラスの定義
 ・・・
hoge_instance = hoge_class()



■ メソッド
class文に続いて、1段階インデントしたブロックにメソッドを記述する
メソッドは関数と同じように、defから始める
メソッドがない内容が空のクラスにはpassとだけ書いておく
関数定義と同じように、class文の直後にドキュメンテーション文字列を記述できる
class hoge_class:  # クラスの定義
 """
 ここにドキュメントを書く
 """
 def foo(self, AAA, BBB):
 """ プリントするだけ """
  print(self, AAA, BBB)

メソッドは必ず引数を1つ以上取る
最初の引数にはクラスのインスタンスを指定する

obj=hoge()
obj.foo("aaa", "bbb")
のように使う
selfの部分がないような気がするけど、まだよくわかっていない




■ 属性
クラスのインスタンスに属性値を割り当てたいときは、事前に定義の必要はない
オブジェクト obj に属性を設定する場合は、 .演算子で属性名を指定する
obj=hoge()
obj.bar = 100
# objの属性barに100を設定する

print( obj.bar )
# 参照するときも同様にする


del文で属性を削除できる
del obj.bar



■ __new__()メソッド、__init__() メソッド
obj = hoge()
のようにクラスオブジェクトを呼び出すと、まず __new__()メソッドが呼び出される
その後、__init__()メソッドが呼び出されて、インスタンスを初期化する
__init__()メソッドはコンストラクタとも呼ばれるメソッドで主にインスタンスの属性値の初期化処理をする

class hoge_class:  # クラスの定義
 """
 ここにドキュメントを書く
 """
 def __init__(self, AAA, BBB):
 """ 属性値の初期値を設定する"""
  self.AAA = AAA
  self.BBB = BBB

obj = hoge(AAA=1, BBB=2)
# hoge.__init__(1, 2) が呼び出される


__init__メソッドは返り値を返さない


他にも__del__()メソッドがある
これはもう使わないインスタンスを解放されるときに、呼び出される
インスタンスが管理していたリソースの開放を行うため

__del__()の使用は計画的に、と本には書いてある
使用はしないほうがいいらしい、メモリーリークの可能性が高まるとか



■ 継承
あるクラス Aを定義する
別のクラスBで クラスAを引数に取ると、クラスBの中でクラスAのメソッドを呼び出して使うことができる
このとき、super()を使う


■ 多重継承
クラスCとクラスDを宣言する
クラスEの引数にクラスCとDを取ると、クラスEの中でクラスCとDのメソッドが使える
このとき引数は
class hoge(C, D):
のようにカンマで区切る



■ プライベートメンバ
名前が__(アンダーバー2個以上)で始まり、かつ末尾に__が2個以上つかない場合はプライベートメンバになる
プライベートメンバの例
__hoge
__hoge_
プライベートメンバじゃない例
_hoge
__hoge__

プライベートメンバはクラスの中では参照できるが、クラスの外からは参照することができない





■ デコレータ
「関数を引数にとって、戻り値として関数を返す」関数をデコレータと呼ぶ
def print_deco(func):
 print(func)
 return func

def hoge():
 print("python is GOD")

ref_func = print_deco(hoge)

ref_func()
# これを実行すると "python is GOD" と表示される

関数を定義するdef文の直前に@記号をつけてデコレータ関数を指定ry

もしデコレータ(@記号)について詳しく知る必要ができたら以下に目を通してちょんまげ(未来の自分へ)
■ 参考 : Pythonのデコレータについて

デコレーターを利用することで、既存関数の処理の前後に自分自身で、処理を付け加えることができます
ということらしい


ちなみにデコレータは複数指定できる
@hoge1
@hoge2
@hoge3
def foo():
 pass


def foo():
 pass

AAA = hoge1( hoge2( hoge3( foo ) ))
と同じらしい







■ ファイル入出力

まぁ必要ならそのうち書く












自分のログインパスワードを変更する時にchpasswdと打って、sudo権限いるやんけ〜〜〜
とか言ってたアフォおる?(私だ)



passwd は自分のアカウントのパスワードを変更するときに使う
chpasswd は管理者が一括で複数のユーザーのパスワードを変更するときに使うコマンド(つまりsudo権限は必要)

■ 参考 : 【 passwd 】 ユーザーのパスワードを変更する

■ 参考 : Linuxで一括でユーザーのパスワード設定を行う方法









mac portでgccを何種類もインストールしたときにそれを切り替えるコマンドメモ

これ↓のgcc版
■ 参考 : 【Mac】portでpythonのデフォルトのversionを入れ替える方法

% port select --list gcc
Available versions for gcc:
mp-gcc5 (active)
mp-gcc7
none

% sudo port select --set none
とか
% sudo port select --set gcc5

noneを選ぶと、Macにデフォルトで入ってるgccが使われるようになる








一応、本自体は読み終わったので後はまとめるだけ




■ if
if 条件式 :
 条件式が真の場合の処理
elif 条件式 :
 条件式が真の場合の処理

どこがif文の終わりかはブロックで判断する必要がある


■ pass
passは何もする必要がないときに書く
pythonではブロックがないとエラーが出るときがあるため、代わりにpassと書いておく


■ while
while 条件式 :
 ・・・
else :
 ・・・

サンプルコード
stopって変数を使わなくてもいいんじゃないか?と思って2つめのを書いてみた
おそらく実行時に毎回wordの長さを評価するからすっごい長いリストの場合は計算時間が遅くなるとかそういうこと?
それとも1度計算した量はキャッシュされてるとか?
#!/usr/bin/env python
# -*- coding: utf-8 -*-

word="PYTHONisGOS"
stop=len(word)
i=0
while i < stop:
 print(word[i])
 i += 1


i=0
while i < len(word):
 print(word[i])
 i += 1



■ break
whileを使ったループで、そのブロックから抜け出すときに使う


■ else節
whileブロックの後にelse節があれば、ループ終了後に実行される
ただしbreakで中断した場合はelse節は実行されない
(使い所がわからぬ)


■ for
for 変数名 in イテラブルオブジェクト:

イテラブルオブジェクトはリスト、タプル、文字列などのこと
イテラブルオブジェクトの要素を前から取り出して、変数名に代入していく

上の例は一番簡単な例
下の例は、リストの中身がタプルな場合
それをi, jと分解して変数に代入することもできる。
今回はタプルなのでfor (i, j) inと書かなくても()を省略している
読みやすいコード的には()があった気がするけど、今読んでるコードではこういう()はない
#!/usr/bin/env python
# -*- coding: utf-8 -*-

list=[1,2,3,4,5]
for i in list:
print(i)

print("")

list2=[(1, 2), (3, 4), (5, 6)]
for i, j in list2:
print(i)
print(j)


else節はfor文でも使える
total=0
list=[1,2,3,4,5]
for i in list:
 print(i)
 total += i
else :
 print(total)



■ range
3種類の使い方ができる
range(stop)
range(start, stop)
range(start, stop, step)
これまで学んだことからすると、rangeの定義のときにデフォルト値が代入されているんだと思う
def range(start=1, stop, step=1)
か? いや、でもこれだとrange(10)ってしたときにstart=10になってしまうような・・・ まぁいいか

使用例
>>> range(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5, -10, -1)
[5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]


■ enumerate
イテラブルオブジェクトから取得した要素と、その要素のインデックス値をペアにしたタプルを返す
list=["a", "b", "c"]
for val_list, i in enumerate(list, 1):
print i, val_list





■ 例外処理

例外の送出は raise文で行う
>>> raise ValueError("hogehoge")
Traceback (most recent call last):
File "", line 1, in
ValueError: hogehoge


■ トレースバックオブジェクト
■ assert文
■ with文
飛ばす






■ 関数定義
def 関数名(引数1, 引数2, ・・・):

関数定義の中でimport文によるミュジュールのインポートをすると関数内だけ有効になる

関数の戻り値はreturn文で指定する
return文の戻り値を省略すると戻り値はNoneになる
return文自体を省略しても戻り値はNoneになる
passと関数定義の最後に書いても戻り値はNone


■ 可変長引数
引数の名前に*記号を付けた引数がある関数は任意の数の引数を取れる

def hoge(a, b, *c):
この場合、前からhoge(1, 2, 3, 4, 5)を実行すると
a=1
b=1
c=(3, 4, 5)
と代入される

他にも **cとかもできるらしいが、よくわからぬ。辞書と関係あるっぽい



■ キーワード専用引数

def hoge(*AAA, BBB):
とする
hoge(1, 2, 3)
では実行時にエラーが出る
hoge(1, 2, BBB=3)
のようにキーワードを必ず指定しないといけない

逆に
hoge(BBB=3)
でも動くはず



■ デフォルト引数
def hoge(x=1, y=2, z=3):
とすると、
hoge()
だけでも動く
hoge(100)
とすると、
x=100, y=2, z=3
が代入されてhogeが実行される





■ ドキュメンテーション文字列

関数定義の次に"""で囲まれた文章があると、それはドキュメンテーション文字列になる
def hoge(a, b, c):
 """ hogehoge
 a -- argument a
 b -- argument b
 c -- argument c
 """
みたいな感じ

関数オブジェクトの __doc__ 属性にこれらの文字列が代入されており、help(hoge)で表示できる







■ グローバル変数とローカル変数

モジュールの中で
hoge = 100

def func():
 foo = 200
となっているとhogeはグローバル変数
fooはローカル変数

グローバル変数はどの関数の中でも参照できるが、ローカルは関数内でのみ参照できる



■ import
これは前に書いた

あるモジュールから複数の関数をインポートする場合は
from math import (pi, math, pow, sin, cos, tan, sqrt)
のようにする

from math import *
とすると、math.pyの中にある__all__という名前のシーケンスがあればそこに書かれているオブジェクトのみインポートされる
__all__がない場合は名前の1文字目が_ではないオブジェクトがすべてインポートされる


■ モジュール検索パス

環境変数PYTHONPATHで設定する




■ パッケージ

パッケージはモジュールを格納するディレクトリで、複数のモジュールを階層的に管理する

ディレクトリに __init__.py という名前のファイルがあるディレクトリは、そのパッケージとしてインポートできる
パッケージ内のサブディレクトリに__init__,pyがあればサブパッケージとしてインポートできる
中身は空でOKらしい


import hoge   # hogeというパッケージをインポート
import hoge.foo # hogeパッケージの中のfooモジュールをインポートする
from hoge import AAA, BBB, CCC # hogeパッケージの中の一部のモジュールをインポートする


イマイチパッケージとモジュールの区別がついてないけど
おそらくモジュールを集めたものがパッケージなんやろうな

次の記事でクラスについてまとめて終わり〜










■ シーケンス
リスト、タプル、文字列、他にバイト型(これは全然知らない)をシーケンスと呼ぶ
どれも添え字やスライスを使って、同じように要素の操作を行える


■ 添字を使ったアクセス
>>> list=[1,2,3,4,5]
>>> list[2]
3
>>> list=[0,1,2,3,4,5]
>>> list[2]
2
>>> list[-2]
4
>>> list[-1]
5
前にも書いたとおり負のインデックスは、リストの後ろから順番に要素にアクセスできる


■ スライス

hoge[開始位置:終了位置]
という書き方で、リストの一部だけを取り出すことができる
存在しないスライスをしたとしても、エラーは出ずに空リストが返ってくる
>>> list=[0,1,2,3,4,5]
>>> list[0:2]
[0, 1]
>>> list[0:6]
[0, 1, 2, 3, 4, 5]
>>> list[-2:-5]
[]
>>> list[-5:-2]
[1, 2, 3]

hoge[開始位置:終了位置:増分値]
のように増分値を設定することで何個飛ばしでスライスすることもできる
(これは何かに使えるかもしれないので覚えとこ)
>>> list=[0,1,2,3,4,5]
>>> list[0:5:2]
[0, 2, 4]

↑のようなオブジェクトを作成するという方法もある
>>> list=[0,1,2,3,4,5]
>>> slice(0, 5,2)
slice(0, 5, 2)
>>> list[slice(0, 5,2)]
[0, 2, 4]


リストの一部の要素を修正するときは
>>> list=[0,1,2,3,4,5]
>>> list[0]=100
>>> list[5]=500
>>> list
[100, 1, 2, 3, 4, 500]

スライスを使って、複数の要素を一度に修正することもできる
指定するインデックスが2個で、代入する要素が3個と不一致でもなんとかゴリ押してくれるっぽい
>>> list=[0,1,2,3,4,5]
>>> list[2:4]=["A", "B", "C"]
>>> list
[0, 1, 'A', 'B', 'C', 4, 5]
>>> list[2:4]
['A', 'B']


要素の更新には += や *= も使える
>>> list=[0,1,2,3,4,5]
>>> list[2] += 4
>>> list
[0, 1, 6, 3, 4, 5]
>>> list[1] *= 1000
>>> list
[0, 1000, 6, 3, 4, 5]
数字同士に対して、これらの処理をするのはどうなるかわかるけど
文字列にも += や*=が使えるっぽい
そもそもリストに * を使うと、そのリストと同じものを2つ作るという点に注意、たぶんそのうち出てくる



要素の削除はdelを使う
>>> list=[0,1,2,3,4,5]
>>> del list[0], list[4]
>>> list
[1, 2, 3, 4]


■ +と*をリストに使ってみる
+はリスト同士をくっつける
*はリストをその後の数字の分だけ繰り返す
>>> [1,2,3] + [44, 55, 66]
[1, 2, 3, 44, 55, 66]
>>> [100, 111, 222] * 3
[100, 111, 222, 100, 111, 222, 100, 111, 222]
>>> [100, 111, 222] * 3.5
Traceback (most recent call last):
File "", line 1, in
TypeError: can't multiply sequence by non-int of type 'float'
*の後の数字は整数じゃないとエラーが出る



■ 比較演算子
<や>など
シーケンスの要素同士を先頭から比較して、TrueかFalseを返す
>>> [1, 2] < [3, 4]
True
>>> [1, 2] < [1, 4]
True
>>> [1, 2] < [1, 1]
False


■ メンバーシップ演算子
>>> 1 in [1,2,3,4,5]
True
>>> 0 in [1,2,3,4,5]
False
後々出てくる集合でも活躍する



■ シーケンスの長さ
組み込み関数のlen()を使う
>>> len([1,2,3,4,5])
5



■ リストに要素を追加する
リストのメソッドappend()を使う
>>> list=[0, 1, 2, 3, 4, 5]
>>> list.append(100)
>>> list
[0, 1, 2, 3, 4, 5, 100]


■ リスト内包式
Haskellでもあったリスト内包表記
たぶん使わんからパス



■ リストのメソッド簡易表

リストhogeの末尾にvalueを追加する
hoge.append(value)

リストhogeの要素をすべて削除する
hoge.clear()
del L[:]と同じ

python2だとエラーが出る
なんか間違ってる・・?
>>> L=[1,2,3,4]
>>> L.clear()
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'list' object has no attribute 'clear'

めんどくさくなったので、まとめられてるところを貼っとく
■ 参考 : Python リストのメソッド


リストの順序を逆に出来る
逆にしたリストを返すのではなくてリストhogeの中身を逆にしてしまう
hoge.reverse()


ソート
オプションがあるけど、まぁ使うときに調べるっしょ
hoge.sort()





■ タプル
基本的にリストとほとんど同じだけど、一番異なるところはタプルは更新不能なオブジェクト
>>> ta=(1,2,3)
>>> ta[1]
2
>>> ta[1]=4
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment
■ 参考 : Python のタプルとリストの違い、タプルの使いどころ


リストはミュータブルであり、タプルはイミュータブルである
= リストは要素を更新できるか、タプルは要素が更新できない
= タプルはオブジェクト id を変えずに要素を追加・変更・削除をすることができない





■ 文字列
複数行の文字列は\で分割できる
複数行の文字列は"""や'''で囲むと記述できる






■ 辞書オブジェクト
{キー:値, キー:値, キー:値}
という書き方をする
空の辞書は{}





■ 集合
{要素, 要素, 要素}
という書き方をする
集合の要素は重複しない、というのが特徴
つまり1という要素があったら、1という要素を追加しても集合は何も変わらない
>>> {1,2,3,4,5}
set([1, 2, 3, 4, 5])
>>> 1 in {1,2,3,4,5}
True
>>> "a" in {1,2,3,4,5}
False
>>> {1,2,3} <= {1,2,3,4}
True
>>> {1,2,3} < {1,2,3,4}
True
inや<などの演算子が使える
inは左の集合が右の集合に含まれたらTrue
<=はinと同じだと思う
<は少し違って、左の集合と右の集合が同じ場合はFalseになる、それ以外は<=と同じ

==は左と右の集合が完全に同じならTrue、それ以外はFalse

空集合を作るときは
set()


■ 集合のメソッド

集合に要素を追加する
hoge.add(elem)




(まぁ書かなくてもええやろ・・・)







■ 他のデータ型からリスト型への変換

■ 参考 : Python3系の基礎文法(リスト、タプル)
>>> ta=(1,2,3, "b", 4)
>>> list(ta)
[1, 2, 3, 'b', 4]

>>> ch1="ABCDEF"
>>> list(ch1)
['A', 'B', 'C', 'D', 'E', 'F']

>>> ch2="2018/04/10"
>>> ch2.split("/")
['2018', '04', '10']










プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

#ifdef RICH_FLAG
// ↑いつも支援いただきありがとうございます m(_ _)m
#define WISH_LIST
amazonのほしい物リスト
#endif


int main(void){

printf("\n");
printf("あけましておめでとうございます\n");
printf("今年もどうぞよろしくお願いします\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中\\
少し追記しました\n");
/* 最終更新 2018/01/01 */
return 0;

}
カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

とある物理の院生日誌~院生は社会へ旅立った~
(研究室の先輩の個人ブログ)

英語例文を見て自然に英語・英会話を学ぶ
(楠本慶ニさんの個人ページ、様々な情報の密度の高さに感動)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

Flickr

Template "simple02" by Emile*Emilie
忍者ブログ [PR]