プログラミング演習・14章版 付録
教材コード

付録

記号と用語の早見表

本書を読み進めるなかで,さまざまな記号や関数が出てきた.ここでは,それらを あとから引けるように,ひとつの表にまとめておく.「あの記号はどういう意味だった かな」と思ったときに,このページに戻ってきて確かめるとよいでしょう.

なお,ここに出てくる記号はすべて半角で入力します.日本語入力(全角)の 記号を使うとエラーになります.全角と半角のちがいについては,本付録の最後でまとめて 確認します.

算術演算子

算術演算子とは,たし算やかけ算など,計算を するための記号です.Python では,ふだん算数で使う記号と少しちがうものがある ので注意します.とくに,かけ算が *,わり算が / になる点と,わり算に 3種類(/,//,%)がある点を覚えておきたい.

算術演算子の一覧
記号 読み 意味 例(結果)
+ プラス たし算 7 + 3(10)
- マイナス ひき算 7 - 3(4)
* アスタリスク かけ算 7 * 3(21)
/ スラッシュ わり算(小数) 7 / 2(3.5)
// スラッシュ2つ わり算の商(整数) 7 // 2(3)
% パーセント わり算の余り 7 % 2(1)
** アスタリスク2つ べき乗(累乗) 2 ** 3(8)

ここで気をつけたいのは,わり算が2種類に分かれていることです./ は 答えを小数で返すのに対し,// は商だけを整数で返します.また % は余りを返します.たとえば,7個のあめを2人で分けると,1人3個ずつで 1個余る.このとき,商の3が 7 // 2,余りの1が 7 % 2 です.

appendix_code_1.py
print(7 / 2)    # 小数のわり算
print(7 // 2)   # 商だけ
print(7 % 2)    # 余りだけ

これを実行すると,次のように表示されます.

実行結果の例
3.5
3
1

かけ算の記号は x(エックス)ではなく *(アスタリスク)です. また,かけ算を省略して書くことはできません.数学では「 2a 」と書けるが, Python では 2 * a と,かならず * を書く必要があります.

比較演算子

比較演算子とは,2つの値をくらべるための記号です.「等しいか」「大きいか」「小さいか」を調べ,その結果として真偽値 (True か False)を返します.条件分岐や繰り返しの条件を書くときに使います.

比較演算子の一覧
記号 読み 意味 例(結果)
== イコール2つ 等しい 3 == 3(True)
!= ノットイコール 等しくない 3 != 5(True)
< 小なり より小さい 3 < 5(True)
> 大なり より大きい 3 > 5(False)
<= 小なりイコール 以下(小さいか等しい) 3 <= 3(True)
>= 大なりイコール 以上(大きいか等しい) 5 >= 3(True)

たとえば,テストの点数 tensuu が60点以上なら合格,という判定は tensuu >= 60 と書きます.この式は,条件が成り立つとき True,成り立た ないとき False になります.

appendix_code_3.py
tensuu = 75
print(tensuu >= 60)   # 60点以上か
print(tensuu == 100)  # ちょうど100点か

これを実行すると,次のように表示されます.

実行結果の例
True
False

「以上」「以下」を表す <= や >= は,不等号が先,イコールが あとの順で書きます.=< や => と逆に書くとエラーになります.数学の 「 ≦ 」「 ≧ 」を,記号2つで表したものだと考えるとよいでしょう.

代入の = と比較の == のちがい

初学者がもっともつまずきやすいのが,イコール1つの = と,イコール2つの == のちがいです.見た目が似ているが,はたらきはまったく別です.

= と == のちがい
記号 読み はたらき 例
= イコール1つ 代入する(値を入れる) tensuu = 80
== イコール2つ 等しいか調べる(くらべる) tensuu == 80

= は「右の値を左の変数に入れる」という命令です.いっぽう == は「左と右が等しいかどうかを調べる」ための比較演算子です. 次の例で,はたらきのちがいを見てみましょう.

appendix_code_5.py
tensuu = 80          # 代入:tensuu に 80 を入れる
print(tensuu)        # 80 が表示される
print(tensuu == 80)  # 比較:等しいので True

これを実行すると,次のように表示されます.

実行結果の例
80
True

1行目の = は値を入れているだけで,画面には何も出ません.3行目の == は「等しいか」を調べた結果として True を返しています.

条件分岐の条件で,等しいかを調べたいのに if tensuu = 80: と = 1つで書いてしまう間違いが多いです.くらべるときは,かならず ==(イコール 2つ)を使います.「入れる =,くらべる ==」と覚えておくとよいでしょう.

本書で使った関数の早見表

関数とは,あらかじめ用意された便利な命令のことです.本書で 使ってきたおもな関数を,用途とともに一覧にまとめる.「何をするものだったか」を すばやく思い出したいときに使うとよいでしょう.

画面とのやりとり・データ型の変換

入出力とデータ型に関する関数
関数 読み 用途 例
print プリント カッコの中身を画面に表示する print(goukei)
input インプット キーボードからの入力を受け取る namae = input()
int イント 整数に変換する int("5")(5)
float フロート 小数に変換する float("1.5")(1.5)
str ストリング 文字列に変換する str(5)("5")
len レン 文字数や要素数を数える len("abc")(3)

input で受け取った値は,かならず文字列になります.数として計算したい ときは,int や float で数に変換してから使う必要があります.これは よく忘れるところなので,注意しておきたい.

appendix_code_7.py
tensuu = int(input())  # 入力を整数に変換して受け取る
print(tensuu + 10)     # 数として計算できる

たとえば 90 と入力すると,次のように表示されます.

実行結果の例
100

繰り返し・リストを扱う関数

繰り返しとリストに関する関数
関数 読み 用途 例
range レンジ 連続した整数を順に作る range(3)(0,1,2)
append アペンド リストの末尾に要素を追加する tensuu.append(80)
sum サム リストの合計を求める sum(tensuu)
max マックス 最大値を求める max(tensuu)
min ミン 最小値を求める min(tensuu)
sorted ソーテッド 小さい順に並べかえる sorted(tensuu)

append は,リストそのものに対して tensuu.append(80) のように ドット(.)でつなげて使う点が,ほかの関数とちがう.いっぽう sum,max,min,sorted は,カッコの中にリストを 入れて使います.次の例で,まとめて確認してみましょう.

appendix_code_9.py
tensuu = [70, 90, 60]  # 点数のリスト
print(sum(tensuu))     # 合計
print(max(tensuu))     # 最高点
print(min(tensuu))     # 最低点
print(sorted(tensuu))  # 小さい順に並べかえ

これを実行すると,次のように表示されます.

実行結果の例
220
90
60
[60, 70, 90]

sorted は,もとのリストはそのままにして,並べかえた新しいリストを 返します.合計の sum,最高の max,最低の min とあわせて覚えて おくと,点数や気温などの集計がぐっと楽になります.

全角と半角の対比表

プログラムを書くとき,記号はすべて半角で入力します.日本語入力(全角)の ままで括弧やクォートを打ってしまうと,見た目はよく似ていても,コンピュータには 別の文字として伝わり,エラーになります.これは初学者がもっとも多くつまずく原因です.

とくにまちがえやすいのが,次の記号です.エラーが出て原因が分からないときは, まずこれらが全角になっていないかを疑うとよいでしょう.

まちがえやすい全角と半角の対比(左がエラー)
記号の名前 全角(使えない) 半角(正しい)
丸括弧(始め) ( (
丸括弧(終わり) ) )
ダブルクォート ” "
シングルクォート ’ '
角括弧(始め) [ [
角括弧(終わり) ] ]
コロン : :
カンマ , ,
スペース(空白)  (全角空白) (半角空白)

とくに見分けにくいのが全角の空白です.全角空白は目に見えないため, 字下げのつもりで全角空白を入れてしまうと,原因の分からないエラーになりやすい. 字下げは,かならず半角スペース4つで行います.

エラーが出たら,まず括弧・クォート・コロン・スペースが全角になっていないか を確かめる.文字を打ち直すときは,日本語入力をいったんオフにしてから入力すると, 全角の混入を防げる.見た目が似ていてもコンピュータには別の文字に見える,という ことを忘れないようにしたい.

  • 計算には算術演算子(+ - * / // % **),くらべるには比較演算子 (== != < > <= >=)を使います.

  • = は代入(入れる),== は比較(くらべる).はたらきは別です.

  • 関数は「何をするものか」を一言で覚えておき,必要なときにこの表で引けばよいでしょう.

  • 記号はすべて半角で入力します.エラーのときは全角の混入をまず疑う.

エラーメッセージの読み方

プログラムを書いていると,実行したとたんに画面いっぱいに英語の文章が出て, 「うわっ」と身構えてしまうことがあります.これがエラーです. だが,エラーはこわいものではありません.むしろ,「ここを直せば動くよ」と コンピュータが教えてくれている親切なメッセージだと考えてよいでしょう.人間どうしでも, 道をたずねたときに「その角を右です」と教えてもらえればありがたい.エラーメッセージも それと同じです.

この付録では,まずエラーメッセージのどこを読めばよいかを説明し,そのあと 初学者がよく出会う代表的なエラーを,出る場面・エラー文・ 原因・直し方の順に並べていく.困ったときに必要なところだけ 引けるよう,辞書のように使ってください.

エラーは「最後の行」を読む

Python のエラーメッセージは,たいてい何行にもわたって表示されます.しかし, 初学者がまず見るべきところは決まっています.それはいちばん最後の行です. 最後の行には,エラーの種類とその内容が短く書かれています.

たとえば,次のようなエラーが出たとします.

実行結果の例
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    print(goukei)
NameError: name 'goukei' is not defined

このとき,読む順番は次のとおりです.

最後の行

NameError: ... がエラーの正体です. ここでは「goukei という名前は定義されていない」と言っています.

その上の行

line 2 とあるので,2行目でエラーが 起きたと分かります.どの行を直せばよいかの手がかりになります.

つまり,「最後の行でエラーの種類を知り,その少し上で何行目かを知る」. この2つさえつかめば,原因の見当はだいたいつく.英語が並んでいてもおじけづかず, まずは最後の行に目をやるくせをつけよう.

Traceback(トレースバック)という最初の1行は, 「これからエラーの場所をたどって表示します」という合図です.読み飛ばして かまいません.

  • エラーメッセージはいちばん最後の行を読みます.エラーの種類が書いてあります.

  • その少し上の line ◯ で,何行目でつまずいたかが分かります.

  • エラーは「ここを直してね」というメッセージです.こわがらなくてよいでしょう.

代表的なエラーと直し方

ここからは,よく出会うエラーを1つずつ見ていく.エラー名(最後の行に出る言葉)で さがせるようにしてあります.

SyntaxError:書き方のルール違反

SyntaxError(シンタックスエラー)は, Python の文法(書き方のルール)に合っていないときに出ます. プログラムが実行される前の段階ではじかれるので,1行も動かないことが多いです. 原因はいくつかあるが,初学者に多いのは次の3つです.

(1) コロン : の付け忘れ

if 文や for 文の行末には,かならずコロン : が必要です.

appendix_code_12.py
tensuu = 80
if tensuu >= 60   # 行末のコロンを忘れている
    print("合格")
実行結果の例
  File "test.py", line 2
    if tensuu >= 60
                   ^
SyntaxError: expected ':'

原因:if の行の終わりにコロンがありません.
直し方:行末に半角のコロンを付けて if tensuu >= 60: とします.

(2) カッコの閉じ忘れ

カッコ (\ ) は,開いたら必ず閉じる.片方だけだとエラーになります.

appendix_code_14.py
print("こんにちは"   # 閉じカッコ ) を忘れている
実行結果の例
  File "test.py", line 1
    print("こんにちは"
         ^
SyntaxError: '(' was never closed

原因:print( を開いたまま ) で閉じていません.
直し方:行末に ) を足して print("こんにちは") とします.

(3) 全角文字の混入

記号を全角で打ってしまうと,見た目は似ていてもエラーになります. 全角のカッコ「()」,全角の空白,全角のクォート「”」などが原因になりやすい.

appendix_code_16.py
print("おはよう")   # カッコが全角の ( )になっている
実行結果の例
  File "test.py", line 1
    print("おはよう")
         ^
SyntaxError: invalid character '(' (U+FF08)

原因:カッコが全角の「()」になっています.
直し方:日本語入力をオフにして,半角の (\ ) で打ち直します. invalid character と出たら,まず全角が混じっていないか疑う.

全角と半角の見分けはつきにくい.invalid character や, 記号の付近を指す \^{} 印が出たら,その行の記号がすべて半角か 確認するとよいでしょう.日本語のコメントや文字列の中身は全角でかまわないが, print・カッコ・クォート・コロンなどの記号は必ず半角です.

IndentationError:字下げのずれ

IndentationError(インデンテーションエラー)は, 字下げ(インデント)がそろっていないときに出ます.Python では,字下げが プログラムのまとまりを表すため,ずれていると意味が伝わりません.

appendix_code_18.py
tensuu = 80
if tensuu >= 60:
print("合格")   # 字下げされていない
実行結果の例
  File "test.py", line 3
    print("合格")
    ^
IndentationError: expected an indented block after 'if' statement on line 2

原因:if の中身であるはずの print が字下げされていません.
直し方:if の次の行を,半角スペース4つだけ右へずらす.

字下げは半角スペース4つでそろえます.スペースとタブが混ざると, 見た目は同じでもエラーになることがある(TabError と出る). 同じブロックの中は,字下げの幅をそろえることが大切です.

NameError:名前が見つからない

NameError(ネームエラー)は,まだ定義していない名前を 使おうとしたときに出ます.変数名のつづり間違いや,クォートの付け忘れが原因になりやすい.

appendix_code_20.py
goukei = 150
print(goukai)   # goukei と打つべきところを goukai と書いた
実行結果の例
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    print(goukai)
NameError: name 'goukai' is not defined

原因:goukei とすべき変数名を goukai と打ち間違えています.
直し方:つづりをそろえて print(goukei) にします.name '◯◯' is not defined の ◯◯ の部分が,見つからない名前です.そこをよく見て, 代入したときの名前と一字一句同じか確かめる.

文字列をクォートで囲み忘れたときも NameError になります.たとえば print(konnichiwa) は konnichiwa という変数をさがしてしまう. 文字をそのまま表示したいなら print("konnichiwa") とクォートで囲む.

TypeError:データ型が合わない

TypeError(タイプエラー)は,データ型(種類)の 合わないものを一緒に使おうとしたときに出ます.とくに多いのが,文字列と 数値をそのままつなげようとした場合です.

appendix_code_22.py
tensuu = 80
print("点数は" + tensuu)   # 文字列 + 数値 はできない
実行結果の例
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    print("点数は" + tensuu)
TypeError: can only concatenate str (not "int") to str

原因:文字列 "点数は" に,整数 tensuu を + で つなごうとしました.文字と数値は種類が違うのでつなげません.
直し方:数値を str(...) で文字列に変換してからつなぐ.

appendix_code_24.py
tensuu = 80
print("点数は" + str(tensuu))   # str() で文字列に変換
実行結果の例
点数は80

str は数値を文字列に直す関数です.逆に,文字列を計算に使い たいときは,次の int で数値に直す必要がある(次項を参照).

ValueError:値が変換できない

ValueError(バリューエラー)は,形は合っているが, その値では処理できないときに出ます.よくあるのは,数字でない文字列を int で整数に変換しようとした場合です.input で受け取った 入力をそのまま int に渡すときに起きやすい.

appendix_code_26.py
moji = "abc"
tensuu = int(moji)   # "abc" は数値に直せない
print(tensuu)
実行結果の例
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    tensuu = int(moji)
ValueError: invalid literal for int() with base 10: 'abc'

原因:"abc" は数字でないので,整数に変換できません.
直し方:int に渡すのは "80" のように数字だけの文字列に します.キーボードからの入力を扱うときは,数字以外が入る可能性に注意します.

TypeError と ValueError は混同しやすい.種類そのものが 合わないのが TypeError(文字と数値の足し算など),種類は合っているが 中身の値がだめなのが ValueError("abc" を整数に,など)と 覚えておくとよいでしょう.

IndexError:添字が範囲の外

IndexError(インデックスエラー)は,リストの 添字(そえじ)が,あるはんいを外れたときに出ます.添字は0から始まる ことを思い出してください.要素が3つのリストなら,使える添字は0・1・2であり, 3はもう範囲の外です.

appendix_code_28.py
tensuu = [80, 65, 90]   # 要素は3つ(添字は0,1,2)
print(tensuu[3])        # 添字3は範囲外
実行結果の例
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    print(tensuu[3])
IndexError: list index out of range

原因:要素が3つしかないリストに,添字 3(4番目)でアクセスしました.
直し方:いちばん後ろの要素は tensuu[2] です.添字は 0から数えて「要素の数 − 1」までと覚えます.要素の数は len(tensuu) で調べられます.

「3番目がほしい」と思って tensuu[3] と書くのは典型的な間違いです. 添字は0から始まるので,3番目は tensuu[2] です.list index out of range(はんいの外)と出たら,まず添字が0始まりであることを思い出します.

ZeroDivisionError:0で割った

ZeroDivisionError(ゼロディビジョンエラー)は, 0で割り算をしたときに出ます.数学で「0で割ってはいけない」のと同じ理由で, コンピュータも0では割れません.平均を求めるときなど,人数が0のまま 割ってしまう場面で起きやすい.

appendix_code_30.py
goukei = 0
ninzuu = 0
heikin = goukei / ninzuu   # 0で割っている
print(heikin)
実行結果の例
Traceback (most recent call last):
  File "test.py", line 3, in <module>
    heikin = goukei / ninzuu
ZeroDivisionError: division by zero

原因:ninzuu(人数)が0なのに,それで割ろうとしました.
直し方:割る前に,割る数が0でないかを if で確かめる.

appendix_code_32.py
goukei = 0
ninzuu = 0
if ninzuu == 0:
    print("人数が0なので平均は計算できない")
else:
    print(goukei / ninzuu)
実行結果の例
人数が0なので平均は計算できない

FileNotFoundError:ファイルが見つからない

FileNotFoundError(ファイルノットファウンド エラー)は,開こうとしたファイルが見つからないときに出ます. CSVファイルなどを open で読み込むときに,ファイル名やパスの 書き間違いがあると起きる.

appendix_code_34.py
f = open("tensu.csv")   # 本当のファイル名は tensuu.csv
print(f.read())
実行結果の例
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    f = open("tensu.csv")
FileNotFoundError: [Errno 2] No such file or directory: 'tensu.csv'

原因:tensuu.csv とすべきところを tensu.csv と 打ち間違えています.
直し方:ファイル名のつづりを正しく書きます.あわせて,そのファイルが プログラムと同じ場所(フォルダ)にあるかも確かめる.別のフォルダに あるなら,置き場所をそろえるか,正しい道すじ(パス)を書きます.

No such file or directory(そんなファイルやフォルダはない)の あとに,さがしに行ったファイル名が表示されます.そこに出ている名前が, 自分の用意したファイル名と一字一句同じかを見比べるとよいでしょう. 大文字と小文字の違い(Data.csv と data.csv など)にも注意します.

エラー名 早見表

最後に,これまで見てきたエラーを一覧にまとめておく.エラーの最後の行に出た 名前で,このページから原因の見当をつけられます.

エラー名 おもな原因
SyntaxError コロン忘れ,カッコの閉じ忘れ,全角混入
IndentationError 字下げのずれ・付け忘れ
NameError 変数名のつづり違い,未定義の名前
TypeError 文字と数値の連結,str() 忘れ
ValueError int("abc") など変換できない値
IndexError 添字が範囲の外(0始まりに注意)
ZeroDivisionError 0で割り算をした
FileNotFoundError ファイル名・置き場所の間違い
  • エラーは最後の行でエラー名を,line ◯で行番号を読みます.

  • 多くは記号の半角・全角,つづり,字下げ, 添字の0始まりの確認で直る.

  • エラー名でこの早見表を引けば,原因の見当がつく.エラーは直し方を教えて くれる手がかりです.

変数名一覧とつまずき総点検

本書を最後まで読み終えたら,この付録を手もとに置いておくとよいでしょう.前半は,本書に 出てきた変数の名前を一覧にしたものです.自分でプログラムを書く ときに「合計を入れる変数は何という名前にしよう」と迷ったら,この表と同じ名前を 使えばよいでしょう.後半は,初学者がつまずきやすいところを一気に点検できる総点検表です.プログラムが思ったとおりに動かないとき,上から順に見ていけば,たいていの 原因は見つかります.

変数名の付け方の方針

プログラムでは,値に名前を付けて取りあつかう.この名前のことを変数名といいます. 変数名は自分で自由に決めてよいが,自由だからこそ「何という名前にするか」で 迷いやすい.そこで本書では,変数名を次の方針でそろえています.

  • 変数名はローマ字にします.たとえば合計は goukei,平均は heikin とします.total や average のような英単語は 使いません.英単語は,意味を知らないと読めないことがあるが,ローマ字なら 日本語をそのままローマ字にしただけなので,初学者でも読み方に迷いません.

  • 名前は半角の小文字で書きます.Goukei のように大文字で 始めたり,全角文字を使ったりはしません.

  • その値が「何を表しているか」が分かる名前にします.a や x のような1文字の名前は,何を入れたのかが後で分からなくなりやすいので, なるべく避ける.

このように名前のつけ方をそろえておくと,どの章のプログラムを見ても,同じものは 同じ名前で書かれているので,読み返すときに迷わずにすむ.

本書で使う変数名一覧

表1.1に,本書で使う代表的な変数名をまとめる.「変数名」が 実際にプログラムへ書く名前,「意味」がその変数に入れる値,「主な例」が その名前を使う場面です.

本書で使う代表的な変数名
変数名 意味 主な例
goukei 合計 点数の合計,買い物の合計金額
heikin 平均 平均点,平均気温
tensuu 点数 テストの点数
ninzuu 人数 クラスの人数,出席者の人数
namae 名前 生徒の名前,商品の名前
kion 気温 1日の気温,平均気温
shinchou 身長 身長の記録
taijuu 体重 体重の記録
kaisuu 回数 繰り返した回数
saidai 最大 最高点,最高気温
saishou 最小 最低点,最低気温
kekka 結果 計算や判定の結果
nedan 値段 商品の値段
goukaku 合格 合否の判定結果

なお,リストには名前の末尾を変えて,たとえば点数のリストを tensuu_list, 気温のリストを kion_list のようにすると,1つの値とリストを区別しやすい. 繰り返しで使う変数には,回数を表す i を例外的に使うことがあるが,これは 昔から広く使われている習わしなので,そのまま覚えておくとよいでしょう.

  • 変数名は読み方に迷わないローマ字(goukei,heikin など)で そろえます.

  • 半角の小文字で,意味の分かる名前を付ける.

  • 迷ったら本書の一覧(表1.1)と同じ名前を使えばよいでしょう.

つまずき総点検表

ここからは,プログラムが動かないときに見直す点をまとめる.エラーは「ここが おかしい」というコンピュータからのメッセージであり,こわいものではありません.次の 項目を上から順に確かめていけば,初学者がつまずく原因のほとんどはここで見つかります. 各項目を「症状」「原因」「直し方」の3つに分けて説明します.

半角と全角の混同

症状

正しく書いたつもりなのに,SyntaxError(文法の誤り)と 表示されます.とくに記号のあたりでエラーになります.

原因

カッコ (\ ),クォート "\ ",コロン : などを, 日本語入力(全角)の「()」「” ”」「:」で打ってしまっています.見た目は 似ているが,コンピュータにとっては別の文字です.

直し方

記号はすべて半角で入力します.日本語入力をオフにしてから 記号を打つ習慣をつける.空白(スペース)も同じで,字下げには半角スペースを 使います.

半角と全角の取りちがえは,初めての人がいちばん多くつまずくところです.画面では ほとんど見分けがつかないので,「エラーが出たらまず記号が全角になっていないか 疑う」と覚えておくとよいでしょう.

比較の == と代入の = の取りちがえ

症状

条件分岐で,思ったとおりに判定されません.または if の行で SyntaxError になります.

原因

「等しいか比べる」つもりの場所で,= を1つだけ書いてしまって います.= は代入(値を入れる)であり,比較(等しいか 調べる)は == と2つ重ねて書きます.

直し方

「等しいか?」と比べるときは必ず == にします.次のように直します.

appendix_code_36.py
# 誤り:if tensuu = 80:
# 正しく直すと次のようになる
if tensuu == 80:
    print("80点である")

添字は0から始まる

症状

リストの「1番目」を取り出したつもりが,2番目の値が出てくる.または 最後の要素を取り出そうとして IndexError(範囲外)になります.

原因

tensuu_list[1] は「1番目」ではなく「先頭から数えて1つあとの 要素」を指す.Python の添字は0から始まるためです. 先頭の要素は tensuu_list[0] です.

直し方

先頭を0番目と数える.要素が5個あるリストなら,使える添字は 0 から 4 までです.次の例で確かめるとよいでしょう.

appendix_code_37.py
tensuu_list = [60, 70, 80]
print(tensuu_list[0])    # 先頭の60が出る
print(tensuu_list[2])    # 3個目の80が出る
実行結果の例
60
80

型変換(int・float)の忘れ

症状

input で受け取った数を足し算すると,数どうしが足されずに 横につながってしまう.または TypeError(型のちがいによる誤り)に なります.

原因

input で受け取った値は,数字に見えても文字列として あつかわれます.文字列のままでは計算できません.

直し方

整数にするなら int(...),小数にするなら float(...) で囲んで,数のデータ型に変換してから計算します.

appendix_code_39.py
tensuu = int(input("点数を入力:"))
goukei = tensuu + 10        # 数として足し算できる
print(goukei)

int を付け忘れたまま "50" + "10" のように足すと,計算ではなく 文字列の連結になり "5010" となってしまう.数として計算したいときは, 入力を受け取った直後に変換しておくとよいでしょう.

字下げは半角スペース4つ

症状

IndentationError(字下げの誤り)と表示されます.または if や for の中の命令が,思ったとおりに実行されません.

原因

if や for の次の行の字下げが, ずれています.字下げの深さで「どこまでがそのまとまりか」を表すため,深さが そろっていないとエラーになります.タブと半角スペースを混ぜても起こりやすい.

直し方

字下げは半角スペース4つでそろえます.同じまとまりの命令は, 同じ深さにきちんとそろえます.

appendix_code_40.py
for i in range(3):
    print("くりかえし中")    # スペース4つで字下げ
    print(i)                 # 同じ深さにそろえる

コロン : の付け忘れ

症状

if,for,while,else などの行で SyntaxError になります.

原因

これらの命令は,行のおわりにコロン : が必要です. これを付け忘れています.

直し方

if・for・while・elif・else の行の最後には,必ず : を書きます.次の行を字下げするのも忘れません.

appendix_code_41.py
# 誤り:if tensuu >= 60
# 正しくは行末にコロンを付ける
if tensuu >= 60:
    print("合格である")

クォートの閉じ忘れ

症状

SyntaxError になり,文字列のあたりが原因と表示されます.

原因

文字列を囲むダブルクォート " を,始めだけ 書いて,おわりに書き忘れています.クォートは始めと終わりの2つで 1組です.

直し方

文字列は "\ " で必ず両側をはさむ.始めに付けたら, おわりにも付いているか確かめる.始めと終わりは同じ種類のクォートにそろえます.

appendix_code_42.py
# 誤り:print("こんにちは)
# 正しくは両側をダブルクォートではさむ
print("こんにちは")

range の終わりの数

症状

range を使った繰り返しが,思ったより1回少ない.

原因

range(5) は 0 から 4 までの5個であり, 5 はふくまれない.range は,指定した終わりの数の 1つ手前までという決まりだからです.

直し方

「1から5まで」のように回数で考えるなら range(5) でよい(5回繰り返す).取り出す数の範囲を 1 から 5 までに したいときは range(1, 6) のように,終わりを1つ大きくします.

appendix_code_43.py
for i in range(1, 6):
    print(i)        # 1から5まで表示される
実行結果の例
1
2
3
4
5

名前の打ちまちがい

症状

NameError(名前が見つからない)と表示されます.

原因

変数名や関数名を打ちまちがえています.たとえば goukei を goukey と書いたり,print を prit と書いたりして います.代入する前の変数を使ってしまった場合にも起こる.

直し方

エラーに出ている名前を,書いたところと見くらべる.同じ変数は, どこでもまったく同じつづりで書きます.大文字と小文字もきちんと区別 される点に注意します.

総点検の順番

エラーが出たら,あわてずに次の順番で見直すとよいでしょう.エラーメッセージの最後の行に 書かれている語が,どの項目に当たるかの手がかりになります.

エラーの種類と見直す項目
エラーの表示 まず疑うこと
SyntaxError 半角全角,コロン,クォートの閉じ忘れ
IndentationError 字下げのずれ(半角スペース4つ)
NameError 変数名・関数名の打ちまちがい
TypeError 型変換(int・float)の忘れ
IndexError 添字が範囲外(0始まりで数える)
  • エラーは「どこを直せばよいか」を教えてくれる手がかりです.

  • まず記号が半角か,コロンとクォートが閉じているかを確かめる.

  • 字下げは半角スペース4つ,添字は0始まり,range は終わりの数を ふくまない,と覚えておく.

  • エラーの種類の語(表1.2)から,見直す場所を絞りこめる.