Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
マトリクス構造解析 第10回
[go: Go Back, main page]

 

[Google] [情報統括センター] [WebClass] (構力I) (構力II) (構造メモ) (構造実験) (Fortran) (Ruby) (後藤資料)

マトリクス構造解析II 第2回

(マトリクス構造解析 第10回)

YouTube授業動画リスト

小さい字は補足説明なので、読み飛ばしてもいいです。

このページのオリジナルの作者は 後藤文彦です。
クリエイティブ・コモンズ・ライセンス
マトリクス構造解析オンライン授業用テキスト
第10回オンライン授業

目次

プログラム例題(if文、while文)

 ただ長方形の面積を求めるだけでは面白くないので、 短辺を長辺より長く入れたら警告を表示して計算してくれないプログラム (menseki2.py)を作ってみよう。


tanpen = float(input("長方形の短辺を入力して下さい: "))
tyouhen = float(input("長方形の長辺を入力して下さい: "))
if tanpen < tyouhen:
    menseki = tanpen * tyouhen
    print("長方形の面積は:", menseki)
else:
    print("短辺が長辺より長いので計算しません")

ここで登場する

if 条件A:
    処理B
else
    処理C

という構文は、条件Aを満たす場合は、処理Bを実行し、 満たさない場合は処理Cを実行しなさいということ。 処理Bと処理Cは、(左端に半角スペースを入れて)インデントして書かなければならない (ifの下の行でインデントがそろっている行が処理B、 elseの下の行でインデントがそろっている行が処理Cと解釈される)。
「条件Aを満たす場合は、処理Bを実行しなさい」ということだけを指定し、 条件Aを満たさない場合は、特になにもしないということであれば、 以下のように else以下 は書かなくていい。

if 条件A:
    処理B

さて、上のmenseki2.pyの場合、

if tanpen < tyouhen:
    menseki = tanpen * tyouhen
    print("長方形の面積は:", menseki)

もし「tanpen < tyouhen」が「真」であれば、 インデントでそろえられた行に書いてある処理を実行しなさいということで、 ここは、インデントをそろえて1文字以上のスペースを入れて書く必要がある。 インデントは半角スペース4文字が推奨されているようなので、 半角スペース4文字としておこう。

else:
    print("短辺が長辺より長いので計算しません")

else: の下の行は、 もし「tanpen < tyouhen」が「偽」だったときにする処理で、 この処理もインデントして書く必要がある。 処理が複数行ある場合はインデントをそろえなければならない。

比較演算子など

if文の中の条件文に使う比較演算子は、以下のように書く。 「BをAに代入する」ときは、A=Bを用いたが、 if文で「AとBが等しい」ことを表すのは、A==Bを用いて代入を表す=とは 区別しているので注意すること。

a==baとbが等しいならば
a!=baとbが等しくないならば
a > baがbより大きいならば
a >= baがb以上ならば
a < baがbより小さいならば
a <= baがb以下ならば

複数の条件を「かつ」や「または」で組み合わせたいときは、 andや orを使う。 例えば、 a<x かつ x<b なら if a<x and x< b: と書くし、 x<a または b<x なら if x<a or b<x: と書く。 簡潔に書く場合は、 if a < x < b:や if not (a <= x <= b):のような書き方もできる。

aとbが整数型であれば、a==b は意味を持つが、 aとbが実数型の場合、a==b というのは、 高精度の数値計算を行っている場合は、ほぼ起きないことである。 計算の結果、ちょうど a==10になるときといっても、 実数型の場合、 実際には、a=9.99999999999だったり、a=10.000000001だったりなわけである。 だから、例えば小数第1位を四捨五入して 10.0であれば、10とみなして処理する ということであれば、 if 9.95<a<10.05: とかif abs(a-10)<0.05: みたいに書くのが厳密である。 とはいえ、floatで実数化された変数に対して==で判定したとしても、 ある精度内で等しいと判定してくれるようだ (動画の後半で実験してみた)。

 さて、短辺を長辺より長く入れたら計算しないで終わってしまうのでは 今ひとつ面白みがないので、 短辺を長辺より短く入れてくれるまでデータ入力を繰り返す プログラム(menseki3.py)を作ってみよう。


while True:
    tanpen = float(input("長方形の短辺を入力して下さい: "))
    tyouhen = float(input("長方形の長辺を入力して下さい: "))
    if tanpen < tyouhen:
        break
    print("短辺は長辺より短くして下さい")

menseki = tanpen * tyouhen
print("長方形の面積は:", menseki)

ここで登場する

while True:
    処理A
    if 条件B:
        break
    処理C

処理D

という構文は、 まず、処理Aを実行し、条件Bを判定して「真」だったら、処理Cを実行せずに、 処理Dに進むが、 条件Bを判定して「偽」だったら、処理Cを実行してから、また上に戻って、 処理Aから順番に実行していくということ。 つまり、条件Bが満たされない限りはいつまでも処理A, 処理Cを繰り返し、 処理Dには進めないということ。

プログラム課題2:

menseki3.py を参考にして、 ある条件 (例えば「体積が1000以上になる」とか) を満たすまでデータ入力を繰り返し、 三角形・台形などの幾何学図形の面積や、 円錐・球などの立体の体積を求めるプログラムを作りなさい (長方形の面積はここに書いてあるのでダメ)。 WebClassの「プログラム課題2」から、 プログラム本体(例えば kadai2.py とか)を提出し、 こんな感じの 実行画面 (仮にエラーが取れずにどうしても実行できなかった場合は、 エラーが出ている画面) をテキストエディター(gedit等)に貼り付けて保存したファイル(kekka.txtとか)を 提出する。

先頭目次

サンプルプログラム

以下は、参考までに動画内で作っていたクイズのプログラム。 「#」から改行までは、コメントとなるのでプログラムと関係ないことを書ける。 プログラムの一部を無効にしたい場合に、 その行頭に「#」をつけて、その部分を無効にすることを 「コメントアウトする」と言ったりする。

#クイズのプログラム

print("次の作曲家で最も生誕年が早いのは?")
print("1. バッハ      ") #(1685-1750)
print("2. ビバルディ  ") #(1678-1741)
print("3. ブラームス  ") #(1833-1897)
print("4. ベートーベン") #(1770-1827)
print("5. ボロディン  ") #(1833-1887)
while True:
    n = int(input("番号を入力してください: "))
    if n == 2:
        print("正解です!")
        break
    else:
        print("不正解です!")
        print("選び直して下さい")