2011年2月12日土曜日

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

Pythonを勉強し始めたものの、どうアウトプットすれば良いのだろうか....

『始めてのコンピューターサイエンス』に演習問題が載っていたので、自分なりの解答を導くことにしてみました。

練習問題
(1) 次の式は、それぞれどのような値を返すでしょうか。Python に式を入力して答えを確かめてください。
>>> 9 - 3
6
>>> 8 * 2.5
20.0
>>> 9 / 2
4
>>> 9 / -2
-5
>>> 9 % 2
1
>>> 9 % -2
-1
>>> -9 % 2
1
>>> 9 / -2.0
-4.5
>>> 4 + 3 * 5
19
>>> (4 + 3) * 5
35


(2) 単項のマイナスは、数値の符号を反転させます。同じように単項のプラスもあります。たとえば、Python は +5 の意味を理解しいます。x が -17 という値を持つとき、+x はどのような値を持つべきだと思いますか。符号には手をつけない方がよいのでしょうか。それとも絶対値関数と同じように、マイナス符号を取り除くべきでしょうか。Python シェルを使って、Python のふるまいを確かめてください。
>>> def f(x):
... return +(x)
...
>>> f(-17)
-17
<見解>
+について考えさせられた。僕たちは初等教育で、”+ (-17)” => “(+1) * (-17)” と考えるように教えつけられている。つまり、”- (-17)” => “(-1) * (-17)” で数値の符号が反転する。そういう考えで良いと思う。


(3) a. 新しい変数tempを作り、値24を代入してください
b. tempの値に1.8をかけ、32を加えて、摂氏から華氏に編案してください。
そして、計算結果の値をtempに代入してください。

>>> temp = 24
>>> temp = temp * 1.8 + 32
>>> temp
75.200000000000003


(4) a. 新しい変数 x を作り、値10.5を代入してください
b. 新しい変数 y を作り、値4を代入してください
c. x とy の合計を計算し、結果をxに代入してください

>>> x = 10.5
>>> y = 4
>>> x = x + y
>>> x
14.5
>>> y
4


(5) xの値が3の場合、 x += x - x という文をPythonが評価するときに起きることを箇条書きにして説明してください。
<見解>
・新しい変数xを作り、値3を代入
・x - x を評価する (結果は0)
・上で評価した値をxに加算する
>>> x = 3
>>> x += x - x
>>> x
3


(6) 関数名を付けるときの自分の考えを述べなさい
<見解>
例:convert_fahrenheit_to_celsius
カ氏温度をセ氏温度に変換する際の関数名。僕は、動詞を関数名の頭文字に持ってくるほうが、具体的に何を表す関数名かがすぐに理解できるので、そうするようにしています。


(7) アメリカでは、1ガロンあたりのマイル数で車の燃費を測ります。しかし、メートル法では、100kmあたりのリットル数で計算されるのが普通です。
  1. 1ガロン当たりのマイル数から100km当たりのリットル数に変換するconvert_mileageという関数を書いてください
  2. 20, 40 MPG(マイルパーガロン)について、関数が正しい値を返すことをテストしてください
  3. 正しい値を調べるためにどのような方法を使いましたか?
<solute_problem_2_7.py>
#encoding: utf8

def convert_mileage(mile):
        
'''1ガロン当たりのマイル数から100km当たりのリットル数に変換する'''
      
        # 1ガロンからリットル数に変換 (1ガロン = 約3.785リットル)
        # 1マイル数からkmに変換(1マイル = 約1.609メートル)
        # 数学的に解いてみる
      
        convert_literage = ( 3.785 * 100) / ( 1.609 * mile )
      
        
return convert_literage

>>> solute_problem_2_7.convert_mileage(20)
11.761963952765694
>>> solute_problem_2_7.convert_mileage(40)
5.8809819763828468

Google 電卓機能で確かめました。
        20 (mile / gallon) = 11.7607292 liter/100km
        40 (mile / gallon) = 5.88036458 liter/100km



(8) 仮引数と実引数の違いを説明してください
仮引数:関数定義時に使用される引数
実引数:その関数を実際に使用するときに関数に引き渡される引数

上の問題を例とすると
def convert_mileage(mile):  → mile が仮引数
>>> solute_problem_2_7.convert_mileage(20) → 20 が実引数

(参考:http://www.cc.kyoto-su.ac.jp/~yamada/ap/parameter_argument.html)


(9)
  1. km単位の距離と車の燃費を表す値を引数として、その距離を移動するために必要なガソリンの量をリットル単位で返す liters_needed という関数を定義してください。litters_needed関数は、前の問題で作ったconvert_mileage関数を呼び出さなければなりません
  2. liters_needed(150, 30) が 11.761938... 、liters_needed(100, 30) が 7.84129.... を返すことを確かめて下さい。
  3. 100と30を引数として、liters_needed を呼び出したとき、convert_mileageの引数はいくつですか?
  4. liters_needed(100, 30) という関数呼び出しは、convert_mileage 関数呼び出しを引き起こしますが、これら2つの関数のうち、さきに実行を終了するのはどちらですか?
<solute_problem_2_9.py>
#encoding: utf8

import solute_problem_2_7

def liters_needed(kilometer, mileage):
        
'''km単位の距離と車の燃費を表す値を引数として、その距離を移動するために必要なガソリンの量をリットル単位で返すliters_neededという関数を定義します'''
      
        # 与えられた燃費をもとに、100kmあたりのリットル数を求めます
        convert_mileage = solute_problem_2_7.convert_mileage(mileage)
      
        
# 与えられたkm単位の距離をもとに、必要なリットル数を求めます。
        liters_needed = (convert_mileage * kilometer) / 100
      
        return liters_needed


>>> solute_problem_2_9.liters_needed(150, 30)
11.761963952765694
>>> solute_problem_2_9.liters_needed(100, 30)
7.841309301843796

3) convert_mileageの引数は30
4) convert_mileageがさきに実行を終了する

(10) 組み込み関数abs, round, pow, int, float を使って次の式を解きなさい
>>> pow(3,7)
2187
>>> int(34.7)
34
>>> int(round(34.7))
35
>>> float(abs(-86))
86.0

0 件のコメント:

コメントを投稿