変数とデータ構造(int, float, str, bool, None)
変数とは?
変数とは、データを格納するための名前付きの場所です。プログラム内で変数を使ってデータを保存し、後からそのデータを参照したり変更したりすることができます。Pythonでは、変数の宣言時にその型を指定する必要はなく、代入する値によって型が自動的に決まります。
例えば、x = 10
というコードでは、変数x
に整数の10を格納しています。x
はその後、プログラム内で何度も使うことができ、x
を使うことで値10を参照できます。変数はメモリ上に格納され、プログラムの実行中に必要なデータを保存する重要な役割を果たします。
変数の宣言と代入
x = 10 # 整数型(int)
y = 3.14 # 浮動小数点型(float)
name = "Alice" # 文字列型(str)
flag = True # 真偽値(bool)
nothing = None # None(何もないことを表す特殊な値)
pythonでは、変数を宣言した際に、その値に応じたデータ型が自動的に決定されます。x
には整数型(int
)、y
には浮動小数点型(float
)、name
には文字列型(str
)、flag
には真偽値(bool
)、nothing
にはNone
型がそれぞれ割り当てられます。pythonでは#
を使うことでコメントを書くことができます。#
を書いた後に書かれた文章は実行さず、エラーも出ません。
pythonの主なデータ型
データ型 | 説明 | 例 |
---|---|---|
int |
整数型 | x = 10 |
float |
浮動小数点型 | y = 3.14 |
str |
文字列型 | name = "Alice" |
bool |
真偽値型 | flag = True |
None |
特殊な型(何もないことを表す) | nothing = None |
Pythonのデータ型には、整数(int
)、浮動小数点数(float
)、文字列(str
)、真偽値(bool
)、およびNone
型があります。これらの型は、Pythonがデータを格納する方法や操作を決定します。
# 各データ型を確認する
print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("Alice")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type(None)) # <class 'NoneType'>
上記のコードでは、type()
関数を使ってデータ型を取得し、その結果を print()
関数で表示しています。print()
はデータを画面に出力するため、実行したときにそれぞれの変数の型(例えば int
や str
など)が表示されます。type()
関数は引数として渡した値のデータ型を返します。print()
はその返り値を表示するため、型を確認することができます。
print()関数
print()
は、Pythonで標準出力にデータを表示するための関数です。この関数を使うことで、変数や計算結果、文字列をコンソールに表示できます。
型変換(キャスト)
Pythonでは、異なるデータ型を相互に変換(キャスト)できます。型変換には、明示的な型変換と暗黙的な型変換があります。
明示的な型変換
明示的な型変換は、int()
、float()
、str()
、bool()
などの関数を使って、意図的にデータ型を変換する方法です。
x = 10
print(float(x)) # 10.0
print(str(x)) # "10"
print(bool(x)) # True(0以外はTrue)
上記の例では、x
という整数を浮動小数点数(float
)に変換したり、文字列(str
)に変換したり、真偽値(bool
)に変換しています。整数x
がゼロでないため、bool(x)
はTrue
になります。
暗黙的な型変換(Pythonが自動で行う変換)
Pythonは、異なるデータ型の演算を行う際に自動的に型を変換します。例えば、整数型と浮動小数点型を加算すると、結果は浮動小数点数型になります。
x = 10 # int型
y = 3.5 # float型
z = x + y # intとfloatの演算 → float型に変換される
print(z, type(z)) # 13.5 <class 'float'>
上記のコードでは、x
が整数型で、y
が浮動小数点型ですが、加算演算を行うと、Pythonは自動的にx
を浮動小数点数に変換し、結果を浮動小数点型として返します。
文字列の基本操作
Pythonでは文字列(str
型)を簡単に操作できます。文字列はシングルクォート('
)またはダブルクォート("
)で囲んで表現します。
s = "Hello, Python!"
print(s[0]) # H
print(s[-1]) # !
print(s[0:5]) # Hello
文字列のインデックスを使用して、特定の位置の文字を取得したり、スライスを使って文字列の一部分を取り出すことができます。
スライスの基本構文
スライスは、以下の構文を使って行います。
sequence[start:stop:step]
・start: 抽出を開始する位置(インデックス)。指定しない場合は、先頭(インデックス0)から開始されます。
・stop: 抽出を終了する位置(インデックス)。指定しない場合は、シーケンスの末尾まで抽出されます。
・step: 抽出する際の間隔。指定しない場合は、1となります。
スライスは、startからstopの間で、stepごとに要素を取り出します。
ほかにも以下のようなメソッドがあります。
メソッド | 説明 | 例 |
---|---|---|
len(s) |
長さを取得 | len("hello") # 5 |
s.upper() |
大文字に変換 | "hello".upper() # "HELLO" |
s.lower() |
小文字に変換 | "HELLO".lower() # "hello" |
s.replace("a", "b") |
文字の置換 | "banana".replace("a", "o") # "bonono" |
s.split() |
文字列を分割 | "a,b,c".split(",") # ['a', 'b', 'c'] |
" ".join(list) |
リストを文字列に結合 | "-".join(["a", "b", "c"]) # "a-b-c" |
s = "banana"
print(len(s)) # 6
print(s.upper()) # "BANANA"
print(s.lower()) # "banana"
print(s.replace("a", "o")) # "bonono"
print("a,b,c".split(",")) # ['a', 'b', 'c']
print("-".join(["a", "b", "c"])) # "a-b-c"
これらのメソッドを使うことで、文字列の長さを取得したり、文字列の内容を変更したり、リストの要素を文字列に変換したりできます。
数値の演算(四則演算・剰余・累乗)
Pythonでは、数値型(int
やfloat
)に対して基本的な算術演算を行うことができます。
a = 5
b = 3
print(a + b) # 8
print(a - b) # 2
print(a * b) # 15
print(a / b) # 1.666...
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
+ |
加算 | 5 + 3 |
8 |
- |
減算 | 10 - 4 |
6 |
* |
乗算 | 7 * 2 |
14 |
/ |
除算 | 9 / 2 |
4.5 |
// |
切り捨て除算 | 7 // 2 |
3 |
% |
剰余(余り) | 7 % 3 |
1 |
** |
累乗 | 2 ** 3 |
8 |
また、整数の除算や剰余、累乗の演算もサポートされています。
a = 10
b = 3
print(a // b) # 3 (切り捨て除算)
print(a % b) # 1 (剰余)
print(a ** b) # 1000 (累乗)
//
は切り捨て除算を、%
は剰余を、**
は累乗を求める演算子です。
変数のスコープ
変数のスコープとは、変数がどの範囲でアクセス可能か、つまり変数の有効範囲を意味します。Pythonには「グローバルスコープ」と「ローカルスコープ」という2つの主要なスコープがあります。
- グローバル変数:プログラム全体でアクセス可能な変数です。グローバルスコープに定義された変数は、関数外でも使用できます。
- ローカル変数:関数やブロック内で定義された変数で、関数内でのみ使用できます。関数外からはアクセスできません。
関数の導入
関数は、特定の処理をまとめて実行するための構造です。(python基本文法-5で詳しく説明します。)関数内で定義した変数は、その関数内でのみアクセスでき、外部からアクセスすることはできません。この関数内で定義された変数はローカル変数と呼ばれます。
global_var = "I'm global"
def my_function():
local_var = "I'm local"
print(local_var)
print(global_var)
my_function()
print(global_var)
# print(local_var) # エラー(関数外でアクセス不可)
このコードでは、global_var
はグローバル変数で、関数外でもアクセス可能です。一方、local_var
はローカル変数で、関数内でのみアクセス可能です。関数外でlocal_var
を参照しようとするとエラーになります。
変数の命令規則
Pythonでは、変数名に関していくつかのルールがあります。これらを守ることで、コードがより読みやすく、理解しやすくなります。
- 変数名にはアルファベット(大文字・小文字)、数字、アンダースコア(
_
)が使用できますが、数字で始めることはできません。 - Pythonの予約語(
if
やfor
など)は変数名として使用できません。予約語(キーワード)とは、Pythonの文法で特別な意味を持つ単語です。これらはPythonの制御構造や組み込み機能に関連しているため、ユーザーが変数名や関数名として使用することはできません。例えば、if
、else
、for
、while
、def
などが予約語に該当します。予約語を変数名に使おうとすると、構文エラーが発生します。 - 変数名は大文字と小文字が区別されます。例えば、
Var
とvar
は異なる変数です。 - 変数名に意味を持たせることで、コードが理解しやすくなります。例えば、
age
やname
など、変数が何を表しているのかを示す名前にすることが推奨されます。 - 定数(変更しない値)には大文字を使用し、複数の単語をアンダースコアで区切ることが一般的です(
MAX_VALUE
など)。
my_variable = 10 # 正しい
1variable = 20 # エラー
予約語やキーワード(例えば、def
やclass
)は使用できません。
def = 10 # エラー('def'は予約語)
また、PEP 8というPythonのスタイルガイドに従うと、コードの一貫性と可読性が高まります。PEP 8では、変数名に関しては小文字とアンダースコアを使用し、定数はすべて大文字で書くことが推奨されています。
MAX_VALUE = 100 # 定数は大文字
この章では、Pythonの基本的なデータ型と変数について詳しく説明しました。次の章では、制御構造(条件分岐・ループ)について学んでいきましょう!