​​​​​​文字列の表現

 

Pythonの文字列は、ダブルコーテションやシングルコーテションなどで囲んで記述します。

 

文字列は、語、単語、文、文章などといったもの話をコードないで表現したい時に使います。

 

コードで確認しましょう。

 

s = "Hello,world!"

print(a)

 

t =  'Hello,paiza!'

print(t)

 

実行すると

 

Hello,world!
Hello,paiza!

 

となります。

 

参考資料

 

  • シングルクォーテーションで囲む

    • コード:
      s = 'Hello, World!'
      print(s)








    •  
    •  
    •  
    •  
    •  
    •  
    •  

  • ダブルクォーテーションで囲む

    • コード:
      s = "Hello, World!"
      print(s)

文字列のインデックス i の文字を取得

文字列を構成する各文字には、インデックスという番号が振られています。
 
インデックスは、先頭の文字を0として、そこから順に1.2.3と振られていきます。
 
このインデックスを取得することで任意の位置の文字を取得する事ができます。
 
コードで確認しましょう。
 
s = "Hello, world!"
print(s[0])
 
実行すると
 
H
 
Hello,worldのHが出力されました。
 
この様に文字列のインデックスは、0から振られるので注意しましょう。
 
インデックスを指定する際負の数で指定する事もできます。
 
負の数を指定した場合、文字列の長さにその数を足した値で、文字を取得します。
 
例えば、-1を指定した場合は、文字列の末尾の文字を取得できます。
 
コードに次の行を足して確認しましょう。
 
s = "Hello, world!"
print(s[0])
 
print(s[-1])
print(s[-2])
 
実行すると
 
H
!
d
 
が出力されました。
 
末尾の文字と、末尾から2番目の文字が出力されました。
 
文字列の文字数以上の文字を指定するとエラーが起きます。
 
コードで確認しましょう。
 
s = "Hello, world!"
print(s[0])

print(s[-1])
print(s[-2])
 
print(s[13])
 
出力すると
 
Traceback (most recent call last):
  File "Main.py", line 7, in <module>
    print(s[13])
IndexError: string index out of range

(Exit status: 1)
 
この様にエラーが発生して出力できませんでした。
 
参考資料1
 
  • s[i] のように書くと、i の値に応じて文字列 s のなかの文字列を取得することができる

  • インデックスは 0 から振られる

  • 参考資料2

  •  
  • s[i] の i が正の数のとき、文字列 s のインデックス i の文字列を取得できる

  • コード:
    s = "Hello, World!"
    print(s[0])      
 
参考資料3
 
  • s[i] の i が負の数のとき、インデックスが 文字列 s の文字数 + i である文字列を取得できる

  • コード:
    s = "Hello, World!"
    print(s[-1])  # 文字列 s の末尾の文字列が出力される
    print(s[-2])  # 文字列 s の末尾から 2 番目の文字列が出力される
 
参考資料4
 
  • 「文字列の長さ」とは「文字列の文字数のこと」

  •  
 
参考資料5
 
  • s[i] の i が文字列 s の文字数以上の数であるとき、エラーが発生する

  • コード:
    s = "Hello, World!"
    print(s[13])  # エラーが発生する
 
文字列のインデックスが i ~ j-1 の部分文字列を取得
 
スライス記法という記法を使うと、文字列の部分文字列を取得することができます。
 
まずは、コードを見てみましょう。
 
s ="Hello world!"
print(s[1:4])  
 
実行すると
 
ell
 
が出力あれます。
 
このコードを実行する時に4番目は含まれていません、つまり末尾の文字は含まれません。
 
指定するインデックスを、省略する事もできます。
 
省略した場合どうなるかコードで確認しましょう。
 
s ="Hello world!"
print(s[1:4])

print(s[:5])
 
実行すると
 
ell
 
Hello
 
が出力あれます。
 
次に、2番目のどこまで取得するか指定する数を省略してみます。
 
コード
 
 ="Hello world!"
print(s[1:4])

print(s[:5])
print(s[7:])
 
実行すると
 
ell
Hello
world!
 
この様に出力されます。
 
参考資料1
 
  • s[i:j] のように書くと、文字列 s のインデックスが i から j-1 までの部分文字列を取得することができる

  • コード:
    s = "Hello, World!"
    print(s[1:4])
参考資料2
 
  • s[:j] のように指定すると、先頭の文字列からインデックスが j-1 の文字列までの部分文字列を取得できる

  • コード:
    s = "Hello, World!"
    print(s[:5])
 
