JEPA4Japan · チュートリアル

値・変数・型

1,774文字 5分で読めます #Python

名前と値の関係、基本の型、型変換、計算、見やすい出力を学びます。

コース進捗 コース目次 24レッスン中 24件を公開中

ラベルの付いた箱を開けよう

第1章のDream Cardでは、nameやdreamが答えを覚えていました。名前を、箱に貼ったラベルだと考えてみましょう。ラベルが指す中身は値、中身の種類は型、ラベルそのものが変数です。

  1. 値 Pythonが使う中身
  2. 変数 中身を指す名前
  3. 型 どんな中身か
変数はラベル、値は中身、型は中身の種類です。

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が分数なのか、番地なのか、名前の一部なのか分からないからです。

  1. 30と入力 キーボードは文字を送る
  2. "30" input()はstr
  3. 変換 int("30")は30
  4. 計算 数値のルールで動く
入力は文字列で届き、数値が必要な入口で変換します。

違いを見てみましょう。

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へ保存してください。

  1. 聞く テーマ、分数、日数
  2. 計算する 毎日の時間 × 日数
  3. 見せる 読みやすい計画
文字列を受け取り、数値を変換し、名前を付けた結果を表示します。
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つの小さなチャレンジと注意点

  1. 型の探偵。 "7"、7、7.0、False、Noneの型を予想してから、type()で確かめます。
  2. 温度カード。 float()で摂氏を受け取り、celsius * 9 / 5 + 32を計算して小数点以下1桁で表示します。20なら68.0です。
  3. 長い計画。 weeksを追加し、total_daysを求めてから、合計分数と時間を分かりやすい変数名で計算します。

注意点:int("三十")やint("30.5")はValueErrorになります。今は質問どおりの数値を入力しましょう。0は計算できますが、負の学習時間は現実の計画として不自然です。第10章で、不正な入力へやさしく対応します。

判断する準備はできたかな?

  • 値、変数、型を区別できる
  • str、int、float、bool、Noneを見分けられる
  • 分かりやすい変数名へ代入と再代入ができる
  • 算術演算と括弧を使える
  • input()が必ず文字列を返すと説明できる
  • 入力を変換し、f-stringで結果を整えられる
  • 計算ツールで30 × 7から210分、3.5時間を出せる
  • 3つの小さなチャレンジを終えた

次章では、真偽値の質問を作り、その答えによって道を選んだり、同じ仕事を繰り返したりします。