2012年5月17日木曜日

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

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

  • 0、0.0はFalseであるが、それ以外の値はTrue

1

>>> True and not False
True
>>> True or True and False
True
>>> not True or not False
True
>>> True and not 0
True
>>> 52 < 52.3
True
>>> 1 + 52 < 52.3
False
>>> 4 != 4.0
False

2

後半のルールはよくない。被演算子のうち、0やFalseになるものを返すべきである。例えばx = 3 and 0はFalseだが、3を返すのはTrueを意味することになるので矛盾する。

3

>>> z = x and y # a)の解答
>>> z = not x # b)の解答
>>> z = x or y # c)の解答

4

>>> result = full or empty

5

友人の発言は正しい。二つの論理値がTrueとFalseという異なった値になっているときにifの中がTrueになるようにできているからである。

6

>>> x = -1
>>> result = x == abs(x)
>>> result
False

7

def different(a, b):
    return a != b

8

population = 10000
land_area = 200
if population > 10000000:
    print population

if 10000000 >= population >= 35000000:
    print population

if population / land_area > 100:
    print "過密"

if population / land_area > 100:
    print "過密"
else:
    print "過疎"

9

wikipediaで温度変換の公式を参照せよということなのですが、多少変更が加えられたのか、Newtonなどの温度へ変換する公式が指定されたページ内に見つからないため、全部実装するのは断念しています。考え方のみ参考にしてください。b)の解答は新しい単位を追加すると、if文を2回追加することになります。これはsourceをセルシウス度に変換するときに1度、セルシウス度からtargetに変更するのに1度追加する必要があるためです。

def temperatures(t, source, target):
    ''' Kelvin, Celsius, Fahrenheit, Rankine, Delisle, Newton, Reaumur
        とあるのだが、wikipediaでは最初の4つしかないので、4つのみで実装する
    '''
    if source == 'Kelvin':
        temp = float(t) - 273.15
        pass
    elif source == 'Celsius':
        temp = float(t)
        pass
    elif source == 'Fahrenheit':
        temp = (t - 32) * 5.0 / 9
        pass
    elif source == 'Rankine':
        temp = (t - 491.67) * 5.0 / 9
        pass
    else:
        return 'Error in source'

    if target == 'Kelvin':
        return temp + 273.15
    elif target == 'Celsius':
        return temp
    elif target == 'Fahrenheit':
        return temp * 9.0 / 5 + 32
    elif target == 'Rankine':
        return (temp + 273.15) * 9.0 / 5
    else:
        return 'Error in target'

print temperatures(10, 'Celsius', 'Celsius')
print temperatures(10, 'Celsius', 'Kelvin')

10

先に3.0未満か評価した。もしくは最初のifで3.0以上7.0未満で「酸性」と表示するような変更をしてもよいでしょう。

ph = 2.5
if ph < 3.0:
    print "%sは強酸性です。注意してください。" % ph
elif ph < 7.0:
    print "%sは酸性です。" % ph

11

a)、b)はどちらも"酸性です!"と表示される。c)の解答は以下の通り。

ph = float(raw_input("ph値を入力してください"))
if ph < 7.0:
    print "酸性です!"
if ph < 4.0: # elifからifに書き換える
    print "強酸性です!"

12

以下のようにすれば同じように書き換えればよい。

age = 30
bmi = 19.2
table = [['高', '中'], # 中、高を入れ替えておく
         ['中', '低']] # 低、中も同様
young = age < 45
light = bmi < 22.0 # heavy = bmi >= 22.0からの書き換え 
risk = table[young][light]
print risk

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計