この記事は以下の本に関する、自分が参考になった点をピックアップした記事です。
型の変換
以下のコードを例に、型の変換について説明します。
name = '1'
new_num = int(name)
print(new_num, type(new_num))
最初に'1'という文字列を変数name
に代入します。
name = '1'
'1'は数値のように見えますが、シングルクォートで囲まれているため文字列型です。
nameの型を数値型に変換して、新しい変数new_num
に代入します。
new_num = int(name)
変数new_num
の型を確認すると、数値型になっていることがわかります。
name = '1'
new_num = int(name)
print(new_num, type(new_num))
1 <class 'int'> # 数値型
反対も同様で、文字列型に変換したいときはstr(name)
のように書きます。
name = 1
new_num = str(name)
print(new_num, type(new_num))
1 <class 'str'> # 文字列型
複数の文字列を出力する
print
関数の( )の中身を,(カンマ)で区切って文字列を追加すると、それぞれの文字列がスペースで区切られて出力されます。
print('Hi', 'John')
Hi John
スペースではなく「,」「、」など、別の文字列で区切りたい場合は、sep=','
のように区切り文字を指定して print の( )内に追加すると、指定した文字列で区切って出力されます。
sep
関数は、複数の要素を文字列で結合する際の区切り文字を指定する関数です。
print('Hi', 'John', sep=',')
print('Hi', 'John', sep='.')
Hi,John
Hi.John
終わりの文字列を指定することも可能です。
通常、終わりの文字は改行を意味する\n
になっていますが、これを明示的に指定する場合は、引数(括弧内に書く値のこと)にend='\n'
と指定します。
print('Hi', 'John', sep='.', end='\n')
print('Hi', 'John', sep='.')
Hi.John
Hi.John
この終わりの文字の指定を、end=''
のように、シングルクォートの間に何も入れない空文字列にすると、2つの出力が改行されることなく、連続して出力されます。
print('Hi', 'John', sep='.', end='')
print('Hi', 'John', sep='.')
Hi.JohnHi.John
もし出力の最後に.(ピリオド)をつけてから改行したい場合は、end='.\n'
と指定しましょう。
print('Hi', 'John', sep='.', end='.\n')
print('Hi', 'John', sep='.')
Hi.John.
Hi.John
数値の計算
Python を使用して数値を計算する時、四捨五入をする場合はround
関数を使用します。
以下の場合、pie
という変数の値を小数点以下第2位まで四捨五入する場合、round(pie, 2)
と記述します。
>>> pie = 3.14159265358979
>>> pie
3.14159265358979
>>> round(pie, 2)
3.14
数学関数を用いた計算
Pythonには、複雑な計算を行うための数学関数が用意されています。
まず、import math
と入力することで、Pythonのmath
ライブラリを使用できるようになります。
import math # math ライブラリを使用できるようにする
ここでは、平方根の計算を例にとっています。
たとえば、25の平方根を求めたい場合、math.sqrt(25)
のように、math
の後に「関数名」をドットで繋げて記述します。
その結果をresult
という変数に格納し、表示します
import math
result = math.sqrt(25)
print(result)
5.0
文字列の囲み方
文字列は、単一引用符(シングルクォート)の他に二重引用符(ダブルクォート)でも囲むことができます。
print('hello')
print("hello")```
```:実行結果
hello
hello
ダブルクォートで囲まれた文字列の中にシングルクォートが含まれていても、問題なく表示されます。
print("I don't know")
I don't know
ただし、シングルクォートで囲まれた文字列の中にシングルクォートが含まれている場合、エラーが発生します。
print('I don't know')```
```:実行結果
File "/Users/y.takanashi/PycharmProjects/pythonProject/lesson.py", line 1
print('I don't know')
^
SyntaxError: unterminated string literal (detected at line 1)
そのため、シングルクォートの前にバックスラッシュを使用してエスケープする必要があります。
print('I don\'t know')
I don't know
文字列の途中に改行を入れる
途中で改行を入れたい場合に、\n
のように、バックスラッシュと n を組み合わせて改行を入れたい箇所に記述します。
print('Hello. \nHow are you?')
Hello.
How are you?
ただし、文字列の中に\n
が含まれていると、意図せず改行が入ってしまうことがあります。
以下の例では、Windows のファイルパスのような文字列を出力しようとしたものの、文字列に\n
が含まれてしまっているために、意図しない改行が入ってしまっています。
print('C:\name\name')
C:
ame
ame
これを回避するためには、文字列の囲みの前にr
を記述します。
このr
は raw(生)を省略したもので、raw データ、つまり生のデータを出力するという意味になります。
print(r'C:\name\name')
C:\name\name
複数行にわたる文字列の出力
複数行にわたる文字列を出力したい場合は、"""
のように二重引用符(ダブルクォート)3つで囲み、その間に文字列を記述します。
こうすると、改行したい箇所に\n
でわざわざ指定する必要がなく、記述したところに改行されて出力されます。
print('line1\nline2\nline3')
print("""
line1
line2
line3
""")
line1
line2
line3
line1
line2
line3
"""
で囲んだ出力の前後にprint
の処理を入れてみると、間に空白行が入っていることがわかります。
print('##########')
print("""
line1
line2
line3
""")
print('##########')
##########
line1
line2
line3
##########
これは、"""
を記述した行も1行としてカウントされているためです。
空白行を入れたくない場合は、以下のように"""
の後ろに書く必要があります。
print('##########')
print("""line1
line2
line3""")
print('##########')
##########
line1
line2
line3
##########
もっと読みやすい書き方もあります。
最初の"""
の直後や、最後の"""
の手前の行の最後に\
を入れると、空白行が表示されずに、かつ読みやすい書き方になります。
このような行の最後のバックスラッシュは、次の行にそのまま続くという意味です。
print('##########')
print("""\
line1
line2
line3\
""")
print('##########')
##########
line1
line2
line3
##########
文字列を連結する
文字列を、演算子を使って連続で表示するということもできます。
*
を使って、掛け算のように文字列の回数を指定すると、その回数を繰り返し表示できます。
print('Hi.' * 3)
Hi.Hi.Hi.
+
を使って文字列を連結することもできます。
print('Hi.' * 3 + 'John.')
Hi.Hi.Hi.John.
ソースコードに書いた文字列や数値のことをリテラル
と言います。
文字列のリテラル同士をつなげる際は、+
でつなげることもできますし、+
を省略して並べることも可能です。
print('Py' + 'thon')
print('Py''thon')
Python
Python
ただし、文字列を変数に格納した場合は、その変数とリテラルを+
なしでつなげることはできません。
変数に格納されてた文字列をリテラルとつなげる場合は、+
を使います。
prefix = 'Py'
print(prefix 'thon')
File "/Users/y.takanashi/PycharmProjects/pythonProject/lesson.py", line 2
print(prefix 'thon')
^^^^^^
SyntaxError: invalid syntax
prefix = 'Py'
print(prefix + 'thon')
Python
文字列のスライス
Python には「スライス」という機能があります。
これは、2つのインデックスを指定することで、その間の要素を取り出すというものです。
例えば、文字列の0番目から2番目の文字を表示する場合は以下のように指定します。
word = 'python'
print(word[0:2])
py
2番目から4番目までの文字を表示する際には、word[2:5]
と指定します。
word = 'python'
print(word[2:5])
tho
また、はじまりや終わりのインデックスの指定は省略できます。
はじまりのインデックスを省略すると、最初の文字から取得します。
つまり、0を指定したときと同じです。
word = 'python'
print(word[0:2])
print(word[:2])
py
py
終わりのインデックスを省略すると、はじまりのインデックスの文字から最後までを表示してくれます。
word = 'python'
print(word[2:])
thon
スライスする際に、はじまりと終わりのインデックスをどちらも省略して[:]
のみ入力すると、文字列全体を取得できます。
word = 'python'
print(word[:])
python
ちなみに、文字列のインデックスを指定して、一部の文字を書き換えることはできません。
Python の文字列は、内容を変更できないデータ(イミュータブルなデータ)だからです。
word = 'python'
word[0] = 'j'
print(word)
Traceback (most recent call last):
File "/Users/y.takanashi/PycharmProjects/pythonProject/lesson.py", line 2, in <module>
word[0] = 'j'
~~~~^^^
TypeError: 'str' object does not support item assignment
文字列の一部を変更したい場合は、スライス
や+
による連結を駆使して新しい文字列を作り、それを変数に入れましょう。
word = 'python'
word[0] = 'j' + word[1:]
print(word)
jython
文字列のメソッドを使う
PyCharm で文字列の変数を作成し、その変数名の後に.(ドットまたはピリオド)をつけると、一覧が表示されます。
これはメソッドの一覧です。
表示されるメソッドの一覧から、startwith
という文字列のメソッドを選んで使ってみましょう。
これは対象の文字列が( ) の中に指定した文字列ではじまっているかを調べられるメソッドです。
指定した文字がはじまっていれば結果はTrue
、そうでない場合はFalse
となります。
このメソッドの結果をis_start
という変数に格納し、print
関数で表示してみます。
s = 'My name is John.'
is_start = s.startswith('My')
print(is_start)
jython