Hatena::Grouppython

Pythonの覚書

2013-03-24

Pythonでビット演算(1)2進数表現 def printbin(num,width):print str(bin(num))[2:].zfill(width)

| 22:52 | Pythonでビット演算(1)2進数表現 def printbin(num,width):print str(bin(num))[2:].zfill(width) - Pythonの覚書 を含むブックマーク はてなブックマーク - Pythonでビット演算(1)2進数表現 def printbin(num,width):print str(bin(num))[2:].zfill(width) - Pythonの覚書 Pythonでビット演算(1)2進数表現 def printbin(num,width):print str(bin(num))[2:].zfill(width) - Pythonの覚書 のブックマークコメント

Pythonでビット演算をする必要は無いんだけど、手元にある一番手軽で高機能なCUI環境がIPythonなんで、ついついPythonでやっちまうよね。ビット演算やる前に、2進数表記をしこたま研究しないと使い物にならんぞこれ。

1~10までを2進数表記

>>> for i in range(0,11):print bin(i)
0b0
0b1
0b10
0b11
0b100
0b101
0b110
0b111
0b1000
0b1001
0b1010

この表記も悪くないな。でもビット演算するには邪魔者がいる。先頭の0bが邪魔だ。

>>> for i in range(0,11):print str(bin(i))[2:]
0
1
10
11
100
101
110
111
1000
1001
1010

strでキャストして、2文字目以降を出力している。でも、やっぱ桁数併せたいよね・・・。

>>> for i in range(0,11):print str(bin(i))[2:].zfill(4)
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010

str.zfill(桁数)で桁数併せられるっぽい。

関数化してみるか・・・。

>>> def printbin(num,width):
    print str(bin(num))[2:].zfill(width)
... 
>>> 
>>> printbin(0,4)
0000
>>> printbin(7,4)
0111

こんなもんでどうでしょうか?

2012-10-19

Pythonじゃ++は使えないよ~。

| 19:34 | Pythonじゃ++は使えないよ~。 - Pythonの覚書 を含むブックマーク はてなブックマーク - Pythonじゃ++は使えないよ~。 - Pythonの覚書 Pythonじゃ++は使えないよ~。 - Pythonの覚書 のブックマークコメント

Sample Code(サンプルコード)

>>> i++
SyntaxError: invalid syntax

そもそもなんだが、++を有難く思っているプログラマの神経がわからない。C系の言語ではインクリメントがどうやら重要な処理だと思われているらしく、わざわざ++なるものを用意してくれている。単に1足すだけなんだけどね・・・。記述が簡易だとか、ローレベルなところで高速だというメリットがあるんだろうが、スクリプト言語では大して重要な処理でもない。

素直に、

>>> i +=1
>>> i
1
>>> 

こう書けばいい。


そもそも(2回目)なんだが、i++と++iの違いをわかっていないプログラマが多い。

例えば、C#のサンプルコードをを見て欲しい。

Sample Code(サンプルコード)

      int i = 0;
            Debug.WriteLine(i++);
            Debug.WriteLine(i);

            i = 0;
            Debug.WriteLine(++i);
            Debug.WriteLine(i);

Result(実行結果)

0
1
1
1

つまりは、i++は値を返却した後にインクリメントするのに対して、++iはインクリメントしてから値を返す。そこが違い。そんなの覚えたくもないし、知らない人にいちいち突っ込むのも面倒くせぇわ・・・。コピペプログラマが、バグを埋め込むには良い仕様だ。switchのcaseでbreakを忘れるプログラマがバグを埋め込むのが嫌だからswitchなんて無いというPythonでは、ごく自然な実装だ。


そもそも(3回目)なんだが、i++なんていつ使う???せいぜい、forループするときに役立つくらいだろう。それとて、C#のようにイテレーターの種類が豊富でパワフルな言語には、もはや用無しの仕様なんじゃないだろうかね・・・。Pythonとて同じこと。

参考までに、C#で0~9までループを回してみる。

Sample Code(サンプルコード)

   for(int i = 0; i<10; i++)
            {
                Debug.Write(i);
            }

Result(実行結果)

0123456789

そもそも(4回目)なんだが、このsyntaxがわかりにくい!

それだったら、pythonでこう書いたほうが楽だし見やすい。


Sample Code(サンプルコード)