参考資料3
  • s[i:] のように指定すると、インデックスが i の文字列から末尾の文字列までの部分文字列を取得できる

  • コード:
    s = "Hello, World!"
    print(s[7:])
 
参考資料4
 
  • s[:] のように指定すると、先頭から末尾までの部分文字列、つまり元と同じ文字列を取得できる

  • コード:
    s = "Hello, World!"
    print(s[:])

文字列の長さを取得(len)

文字列の文字数を、文字列の長さと言います。
 
この文字列の長さは、次のコードの様に書きます。
 
s="Hello, world!"
print(len(s))
 
実行すると
 
13
 
が出力されます。
 
この様に、len関数を使うことで文字列の長さを取得できます。
 
参考資料
  • 「文字列の長さ」とは、「文字列の文字数」のこと
参考資料2
 
  • len(s) のように len 関数を使うと、文字列 s の長さを取得できる

  • コード:
    s = "Hello, World!"
    print(len(s))

 

文字列の結合(+)

+演算子を使うと文字列の結合ができる様になります。
 
例えば次のコードの様に文字列を結合します。
 
print("Hello" + "wold!")
 
実行すると
 
Hellowold!
 
Helloとwold!結合されました。
 
勿論次のコードの様に、変数に代入されている文字列を結合する事もできます。
 
print("Hello" + "wold!")
 
s1="Hello"
s2="wold!"
print(s1 + s2)
 
実行すると
 
Hellowold!
Hellowold!
 
変数s1とs2が結合されて出力されました。
 
この様に文字列同士結合すると、+演算子の左側の末尾に右側の文字列が繋がった新しい文字列を得る事ができます。
 
コードに次の行を足して確認しましょう。
 
print("Hello" + "wold!")

s1="Hello"
s2="wold!"
print(s1 + s2)
 
print(s1 , s2)
 
実行すると
 
Hellowold!
Hellowold!
Hello wold!
 
この様に、出力されます。
 
それぞれの文字列は、変わっていませんね。
 
結合演算をすると、新しいもの文字列ができる事が確認できました。
 
では結合演算に使った変数が示す文字列を、結合演算よってできる新しい文字列に更新したい時は、どうしたら良いでしょうか?
 
その様な時は、再代入を行えば良いです。
 
コードに次の行を足して確認しましょう。
 
s1 = s1 + s2
print(s1)
 
実行すると
 
Hellowold!
Hellowold!
Hello wold!
Hellowold!
 
この様に出力されました。
 
文字列s1と文字列s2が結合されて、出力されました。
 
またこの結合の演算は、+=演算子を用いて書く事ができいます。
 
コードで確認してみましょう。
 
print("Hello" + "wold!")

s1="Hello"
s2="wold!"
print(s1 + s2)

print(s1 , s2)

s1 += s2
print(s1)
 
実行すると
 
Hellowold!
Hellowold!
Hello wold!
Hellowold!
 
参考資料
  • 2 つの文字列をつなげること

  • たとえば、"abc" と "def" を結合すると、"abcdef" となる
参考資料2
 
  • s + t のように + 演算子を使うと、文字列 s と文字列 t が結合された新たな文字列を取得することができる

  • コード:
    s = "Hello "
    t = "World!"
    print(s + t)

  • s += t のように += 演算子を使うと、文字列 s と文字列 t が結合された新たな文字列が、変数 s に再代入される

  • コード:
    s = "Hello "
    t = "World!"
    s += t
    print(s)
参考資料3
  • s + t のように文字列 s と文字列 t を結合しても、文字列 s や、文字列 t が変わるわけではない

  • コード:
    s = "Hello "
    t = "World!"
    u = s + t
    print(s, t, u)
文字列の反復(*)
 

文字列の反復とは、同じ文字列を何回も繰り返す事です。

 

例えば、aの10回反復はaが10個連なる文字列になりますし、abcの2回反復はabcbacという文字列になります。

 

この文字列の反復は、*演算子を使います。

 

コードで確認しましょう。

 

s1 =  "a"

print(s1 * 10)

 

s2= "abc"

print(s2 * 2)

 

コードで確認すると

 

aaaaaaaaaa
abcabc

 

この様に、*演算子を使うと文字列が反復されます。

 

この様に、文字列を反復するとその文字列が任意の回数繰り返された新しい文字列を得る事ができます。

 

新しい文字列が作られるので、下も文字列が変わったりする事はありません。

 

コードに次の行を足して確認しましょう。

 

s1 =  "a"

print(s1 * 10)

 

s2= "abc"

print(s2 * 2)

 

 

 

print(s1 , s2)

 

実行すると

 

aaaaaaaaaa
abcabc
a abc

 

