2011年2月14日月曜日

『始めてのコンピューターサイエンス』第03章 演習問題

練習問題
(1) 次の式が、それぞれどのような値を返すでしょうか

>>> 'Comp' 'Sci'
'CompSci'
>>> 'Computer' + ' Science'
'Computer Science'
>>> 'H2O' * 3
'H2OH2OH2O'
>>> 'CO2' * 0
''



(2) 適当なクォートとエスケープシーケンスを使って、Python 文字列として表現してください

>>> print 'They\'ll hibernate during the winter.'
They'll hibernate during the winter.
>>> print '"Absolutely not," he said.'
"Absolutely not," he said.
>>> print '"He said, \'Absolutely not,\'" recalled Mel.'
"He said, 'Absolutely not,'" recalled Mel.
>>> print 'hydrogen sulfide'
hydrogen sulfide
>>> print "left" + "\\" + "right"
left\right



(3) トリプルクォートではなく、シングルクォートかダブルクォートを使って次の文字列を書き直す
‘’’A
B
C’’’


>>> print "'''A\nB\nC'''"
'''A
B
C'''



(4) 組み込み関数の len を使って、空文字列の長さを調べて下さい
>>> len("")
0



(5) それぞれ数を参照するメッセージをx, y変数を使って表現しなさい

>>> x = 3
>>> y = 12.5
>>> print "The rabit is %d." % x
The rabit is 3.
>>> print "The rabit is %d years old." % x
The rabit is 3 years old.
>>> print "%d is average." % y
12 is average.
>>> print y, " is average."
12.5 is average.
>>> print y, "*", x
12.5 * 3
>>> print y, "*", x, "=", x * y
12.5 * 3 = 37.5



(6)以下の出力を得るためには、どのような書式文字列を使えば良いか?
a) “ “ % 34.5 => “34.50”
b) “ “ % 34.5 => “3.45e+01”
c) “ “ % 8 => “0008”
d) “ “ % 8 => “8 “

>>> "%.2f" %34.5
'34.50'
>>> "%.2e" %34.5
'3.45e+01'
>>> "%04d" % 8
'0008'
>>> "%d " % 8
'8 '



(7) raw_inputを使ってユーザーに数値の入力を促し、入力された数値をfloat型のnum変数に格納して、numを表示してください。

>>> string = raw_input()
3.4
>>> num = float(string)
>>> num
3.3999999999999999

なんでだろ?文字列をfloat型に変換すると、何かが起きている。また調べてみよう。



(8) Pythonで2つの文字列を隣り合わせで入力すると、Pythonは自動的に2つの文字列を連続します。

しかし、同じ文字列を変数に格納してから変数を横に並べると、構文エラーになります。(以下参照)
Pythonがこれを認めないのは、なぜだと思いますか?

>>> 'abc' 'def'
'abcdef'
>>> left = 'abc'
>>> right = 'def'
>>> left right
File "<stdin>", line 1
left right
^
SyntaxError: invalid syntax

<見解>
”変数に格納する”だからです。”right”,”left” は変数を格納する箱だと思えばいいです。箱は、どのように扱われるべきかを示さないといけない、といった方が人間にとって都合が良いと思います。
>>> right
'def'
>>> left
'abc'
>>> left = right
>>> left
'def'
>>> left = 'abc'
>>> left + right
'abcdef'



(9) 文字列に負数を掛け合わせときに、空文字列を返すのではなく、エラーを起こすべきだと考えている人々がいます。彼らがそのように考える理由を説明しなさい。また自分なりの意見を説明しなさい。

>>> s = 'Taichi Shindo'
>>> s * (-1)
''

<見解>
文字列に(-1)を掛けて、空文字列が返ってくる。どういうことが内部で行われているのかがよく分からないです。その内部で起こっていることが人間にとって理解できないものなら、エラーで返す方が都合がいいです。


0 件のコメント:

コメントを投稿