>>> for i in range(0,10):
	print i,

	
0 1 2 3 4 5 6 7 8 9

いろいろ踏まえて++なんて紛らわしいだけで使えない。有難がっている人の心理が理解出来ない。++が使えないと嘆いている人の心理も理解出来ない。きっと、慣れ親しんだsyntaxが恋しくなっているとかそういう話じゃないのか?


そもそも(5回目)なんだが、++ってどこがいいんだ?

2012-10-18

List<string>を連結してstringにする。Pythonでもやってみた。

| 20:31 | Listを連結してstringにする。Pythonでもやってみた。 - Pythonの覚書 を含むブックマーク はてなブックマーク - Listを連結してstringにする。Pythonでもやってみた。 - Pythonの覚書 Listを連結してstringにする。Pythonでもやってみた。 - Pythonの覚書 のブックマークコメント

List<string>を連結してstringにする。 - oneshotlife_tomの日記

まさか、高級言語Pythonでこんなこと出来ないわけがないんだけど、Pythonの組み込み型のlistにはjoinが無いから、どうやって実装するんだ?と疑問に思ってググった人もいるかと思うので、軽くご紹介。Pythonではjoinはstr型の組み込みメソッドとして用意されている。もちろん、Pythonは変数の宣言なんて必要ないんで、いきなりセパレータの文字列を書いて.join(list)で呼んであげればいい。セパレータを使わない場合は?つまり、文字列を単純にくっつける場合は?以下のように書く。

Sample Code(サンプルコード)

>>> list =["Hello"," ","Wold!"]
>>> "".join(list)
'Hello Wold!'
>>> 

ErwinErwin2012/12/07 10:44Thanks for hpeling me to see things in a different light.

aijefzxaijefzx2012/12/08 15:36eLKeD9 <a href="http://gozcooplsuyp.com/">gozcooplsuyp</a>

witjvxouwitjvxou2012/12/09 21:03snSdya , [url=http://pulfxoxfneqv.com/]pulfxoxfneqv[/url], [link=http://bbvlzxqxllci.com/]bbvlzxqxllci[/link], http://qlvgzdtffbyv.com/

gwducxmohyhgwducxmohyh2012/12/10 10:59jmkjei <a href="http://rlonovmigmxt.com/">rlonovmigmxt</a>

uswymvofuswymvof2012/12/12 11:06lsnSSk , [url=http://gpwkgmovwhgm.com/]gpwkgmovwhgm[/url], [link=http://ftgevwdhdcik.com/]ftgevwdhdcik[/link], http://xelyorlrfogu.com/

uswymvofuswymvof2012/12/12 11:06lsnSSk , [url=http://gpwkgmovwhgm.com/]gpwkgmovwhgm[/url], [link=http://ftgevwdhdcik.com/]ftgevwdhdcik[/link], http://xelyorlrfogu.com/

2012-10-13

ファイルの読み書き

| 00:12 | ファイルの読み書き - Pythonの覚書 を含むブックマーク はてなブックマーク - ファイルの読み書き - Pythonの覚書 ファイルの読み書き - Pythonの覚書 のブックマークコメント

ファイルの簡単な読み書き。ある文字列をファイルに書き込む。そして、ファイル全体を読み込むという処理を書いてみた。

Sample Code(サンプルコード)

>>> filePath ='test.txt'
>>> file = open(filePath,'w')
>>> file.write('1,2,3,4,5,6,7,8,9,10')
>>> file.close()
>>> file = open(filePath,'r')
>>> file.read()
'1,2,3,4,5,6,7,8,9,10'
>>> file.close()

リスト→文字列、文字列→リストの変換

| 23:53 | リスト→文字列、文字列→リストの変換 - Pythonの覚書 を含むブックマーク はてなブックマーク - リスト→文字列、文字列→リストの変換 - Pythonの覚書 リスト→文字列、文字列→リストの変換 - Pythonの覚書 のブックマークコメント

セパレータを','として複数の値を保持している文字列をリストに変換する。また、その逆も行う。

Sample Code(サンプルコード)

>>> s = '1,2,3,4,5,6,7,8,9,10'
>>> li = s.split(',')
>>> s
'1,2,3,4,5,6,7,8,9,10'
>>> li
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
>>> s2 = ','.join(li)
>>> s2
'1,2,3,4,5,6,7,8,9,10'