コース進捗 コース目次 24レッスン中 24件を公開中
Pythonの基礎
データとコレクション
信頼できるプログラムを作る
オブジェクトでモデル化する
プロフェッショナルなPython
上級Python
ラベルの付いた箱を開けよう
第1章のDream Cardでは、nameやdreamが答えを覚えていました。名前を、箱に貼ったラベルだと考えてみましょう。ラベルが指す中身は値、中身の種類は型、ラベルそのものが変数です。
- 値 Pythonが使う中身
- 変数 中身を指す名前
- 型 どんな中身か
5つの値をPythonに調べてもらいます。
print(type("Python"))
print(type(30))
print(type(3.5))
print(type(True))
print(type(None))
出力:
<class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'NoneType'>
ここではclassを「型」と読めば大丈夫です。strは文字列、intは整数、floatは小数の形を持つ数値です。boolはTrueかFalseのどちらか、Noneは「役立つ値がまだない」という特別な値です。
引用符で型が変わります。"12"は文字列、12は整数です。"False"も普通の文字列であり、真偽値のFalseではありません。
ラベルは別の値へ動かせる
等号を1つ使うと、名前へ値を代入できます。
minutes = 30
print(minutes)
minutes = 45
print(minutes)
出力:
30
45
2回目の代入で、minutesというラベルが新しい値へ動きました。「30と45は等しい」という意味ではありません。
minutes_per_dayやnumber_of_daysのように、役割が分かる名前を使いましょう。小文字の単語をアンダースコアでつなぐのが一般的です。名前を数字から始めたり、空白やハイフンを入れたりはできません。str、int、input、printも変数名にすると、同名の便利な機能を隠すので避けます。
計算結果にも名前を付けられます。
minutes_per_day = 30
days = 7
total_minutes = minutes_per_day * days
print(total_minutes)
print(total_minutes / 60)
出力:
210
3.5
Pythonでは、+、-、*、/に加え、切り捨て除算の//、余りの%、べき乗の**を使えます。掛け算と割り算は、足し算と引き算より先です。括弧で順番を見せると親切です。(10 + 5) * 2は30、10 + 5 * 2は20になります。
キーボードから届くのは文字列
数字を入力しても、input()は必ず文字列を返します。Pythonには、30が分数なのか、番地なのか、名前の一部なのか分からないからです。
- 30と入力 キーボードは文字を送る
-
"30"
input()はstr -
変換
int("30")は30 - 計算 数値のルールで動く
違いを見てみましょう。
first = input("1つ目の数:")
second = input("2つ目の数:")
print(first + second)
20と5を入力すると205です。文字列の+は連結だからです。入口で整数へ変えます。
first = int(input("1つ目の整数:"))
second = int(input("2つ目の整数:"))
print(first + second)
同じ入力で、今度は25です。整数の文字列にはint()、小数の文字列にはfloat()、意図的に文字列へ変えるときはstr()を使います。
f-stringなら、文字列と値を読みやすく並べられます。
topic = "Python"
hours = 210 / 60
print(f"{topic}を{hours:.1f}時間学習します。")
出力:
Pythonを3.5時間学習します。
先頭のfにより、波括弧の式が文字列へ入ります。.1fは小数点以下1桁という見せ方だけを変え、保存された値は変えません。
学習時間計算ツールを作ろう
Pythonの組み込み機能だけで動く、完全なミニプロジェクトです。study_time.pyへ保存してください。
- 聞く テーマ、分数、日数
- 計算する 毎日の時間 × 日数
- 見せる 読みやすい計画
topic = input("学習テーマ:")
minutes_per_day = int(input("1日あたりの学習時間(分):"))
days = int(input("学習日数:"))
total_minutes = minutes_per_day * days
total_hours = total_minutes / 60
print()
print(f"テーマ:{topic}")
print(f"毎日の学習:{minutes_per_day}分")
print(f"合計:{total_minutes}分")
print(f"総学習時間:{total_hours:.1f}時間")
python3 study_time.pyで実行し、Python、30、7と入力します。最後の4行を確認してください。
テーマ:Python
毎日の学習:30分
合計:210分
総学習時間:3.5時間
次は自分で答えを予想してから、45分を4日で試します。180分、3.0時間なら成功です。
3つの小さなチャレンジと注意点
- 型の探偵。
"7"、7、7.0、False、Noneの型を予想してから、type()で確かめます。 - 温度カード。
float()で摂氏を受け取り、celsius * 9 / 5 + 32を計算して小数点以下1桁で表示します。20なら68.0です。 - 長い計画。
weeksを追加し、total_daysを求めてから、合計分数と時間を分かりやすい変数名で計算します。
注意点:int("三十")やint("30.5")はValueErrorになります。今は質問どおりの数値を入力しましょう。0は計算できますが、負の学習時間は現実の計画として不自然です。第10章で、不正な入力へやさしく対応します。
判断する準備はできたかな?
- 値、変数、型を区別できる
-
str、int、float、bool、Noneを見分けられる - 分かりやすい変数名へ代入と再代入ができる
- 算術演算と括弧を使える
-
input()が必ず文字列を返すと説明できる - 入力を変換し、f-stringで結果を整えられる
- 計算ツールで30 × 7から210分、3.5時間を出せる
- 3つの小さなチャレンジを終えた
次章では、真偽値の質問を作り、その答えによって道を選んだり、同じ仕事を繰り返したりします。