7.3. 第2章 Pythonの基本


型と算術演算


データの種類のことを「型」とよぶ

はじめから準備されている型「組み込み型」

型名(日本語表記)

値の例

int

整数型

-1, 0, 1, 2, 10, 100

float

浮動小数点型

小数点を含む数 -0.12, 0.0, 0.5,2.34

str

文字列型

'hello', 'こんにちは'

bool

真偽値

True, False


type関数による型の確認

type(値) または type(変数名) で型を確認できる

type(10)
<class 'int'>      <--- 10はint型

type(0.5)
<class 'float'>  <--- 0.5はfloat型 

type('こんにちは')
<class 'str'>   <--- 'こんにちは'はstr型

type(True)
<class 'bool'>   <--- Trueはbool型
a = 10          <--- 変数aに10を代入
type(a)
<class 'int'>  <--- aの値はint型

b = 'こんにちは' <--- 変数bに'こんにちは'を代入
type(b)
<class 'str'>  <--- bの値はstr型

算術演算

覚えるべき用語

46


変数を含む算術演算

式に変数名が含まれる場合は、 変数に代入されている値が使用される

a = 10         <--- 変数aに10を代入
print(a + 3)   <--- 式a + 3の値を出力
13

(変数aの値)+3 が変数bに代入される

b = a + 3

(変数aの値)+3 が変数aに代入される
つまりaの値が3増える

a = a + 3

算術演算の短縮表現

48


数値の型

プログラムコードへの記述のしかたで、型が異なる。

  • 小数点を含まない → int型

  • 小数点を含む → float型

type(0)
<class 'int'>     <--- 0と言う表記はint型

type(0.0)
<class 'float'>  <--- 0.0と言う表記はfloat型

演算と数値の型

  • int型どうしの加算・減算・乗算 → int型

  • int型どうしの除算 → float型

  • float型を含む演算 → float型

type(3 + 2)
<class 'int'>   <--- int型どうしを加算,減算,乗算した結果はint型

type(3 -2)
<class 'int'>

type(3 * 2)
<class 'int'>

type(3 / 2)
<class 'float'>  <--- int型どうしを除算した結果はfloat型

type(4 / 2)
<class 'float'>  <--- 割り切れる場合でもfloat型

数値の型変換

int型 → float型 変数aは float 型になる

a = float(100)
100.0

float 型 → int 型 変数aは int 型になる小数点以下は切り捨て

a = int(9.6)
9

文字列とリストの扱い


文字列の扱い

+演算子による文字列の連結

a = 'AAA' + 'BBB'
AAABBB
a = 'AAA'
b = 'BBB'
c = a + b
AAABBB

*演算子による連結の繰り返し

a = 'ABC' * 3 
ABCABCABC

数値→文字列の変換

数値を文字列のようには扱えない

× a = 500 + '円' 

str(数値)で文字列に変換する

 a = str(500) + '円' 

yearの値(int型)を文字列に変換してから連結

year = 2021
print(str(year) + '年')
2021

変数の値の埋め込み

数値を文字列に変換してから連結

price = 550
print('この商品は' + str(price) + '円です')
この商品は550円です

フォーマット文字列を使用して簡潔に記述できる

price = 550
print(f'この商品は{price}円です')
この商品は550円です

f'文字列' とすると、文字列に含まれる {変数名} 部分が変数の値に置き換わる


フォーマット文字列の活用

フォーマット文字列

f'文字列' とすると、文字列に含まれる {変数名} 部分が変数の値に置き換わる

{変数名} 部分に式を入れることもできる
a = 5
b = 550
print(f'1つ{a}円です。{b}個で{a * b}円です')
1つ5円です。550個で2750円です

文字列→数値の変換

文字列を数値のようには扱えない

a = '500'   <--- 文字列
b = a * 2   <--- bの値は'500500'になる

int(文字列)で整数に変換する

a = '500'
b = int(a) * 2  <--- bの値は1000になる

len関数による文字列の長さの取得

len(文字列) で文字列の長さ(文字数)を取得できる

len('Hello')
5
a = 'Python'
len(a)
6

数値の指数表現

59

print(2.5e-4)
0.00025
print(2.5e4)
25000.0

リスト

リストを使って、複数の値をまとめて管理できる

a = [10, 20, 30, 40, 50]

リストに格納された要素には、インデックスを使ってアクセスする

print(a[0])   <--- 先頭の要素
10
print(a[1])   <--- 2番目の要素
20
print(a[4])   <--- 2番目の要素
50

※ インデックスは0から始まる


マイナスのインデックス

a = [10, 20, 30, 40, 50]

インデックスにマイナスの値も使える

print(a[-1])   <--- 末尾の要素
50
print(a[-2])   <--- 後ろから2番目の要素
40
print(a[-5])   <--- 後ろから5番目の要素
10

リスト内の値の変更

インデックスを指定して値を変更できる

a = [10, 20, 30, 40, 50]
print(a)      <--- リストの全要素を出力
[10, 20, 30, 40, 50]
a[0] = 99     <--- 先頭の要素を99に変更
print(a)
[99, 20, 30, 40, 50]
a[-1] = 'A'   <--- 文字列にもできる
print(a)
[99, 20, 30, 40, 'A']

リストの要素数の確認

len関数でリストの要素数を取得できる

a = [10, 20, 30, 40, 50]
len(a)
5

モジュールの利用


モジュールの使用

  • モジュールとは各種の機能を管理する単位

  • 必要に応じてモジュールを読み込んでプログラムを作る
    (「モジュールをインポートする」という)

