2012年5月13日日曜日

初めてのコンピュータサイエンス第4章解答

第4章の解答を上げます。以下ネタバレなので、読みたくない方は立ち去りましょう。問題文は載せませんので悪しからず。必要なら買いましょう。その前にこの章の個人的なメモ。

  • import文は実行も同時に行っている。つまり、importするライブラリにprint関数があると、それが実行され、何か表示されるということになる。
  • builtin変数の__main__は重要。これにより実行しているファイルがimportする側なのか、importされた側なのか判別できる
  • python2.7でmediaモジュールを動かすときはこちらを参考に各種モジュールをインストールする。
  • サンプルで紹介されている画像pic207.jpgはこちらにある。ただし、テキストで利用している実物とは若干違うように思われる。

1

import math

print abs(round(-4.3))
print math.ceil(math.sin(34.5))

2

# b)の解答
import calendar
year = 2013
while True:
    if calendar.isleap(year):
        print year # 2016が表示される
        break
    year += 1
# c)の解答
help(calendar.isleap)

# isleap関数を用いたd)へのアプローチ方法
def nLeap(rng):
    nleap = 0
    for i in rng:
        if calendar.isleap(i):
            nleap += 1
    return nleap

# 1行が長いコードになる場合は\で続けて入力できる
print 'The number of leap year between %d to %d = %d' % \
 (2000, 2050, nLeap(range(2000, 2051)))

# d)の解答
print calendar.leapdays(2000, 2051)

# e)の解答
# help(calendar.weekday)
# 1が返されるので火曜日になる。0が月曜日~6が日曜日という仕様である。
print calendar.weekday(2016, 7, 19)

3

>>> 'boolean'.upper() # a)の解答
'BOOLEAN'
>>> 'C20 H20'.find('2', 0) # b)の解答
1
>>> 'C20 H20'.find('2', 2) # c)の解答。添え字1に'2'があるので2から後ろを探索する
5
>>> 'Boolean'[0].isupper() # d)の解答
True
>>> 'MoNDaY'.lower().capitalize() # e)の解答、文字列処理のメソッドは次々とかませられる
'Monday'
>>> ' Monday'.strip() # f)の解答
'Monday'

4

実数ではなく、文字列として表記しようとしているから。

5

mediaモジュールは特定の用途に限られているから標準ライブラリに含んでいない。標準モジュールに組み込むか否かの基準としては、標準的なデータに関わる操作に限ったものと思われる。標準ライブラリに含まれていないものについてはググル、もしくはPyPIで探すとよいでしょう。

6

import media
f = media.choose_file()
pic = media.load_picture(f)
media.show(pic)
media.show(pic)

7

import media
f = media.choose_file()
pic = media.load_picture(f)
for p in media.get_pixels(pic):
    media.set_red(p, 0)
media.show(pic)

8

import media
f = media.choose_file()
pic = media.load_picture(f)
for p in media.get_pixels(pic):
    media.set_green(p, media.get_green(p)/2)
media.show(pic)

9

import media
f = media.choose_file()
pic = media.load_picture(f)
for p in media.get_pixels(pic):
    col = media.get_color(p)
    col.r = col.b = col.g = (col.r + col.g + col.b)/3
    # set_colorメソッドは3色をまとめたオブジェクトが必要であることに注意!
    media.set_color(p, col)

media.show(pic)

10

ValueError: Invalid red value specified.というメッセージが出てエラーになる

import media
pic = media.load_picture(media.choose_file())
for p in media.get_pixels(pic):
    new_r = media.get_red(p) * 2
    media.set_red(p, new_r)

media.show(pic)

11

メディアは変更を加えていないイメージだけ利用するという制約は必要ないものと思われる。より画像をきれいに見えるようにする処理など、事実を的確に伝えるのに必要な処置はあってしかるべきと思われる。

12

a)について。浮動小数点を含む計算において、その値がある値になっているか評価するのは、丸め誤差が含まれていることがほとんどなので、難しくなってしまう。

b)について。距離の計算結果と想定される値の差が10^-6以下であれば、テストに合格と判断している。問題点としては10^-6という値の設定理由が不明瞭であること、またx0とx1を入れ替えたケースを追加することが必要になるということである。2点間のユークリッド距離を計算するのに4つの値が現れるが、そのうち、変化する値が2種類しかないのは心もとない。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計