第3章 気楽な入門編(40問中6問)
Python3基礎試験の文字列とスライス[a:b]:実行結果で確認
第3章の文字列は、word[2:5] のような式の結果を読み取る問題が中心です。このページでは、インデックス、負のインデックス、スライス、範囲外のときの違い、文字列が変更できないことを、Python 3.9.6で実際に実行した結果で確かめます。覚えるのは3つです。スライスは開始を含み終了を含みません。範囲外はインデックスだとエラーですが、スライスだと通ります。文字列は書き換えられません。
このページは試験の学習用の整理です。公式の問題は転載せず、コードはすべて説明用に作った例です。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-09-18。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- インデックスは0から数え、負のインデックスは右から数える。-1が最後で、-0は0と同じなので負は-1から始まる
- スライス word[a:b] は、a番めを含み、b番めを含まない。word[:i] + word[i:] は常に word と等しい
- 範囲外のインデックスはIndexError。範囲外のスライスはエラーにならず、word[4:42] は 'on'、word[42:] は '' になる
- 文字列は不変。word[0] = 'J' も word[2:] = 'py' もTypeErrorで、書き換えたいときは新しい文字列を作る
インデックスと負のインデックス
文字列の各文字は、先頭を0番めとする位置で取り出せます。公式チュートリアルによると、負のインデックスは右から数え、-0は0と区別できないので、負のインデックスは-1から始まります。
| コード | 実行結果 | ひとこと |
|---|---|---|
word = 'Python'
print(word[0]) | P | インデックスは0から数える |
print(word[5]) | n | 6文字なので最後は5 |
print(word[-1]) | n | 負のインデックスは右から数え、-1が最後 |
print(word[-2]) | o | -2は右から2番め |
print(word[-6]) | P | -6は左端。-0は0と同じなので、負は-1から |
6文字の文字列なら、正の位置は0から5、負の位置は-6から-1で、同じ文字を2通りに指せます。word[5] と word[-1] はどちらも 'n'、word[0] と word[-6] はどちらも 'P' です。
スライス[a:b]の読み方
公式チュートリアルによると、スライスの開始値は常に含まれ、終了値は常に含まれません。最初のインデックスを省略すると0、二番めを省略するとスライスする文字列のサイズとみなされます。
| 式(word = 'Python') | 実行結果 | ひとこと |
|---|---|---|
word[0:2] | 'Py' | 0番めから、2番めの手前まで |
word[2:5] | 'tho' | 2・3・4番めの3文字 |
word[:2] | 'Py' | 最初を省略すると0 |
word[4:] | 'on' | 二番めを省略すると文字列の長さ |
word[-2:] | 'on' | 負の位置も使える。最後の2文字 |
取り出される文字数は、終了から開始を引いた数です。word[2:5] なら 5 − 2 = 3 文字で 'tho' です。Python 3.9.6で word[:2] + word[2:] == word を確かめると True でした。
範囲外のとき
公式チュートリアルは、大き過ぎるインデックスを使おうとするとエラーが発生する一方、スライスで範囲外のインデックスを使ったときは上手く扱われると説明しています。長さ6の 'Python' で確かめた結果は次のとおりです。
| コード | 実行結果 | ひとこと |
|---|---|---|
word[42] | IndexError: string index out of range | 範囲外のインデックスはエラー |
word[4:42] | 'on' | 範囲外のスライスは、あるところまでを返す |
word[42:] | '' | 完全に外れると空の文字列 |
1文字を取り出す [] はエラー、範囲を取り出す [:] は通る、と区別します。word[4:42] は 4番めから最後までの 2 文字('on')になり、word[42:] は始点が文字列の外なので空の文字列になります。
文字列は変更できない
公式チュートリアルによると、Python の文字列は変更できない、つまり不変です。インデックスで指定した場所に代入するとエラーが発生します。書き換えたい場合は、元の文字列と別の文字列を新しく作ります。
| コード | 実行結果 | ひとこと |
|---|---|---|
word[0] = 'J' | TypeError: 'str' object does not support item assignment | 1文字の書き換えはできない |
word[2:] = 'py' | TypeError: 'str' object does not support item assignment | スライスへの代入もできない |
'J' + word[1:] | 'Jython' | 新しい文字列を作る |
word[:2] + 'py' | 'Pypy' | 連結でも新しい文字列ができる |
文字列は不変で、リストは可変です。公式チュートリアルは、不変な文字列とは違ってリストは可変型なので要素を入れ替えられると説明しています。cubes = [1, 8, 27, 65, 125] の cubes[3] に 64 を代入する、といった書き換えはリストでは通ります。
リテラルの書き方
隣り合うリテラルは自動で連結される
公式チュートリアルによると、連続して並んでいる複数の文字列リテラルは自動的に連結されます。ただし、これは2つのリテラルどうしにだけ働き、変数や式には働きません。'Py' 'thon' は 'Python' になりますが、変数と文字列を並べただけでは連結されません。
三連引用符と改行
文字列リテラルは複数行にまたがって書けます。1つの方法が三連引用符で、改行文字は自動的に文字列に含まれます。行末に \ を付けると、その改行を含めないようにできます。
print() を使うと \n が改行になる
s = 'First line.\nSecond line.' を print() を使わずに表示すると、\n が含まれたまま表示されます。print(s) では \n が改行になります。
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
第3章の気楽な入門編は、何問出ますか?
このサイトが整理した公式の章別出題数では、40問中6問(15.0%)です。第4章の9問、第5章の7問に次ぐ多さで、数と文字列とリストの基本操作が中心になります。
word[2:5] は、なぜ5番めの文字を含まないのですか?
公式チュートリアルによると、スライスの開始値は常に含まれ、終了値は常に含まれません。そのため s[:i] + s[i:] は常に s と等しくなります。word = 'Python' なら word[2:5] は 'tho' の3文字です。
範囲外を指定すると、エラーになりますか?
インデックスで範囲外を指定するとIndexErrorになりますが、スライスは上手く扱われます。word[42] はエラーでも、word[4:42] は 'on'、word[42:] は空の文字列を返します。
文字列の一部を書き換えるには、どうしますか?
公式チュートリアルによると、文字列は不変なので、インデックスやスライスへの代入はTypeErrorになります。元の文字列と別の文字列が必要なら、新しく文字列を作ります。'J' + word[1:] なら 'Jython' です。