import モジュール名
  • mathモジュールをインポートすると、sin, cos などの関数を使用できるようになる

import math

mathモジュールに含まれる関数・定数

66-1

66-2


mathモジュールの利用

mathモジュールのインポート

import math

mathモジュールに含まれる関数の利用

math.関数名(引数)
import math          <--- mathモジュールをインポート
print(math.sqrt(2))  <--- sqrt関数で2の平方根を計算
1.4142135623730951
print(math.floor(12.345))  <--- floor関数で小数点以下を切り捨て
12

mathモジュールの利用

mathモジュールに含まれる定数の利用

math.定数名
import math
print(math.pi)
3.141592653589793

randomモジュールの利用

random モジュールに含まれる関数

関数

説明

random()

0以上1未満の浮動小数点を返す

randrange(x)

0から(x-1)までの整数を返す

choice(x)

listからランダムに1つ選んだ要素を返す

randint(a, b)

a以上b以下のランダム整数を返す

import random
random.randint(1, 6)
3   <--- 実行のたびに異なる値が出力される

randomモジュールの利用

import random           <--- すでにrandomモジュールをインポートした後であれば記述は不要
janken = ["グー", "チョキ", "パー"]   <--- 3つの要素を持つリスト
random.choice(janken)   <--- リストjankenに含まれる要素からランダムに1つ選ぶ
グー                    <--- 毎回結果は異なる

モジュールに別名をつけて使う

import モジュール名 as 別名
import math as m      <--- mathモジュールの別名をmとする
print(m.pi)           <--- 別名を使って記述
3.141592653589793

ドキュメントを読む

Pythonの標準ライブラリのドキュメント

https://docs.python.org/ja/3/library/index.html

72


モジュールに含まれる関数を調べる

標準ライブラリ」のページ右上の「モジュール」のリンクから「math」を探してみよう。
ブラウザの「検索」機能も使ってみよう([Ctrl]+[F])

https://docs.python.org/ja/3/library/math.html#module-math

73


練習問題


問題 1

以下の記述について、正しいものには○を、誤りのあるものには×をつけてください。

(1) 一度int型の値を代入した変数aに対して、後から文字列を代入することはできない。

(2) int型の値とfloat型の値を加算するときには、その前にint型の値をfloat型に型変換しておく必要がある。

(3) int型とfloat型の値を含む算術演算の結果はfloat型になる。

(4) a = int(3.8)と記述した場合、変数aの値は4になる。


問題 1(解答)

以下の記述について、正しいものには○を、誤りのあるものには×をつけてください。

×(1) 一度int型の値を代入した変数aに対して、後から文字列を代入することはできない。

×(2) int型の値とfloat型の値を加算するときには、その前にint型の値をfloat型に型変換しておく必要がある。

〇(3) int型とfloat型の値を含む算術演算の結果はfloat型になる。

×(4) a = int(3.8)と記述した場合、変数aの値は4になる。

(3になる)


問題 2

次の値を求める式を書いてください。

(1) 100を9で割った商

(2) 1000を7で割った余り

(3) 3の5乗


問題 2 (解答)

次の値を求める式を書いてください。

(1) 100を9で割った商

   100 // 9  

(2) 1000を7で割った余り

   1000 % 7  

(3) 3の5乗

   3 ** 5

問題 3

次の命令文を、加算代入(+=)、減算代入(-=)、乗算代入(*=)、除算代入(/=)、剰余代入(%=)の演算子を使って、短い表現に書き換えてください。

(1) a = a + 5

(2) b = b – 6

(3) c = c * a

(4) d = d / 3

(5) e = e % 2


問題 3 (解答)

次の命令文を、加算代入(+=)、減算代入(-=)、乗算代入(*=)、除算代入(/=)、剰余代入(%=)の演算子を使って、短い表現に書き換えてください。

(1) a = a + 5

   a += 5

(2) b = b – 6

   b -= 6

(3) c = c * a

   c *= a

(4) d = d / 3

   d /= 3

(5) e = e % 2

   e %= 2

問題 4

次のプログラムコードを実行した後の変数aの値を答えてください

(1)

a = 3
a *= 3

(2)

b = 2
a = b * b

(3)

a = int(1.9)

(4)

x = 'XXX'
y = 'YYY'
a = x + y


問題 4 (解答)

次のプログラムコードを実行した後の変数aの値を答えてください

(1)

a = 3
a *= 3
9

(2)

b = 2
a = b * b
4

(3)

a = int(1.9)
1

(4)

x = 'XXX'
y = 'YYY'
a = x + y
XXXYYY


問題 5

「私は21歳です。」という文字列が出力されるように作成した次のプログラムコードは、実行するとエラーが発生します。適切に動作するように修正してください

age = 21
print('私は' + age + '歳です。')

問題 5 (解答)

「私は21歳です。」という文字列が出力されるように作成した次のプログラムコードは、実行するとエラーが発生します。適切に動作するように修正してください

age = 21
print('私は' + age + '歳です。')
age = 21
print('私は' + str(age) + '歳です。')

フォーマット文字列を使う場合

age = 21
print(f'私は{age}歳です。')

問題 6

mathモジュールを利用して、cos(120°)の値を求めてください


問題 6 (解答)

mathモジュールを利用して、cos(120°)の値を求めてください。

import math
print(math.cos(math.radians(120)))

※ 別解

import math
print(math.cos(2 / 3 * math.pi))