ちこり学習日記 6日目

前回の振り返り

前回は以下のことをしました。

実践力を身につける Pythonの教科書 に取り組む(Chapter 2-3 文字列について まで)


今日の取り組み

Chapter 2-4 ユーザーから入力を得る方法 から。
出力があるなら入力もあります。さっくりとやっていきましょう。

# 名前を入力
name = input("名前を入力してください-> ")
# 名前を表示
print(name + "さん、こんにちは。")


無事に出来ました。

次は数値を入力してみます。

# 変換の元となる値
per_inch = 2.54
# ユーザーから入力を得る
inch = input("inch?->")
#計算
cm = inch * per_inch
# 出力
desc = "{0}inch = {1}cm".format(inch, cm)
print(desc)


TypeError: can't multiply sequence by non-int of type 'float'というエラーが出て来てしまいました。
上手く訳せないのですが掛け算が出来ないよって感じでしょうか...
本にはこう書いてあります。

ユーザーから入力されたデータは、文字列型であって、数値の型に対してかけ算を行うことはできないのです。
クジラ飛行机『実践力を身につける Pythonの教科書』 51ページ(マイナビ出版・2016年)

なるほど!入力したデータをfloat型にしてあげないといけない訳ですね。
ということで型変換してみましょう。

# 変換の元となる値
per_inch = 2.54
# ユーザーから入力を得る
user = input("inch?->")
# float型に変換
inch = float(user)
#計算
cm = inch * per_inch
# 出力
desc = "{0}inch = {1}cm".format(inch, cm)
print(desc)


無事に出来ました。
文字列に変換したい時はstr()、整数に変換したい時はint()、浮動小数点数に変換したい時はfloat() を使えばいいんですね。楽ちん。

PythonC++とかJavaのように「int i」のような書き方をしないので、この変数はどんな型?となることがあります。
変数の型を調べるtype()関数が用意されているそうです。これで調べれば安心。
REPLで試してみます。

ちゃんと出来ました。


Chapter2-5 制御構文(1)条件分岐について に入ります。if文です。
if文を使うにあたって比較演算子が出てきます。以下のリンクに説明が載っているので比較演算子ってなんぞや?って方は見てみてください。

比較演算子 - 条件分岐 - Python入門

ユーザーが数値を入力して、偶数か奇数か判断する簡単なプログラムを作ってみます。

num = int(input("数字は?->"))

if (num % 2 == 0):
    print("偶数です")
else:
    print("奇数です")


この場合、0は偶数です。
PythonC++のように中括弧で括らないのでどうにも慣れません... あと「:」をよく付け忘れてエラーを起こします。

次はbool型と倫理演算について。
bool型とは真(True)と偽(False)の2つだけの値を持つ型です。
倫理演算とは「and」とか「or」とかそういうやつです(説明が雑...)
実行例を見た方が早いと思います。試してみましょう。

and演算はこんな感じ。aとbがどちらとも真ならTrueを返します。それ以外はFalseを返します。

or演算はこんな感じ。aかbどちらかが真ならTrueを返します。それ以外はFalseを返します。
f:id:rosachico:20180617172751p:plain notは演算はこんな感じ。aが真ならFalseを返し、偽ならTrueを返します。

次は「elif」です。他の言語で言うと「else if」です。
「elif」って、「了解」を「り」みたいに短くしなくても... と最初はアレルギー反応を起こしましたが最近は落ち着いてきました。
ユーザーが西暦を入力し、その年はうるう年かどうかの判定プログラムで試してみます。

# 西暦の入力と判定
year = int(input("西暦を入力してください。->"))
uru = False
if(year % 400 == 0):
    uru = True
elif(year % 100 == 0):
    uru = False
elif(year % 4 == 0):
    uru = True
else:
    uru = False

# 結果を表示
if uru:
    print("{0}年はうるう年です。".format(year))
else:
    print("{0}年はうるう年ではありません。".format(year))


無事に出来ました。

if文で真の時は処理をしないで偽の時だけ処理をしたい!といった時に使えそうなpass文というものがPythonにはあるみたいです。
少し試してみます。

n = 3
if(n == 2):
    pass
else:
    print(n)


「else」の時の出力処理が出来ているのが分かります。すごいなpass文。C++とかにもあるのかな?
キリがいいので今日のPythonはここまで。