2012年3月26日月曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のIII部(ステートメント)13章(whileループとforループ)の練習問題を解いてみる。

1.

ループのelseブロックが実行されるのは、ループから抜け出したとき。(ただしbreak文によって抜け出した場合は除く。)

コード(TextWrangler)

#!/usr/bin/env python
#encoding: utf-8

i = 0
j = 0
while i < 10:
 print i
 i += 1
else:
 print 'elseブロック1'

while j < 10:
 print j
 j += 1
 if j == 5: break
else:
 print 'elseブロック2'

print '終了'

入出力結果(Terminal)

$ ./python_program.py
0
1
2
3
4
5
6
7
8
9
elseブロック1
0
1
2
3
4
終了
$

2.

Pythonで「カウンタ」を使用したループのコードを書くには、whileループの場合は問1のような方法、forループを使用する場合はrange関数を使った次のような方法がある。

入出力結果(Terminal)

$ python
Python 2.7.2 (default, Feb 12 2012, 23:50:38) 
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> for x in range(10):
...     print x
... 
0
1
2
3
4
5
6
7
8
9
>>> for x in range(0,10,2):
...     print x
... 
0
2
4
6
8
>>> quit()
$

3.

forループの反復処理は、処理対象のオブジェクトを引数として、iterというビルトイン関数が自動的に呼び出されて、nextメソッドを持つオブジェクトが戻される。

入出力結果(Terminal)

>>> l=[1,2,3,4,5]
>>> for x in l:
...     print x,
... 
1 2 3 4 5
>>> i=iter(l)
>>> i.next()
1
>>> i.next()
2
>>> i.next()
3
>>> i.next()
4
>>> i.next()
5
>>> i.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> 

4.

forループとリスト内包表記は、どちらも同様の処理を行える、同様の処理をforループからリスト内包表記に、あるいはその逆に書き換えることが出来る。

入出力結果(Terminal)

>>> l=[1,2,3,4,5]
>>> for i in range(len(l)):
...     l[i] = l[i]**2
... 
>>> l
[1, 4, 9, 16, 25]
>>> l=[1,2,3,4,5]
>>> l=[x**2 for x in l]
>>> l
[1, 4, 9, 16, 25]
>>> 

5.

Pythonの反復処理は、

  1. forループ
  2. リスト内包表記
  3. map関数(ビルトイン関数)
  4. sorted関数(ビルトイン関数)

等の種類がある。

6.

テキストのファイルの内容を1行ずつ読み込む場合、forループを使って次のようにすればいい。

入出力結果(Terminal)

>>> for line in open('python_program.py'):
...     print line,
... 
#!/usr/bin/env python
#encoding: utf-8

i = 0
j = 0
while i < 10:
 print i
 i += 1
else:
 print 'elseブロック1'

while j < 10:
 print j
 j += 1
 if j == 5: break
else:
 print 'elseブロック2'

print '終了'
>>> quit()

0 コメント:

コメントを投稿