この様に、それぞれの文字列は変わっていませんね。

 

反復演算をすると、新しい文字列ができることを確認できました。

 

では、反復演算に使った変数が示す文字列を反復演算によってできる、新しい文字列に更新したいときは、どうしたら良いのでしょうか?

 

その様な時は、再代入を行うのが良いです。

 

次のコードで確認しましょう。

 

s1 =  "a"

print(s1 * 10)

 

s2= "abc"

print(s2 * 2)

 

print(s1 , s2)

 

s1 = s1 * 10

s2 = s2 * 2

print(s1, s2)

 

実行すると

 

aaaaaaaaaa
abcabc
a abc
aaaaaaaaaa abcabc

 

このコードでは、変数s1に文字列s1を10回反復した文字列を、変数s2に文字列s2を2回反復した文字列をそれぞれ再代入しています。

 

この様に、反復演算後の文字列が出力され変数s1と変数s2の値が示す値が更新された事が解りました。

 

また、この反復の演算は、*=演算子を用いて書く事もできます。

 

コードで確認してみましょう。

 

s1 ="a"
print(s1 * 10)

s2= "abc"
print(s2 * 2)

print(s1, s2)

s1*=10

s2*=2
print(s1, s2)

 

実行すると

 

aaaaaaaaaa
abcabc
a abc
aaaaaaaaaa abcabc

 

先ほどと同じ文字列が出力されました。

 

参考資料1

 

  • 同じ文字列を何度も繰り返すこと

  • たとえば、"abc" を 2 回反復すると、"abcabc" になる
参考資料2
 
  • s * n のように * 演算子を使うと、文字列 s が n 回反復された新たな文字列を取得することができる

  • コード:
    s = "abc"
    n = 2
    print(s * n)

  • s *= n のように *= 演算子を使うと、文字列 s が n 回反復された新たな文字列が、変数 s に再代入される

  • コード:
    s = "abc"
    n = 2
    s *= n
    print(s)
 
参考資料3
 
  • s * n のように文字列 s を n 回反復しても、文字列 s が変わるわけではない

  • コード:

    s = "abc"
    n = 2
    t = s * n
    print(s, n, t)

f 文字列

コードを書いていると、文字列の中で変数を使いたい時があります。

 

この際、次のコードの様に結合させる方法があります。

 

次のコードで確認します。

 

time = "10"

place =  "会議室 A"

print(time + "時から" + place + "で会議が行われる。")

 

実行すると

 

10時から会議室 A会議が行われる。

 

この様に、出力されます。

 

このコードでも正しく動きますが、変数の値を使うところで途切れ途切れになていて、書く事が面倒だったりみづらさを感じたりします。

 

また、変数timeに代入されている値は、今回は文字列ですがここに整数値が入るとエラーが発生します。

 

確かめてみましょう。

 

コード

 

time =  10

place =  "会議室 A"

print(time + "時から" + place + "会議が行われる。")

 

実行すると

 

Traceback (most recent call last):
  File "Main.py", line 3, in <module>
    print(time + "時から" + place + "会議が行われる。")
TypeError: unsupported operand type(s) for +: 'int' and 'str'

(Exit status: 1)

この様に、エラーが発生します。

このことについては、次のレッスンで詳しくみますが、この際はtimeの値を文字列に変換する必要があります。
 
この様に、変数の値を文字列の中で使いたい時は、コードが長くなって面倒だったり見ずらかったり、時には変換する必要があったりして大変です。
 
しかしf文字列を使うと、これらの門材を一気に解決する事ができます。
 
f文字列は、次のコードの様に使います。
 
time = "10"
place ="会議室 A"
print(f"{time} 時から{place}で会議が行われる")

 

実行すると

 

10 時から会議室 Aで会議が行われる

 

この様に出力されます。

 

timeの数値が文字列で無かった場合、文字列の変換も行なってくれます。

 

time =  10
place ="会議室 A"
print(f"{time} 時から{place}で会議が行われる")

 

実行すると

 

10 時から会議室 Aで会議が行われる

 

エラーなく実行されました。

 

timeの値を使う時、整数から文字列に変換されたからです。

 

参考資料

time = 10  # time に代入する値を整数値の 10 に変更
place = "会議室 A"
print(f"{time}時から{place}で会議がおこなわれる。")
  • f'変数 x が示す値は {x} だ' のように f 文字列を使うと、文字列内の波括弧の箇所が変数 x の値で置換される

  • コード:
    time = "10"
    place = "会議室 A"
    print(f"{time}時から{place}で会議がおこなわれる。")

  • 変数 x が示す値は文字列に限らない