TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

このページでは、Pythonプログラムの実行時にでてくる”TypeError: unsupported operand type(s) for +: ‘int’ and ‘str'”というエラーの意味と、その修正の仕方について説明します。

TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ の意味

やや意訳すると、+という計算の記号(演算子)は、int型とstr型の間の計算には使えません、というような意味です。

要は、整数と文字列は+できないということです。

考えられる原因となおし方

エラがーが出る状況は、下のような例が典型的です。PythonのREPL等で、2+’031’を計算しています。

>>> 2 + '031' Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'int' and 'str'

2は整数でint型、’031’は文字列でstr型なので、+で足し算はできません。

これを修正するには、’031’をやめて31という整数で書くか、int(‘031’)として、文字列の’031’をint型に変換します。

関連する練習問題がこちらにあります。

型の変換

SyntaxError: invalid syntax | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > SyntaxError: invalid syntax

Pythonでプログラミングをして動かした時、”SyntaxError: invalid syntax”というエラーが発生して処理が止まってしまうことがあります。このエラーの意味や、このエラーが表示されたときの修正方法を解説します。

SyntaxError: invalid syntax の意味

日本語に直訳すると、「構文 エラー: 不適切な構文」という意味です。 構文 とは、この場合、Pythonの書き方のことです。つまり、このエラーの意味はPythonの書き方が間違っているということです。

書き方が間違っているといっても、このエラーメッセージからは、具体的にどこが間違っているか、分かりません。実は、このエラーが出る間違いは非常に沢山の種類があります。

しかし、このエラーメッセージの全体をよく読むと、 修正方法を見つけるヒントがあります。

エラーメッセージの構造

エラーの全体は下のようになっているはずです。

  File "myfor.py", line 3
    for i in range(0, x)
                       ^
SyntaxError: invalid syntax

“SyntaxError: “~というメッセージの上に、プログラム喉の部分が間違っているか、”^”で示してあります。最初の行には、どのファイルの何行目に間違いがあるかも書いてあります。

上のプログラムだと、myfor.pyというファイル(File “mfor.py”)の3行め(line 3)に間違いがあります。

“^”のある場所を探してみると、for文の最後にあります。これは、必要な”:”(コロン)がないためにエラーが発生しています。
for文の書き方は、” for xxx in xxx xxxx : “という感じなので、forの行の最後に”:”が必要です。

詳しくは下のリンク先をご覧ください。

たくさんのデータで同じ処理を繰り返す

考えられる原因となおし方

上のfor文の”:”不足はあくまでひとつの例です。考えられる原因は他にもたくさんあります。そのうち、初心者がおこしやすいものをいくつか解説します。

for文のinが無い

  File "myfor.py", line 3
    for i  range(0, x):
               ^
SyntaxError: invalid syntax

上の例と同じですが、for文に必要な”in”が無いということです。

ifの”:”が無い

  File "myfor.py", line 3
    if x > 0
           ^

ifにも”:”が必要です。これも忘れてしまうことがあります。

elseの”:”が無い

File "myfor.py", line 5
    else
       ^
SyntaxError: invalid syntax

これも上と似ていますが、elseの”:”(コンマ)は特に忘れやすいです。”:”と最後に付けましょう。

リスト[]の使い方: 負のインデックス

Python独学ならTech-Joho TOP > Python用語辞典 >リスト[]の使い方: 負のインデックス

インデックス

リストのインデックスとは、リストの後ろの[]の中に入れる数字です。リストの要素にアクセスするとき、何番目の要素かを指定する数字です。

>>> mylist = [1, 9, 9, 8]
>>> print(mylist[0])
1

上の例でいうと、mylist[0]の0がインデックスです。この例だと、0番、つまり一番最初の要素である1が表示されます。

負のインデックス

このインデックスは負の数値も指定できます。この場合、後ろから数えて何番目か、という指定になります。

注意点は、この場合は1で番号が始まります。つまり、-1が一番後ろです。

>>> mylist = [1, 9, 9, 8]
>>> print(mylist[-2])
9

上の例だと、-1は後ろから1番目なので、8が表示されます。

Pythonのandとor

Python独学ならTech-Joho TOP > Python用語辞典 >Pythonのandとor

andとor

and や orは、TrueやFalse(真偽値)と合わせて、論理演算、ブール演算とはで使う演算子です。
主に、if文の条件を指定する場合に使います。
複数の条件が同時に成り立つ場合(and)や、いずれかしか成り立たない場合(or)を指定することができます。

例えば、「xが1より大きく3より小さい」は下のようになります。

>>> 1 < x and x < 3

別の例だと、「xが10以下、もしくは20以上」は下のようになります。

>>> x <=  10 and 20 <= x 

Pythonのブール演算は少し違う

Pythonのブール演算は、他のプログラミング言語と比べると変わったところがあります。

簡単に箇条書きすると、下のようになります。

  • 数学の記号のように複数条件をつなげて書くことができる。
  • bool型の値(True/False)以外の値を返す

比較をつなげることができる

参考
Python3の公式リファレンス6.10. 比較

説明するより、下の例を見て下さい。

先程あげた、「xが1より大きく3より小さい」という例は、下のものでした。

>>> 1 < x and x < 3

これと、同じ意味の書き方がもう一つあります。

>>> 1 < x < 3

2つのxとandが消えています。
数学のように、「 1 < x < 3」は「xが1より大きく3より小さい」の意味になっています。 xに2など、適当な数字を代入して、下の黒い欄で実行してみてください。 もう一つの例、「xが10以下、もしくは20以上」は1つの書き方しかありません。

>>> x <=  10 and 20 <= x 

bool型以外の値を返す

参考
Python3の公式リファレンス 6.11. ブール演算 (boolean operation)

これは上の内容をそのまま転記します。

式 x and y は、まず x を評価します; x が偽なら x の値を返します; それ以外の場合には、 y の値を評価し、その結果を返します。

式 x or y は、まず x を評価します; x が真なら x の値を返します; それ以外の場合には、 y の値を評価し、その結果を返します。

例を上げて説明しましょう。
「10 or False」がどのように計算され、どのような値を返すか考えてみます。
まず、左の10は、真偽値を判定すると、真になります。
orは、その左の値が真なら左の値を返します。
つまり、この時点で、10は真なので、10が返ることになります。
orの右にあるFalseは、真偽が判定されることもありません。

>>> 10 or False
10

次に、「-1 and 10 > 2」がどのように計算され、どのような値を返すか考えてみます。
まず、左の-1は、真偽値を判定すると、偽になります。
andは、その左の値が偽なら左の値を返します。
つまり、この時点で、-1は偽なので、-1が返ることになります。
abdの右にある10 > 2は、真偽が判定されることもありません。

>>> -1 and 10 > 2
0

input関数|Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > inputで入力を受け付ける

inputで入力を受け付ける

input関数は、その名の通り、ユーザからの入力(input)を受け付ける関数です。
まず、文字で説明するより使ったほうが理解しやすいと思います。
下の黒い欄に、”suuji = input(‘数字を入力して下さい’)”と入力してください。

>>> suuji = input('数字を入力して下さい')

すると、こんな風に、’数字を入力して下さい’と書いたウインドウがでてきます。

Brythonによる入力ダイアログ

入力欄に’1’か何か、数字を入力してOKを押して下さい。
すると、ウインドウが閉じます。

実は、この時点で、suujiという変数に今入力した数値が代入されています。
下のように、print(suuji)と入力してエンターキーを押して下さい。

>>> suuji = input('数字を入力して下さい')
>>> print(suuji)
1

先程入力した数値が表示されます。

input関数の引数

input関数は人間(ユーザ)に入力をさせて、その値を返す関数です。
inputの引数は、入力させるときに表示する文言です。

こうすれば、’何か入力して下さい’と表示されます。

>>> input('何か入力して下さい')

input何か入力して下さい。

こうすれば、’ああああ’と表示されます。

>>> input('ああああ')

inputあああ

下の黒い欄で自分で試してみてください。

inputの引数の練習

ユーザに’アルファベットを入力!!’と表示する、input関数の引数を考えて実行してください。

input関数の戻り値

繰り返しになりますが、input関数は人間(ユーザ)に入力をさせて、その値を返す関数です。
inputの戻り値は、人間が入力した関数です。

下のコードでは、my_inputに、ユーザが入力した値を代入します。

>>> my_input = input('何か入力して下さい')
>>> print(my_input)

なので、my_inputをprintすると、ユーザが入力した文字列が表示されます。

ちなみに、input関数の戻り値は常に文字列になります。
なので、数字を入力しても、数値の文字列になってしまいます。

‘1’ * 5 は 5ではなく、文字列’1’を5こくっつけた’11111’になります。

>>> my_input = input('何か入力して下さい') # 1を入力する
>>> print(my_input * 5)
'11111'

数値として計算したいときは、int関数やfloat関数で、文字列を数値に変換しましょう。

>>> my_input = input('何か入力して下さい') # 1を入力する
>>> int(my_input) * 5
5 

intやfloat等、変数の型についてはこちらをみてください。
変数の型について/

inputの戻り値の練習

ユーザに数値を入力してもらい、それを100倍して表示するプログラムを実行してください。

ふつうのPythonだとウインドウはでてこない

なお、これまで、input関数を実行するとウインドウがでてきましたが、それはこのサイト上でPythonを実行しているときだけの話です。(正確に言うとBrythonをつかっているときだけ)

自分のPCにPythonをインストールして使っている場合、ウインドウはでず、単にinputの引数にしたメッセージが表示されるので、そのまま黒い画面に入力できます。こんな感じです。

>>> message = input('please input!! : ')
please input!! : はーい
>>> print(message)
'はーい'

Pythonの変数名のつけ方|Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > Pythonの変数名のつけ方

Pythonの変数名はなんでもいい

タイトルの通り、Pythonの変数名はなんでも良いです。

画面の下の黒い欄にPythonのコードを入力してみて下さい。
いろいろな変数名

上の例では、x、suuji、num123という変数に数値を代入してみました。この変数名は適当に決めました。変数名は、あなたの自由に決めていいものです。

ただし、後々のことを考えると、その変数に代入した数字の意味を表すようなわかりやすい名前にしたほうが良いと思います。

意味のある変数名の例

上の例では、円周率の数値をenshuuritsuという変数に代入しました。また、18歳という年齢を表しているという想定で、ageという変数に数値を代入してみました。

変数名のルール

なお、変数名は自由に決められると言っても、いくつか基本的なルールは決まっています。

  • 使える文字は、「アルファベット」、「数字「、「_」だけ (python3からは実は日本語や記号等も使える)
  • 大文字と小文字は区別される
  • 先頭に数字は使えない
  • is, not, if, for など、Pythonの命令などで使われている特別な単語は使えない

下の例では、変数に1suuchiという名前をつけようとして、”SyntaxError invalid syntax”というエラーが表示されています。

変数名1suuchiはInvalid syntaxになる例

このように、ルールに違反する変数名はつけたくてもつけることができません。

おまけ 日本語の変数名

python3からは、文字列の扱いがUnicodeになった関係で、変数や関数の名前として、日本語や記号等も使えます。
python unicode variables name

参考
Python3 日本語の変数名&関数名
https://www.cmscom.jp/blog/k3mhim

 

 

NameError: name ‘xxx’ is not defined | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > NameError: name ‘xxx’ is not defined

Pythonのプログラムをつくっていて、”NameError: name ‘xxx’ is not defined”というエラーの意味や、このエラーが表示されたときのなおし方についてのページです。

エラーの全体は、このような内容になっているはずです。

Traceback (most recent call last):
module __main__ line 145
traceback.print_exc()
module <module> line 10
NameError: name ‘xxx’ is not defined

このうち、重要なのは一番最後の行です。

このxxxの部分は人によって違うと思いますので、実際のエラーにある内容に置き換えて考えて下さい。

エラーの意味

NameErrorは日本語にすると名前のエラー。

つまり、変数の名前に関するエラーです。

name ‘xxx’ is not definedの意味は、xxxという名前の変数が定義されていませんという意味です。

考えられる原因となおし方

1 変数名の書き間違い

恐らく、一番ありがちなのは、定義してある変数を間違った変数名で呼び出そうとしている場合です。

変数 xxを定義したのに、xxxに代入しようとしている、

変数pictureの綴りを間違えて、pictuleになっている等です。

2 変数がない

本当に定義されていない変数に値を代入しようとしている場合もあります。

コピペを駆使してプログラムを作っている時に、起こりがちです。

そのようなときは、エラーの下から2行目を見て、エラーが発生している箇所を突き止めましょう。

module <module> line 10

このような場合、line 10、つまり1行目でエラーが発生しています。

10行目より上で、変数(例のエラーの場合xxx)を定義しましょう。

 

Python = | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > Python =

Pythonの”=”の意味

このページでは、Pythonでの”=”の意味について説明します。

“=”は、イコールと読みます。

 


=の意味

Pythonでは、”=”は、その右に書いた値を、左に書いた変数に代入するための文字です。

例えば、”x = 10″と書くと、”=”の右の10を”=”の左のxに代入します。

“=”は、正確には、代入演算子(だいにゅうえんざんし)とよびます。

 


代入とは

代入の意味は、変数を箱として考えるとわかやすいかもしれません。

xという箱(変数)に、10という整数の値を入れるのが、代入だと考えてみて下さい。

Pythonにおける代入のイメージ

 


“=”をためしてみる

下の黒い欄では、Pythonのプログラムを入力して実行することができます。実際に”=”を使ってみましょう。

 

まず、”x = 10″と入力して、エンターを押してください。

これで、変数xに10という数字(整数)が代入されました。

この状態で、”print(x)”と入力してエンターを押してください。

これは、xに設定されている値を表示して下さい、とPythonに命令しています。

すると、先程xに代入した10が表示されます。

xに10を代入する例

 

続けて、”x = 20″と入力して、エンターを押してください。

これで、変数xに20という数字(整数)が新たに代入されました。

この状態で、”print(x)”と入力してエンターを押してください。

これは、xに設定されている値を表示して下さい、とPythonに命令しています。

すると、最初に代入した10ではなく、次に代入した20が表示されます。

代入演算子による代入の例


==と=の違い

数学や算数では、”=”は左辺と右辺が等しい、同じ値であることを表す記号、等号(とうごう)です。

そのため、Pythonでも、”=”を左右が等しい、という意味と勘違いしてしまう人がいます。

しかし、Pythonでは、”=”はその左右の値が等しいという意味ではありません。

 

Pythonでは、イコールを2つ横に並べる”==”がでてきます。

“==”と”=”は、によく似ていますが違う意味です。

“==”は、Pythonで、左右の値が等しいかどうかを調べ、等しければ”True”を、等しくなければ”False”を返す比較演算子です。

詳しくは、”==”の記事をご覧ください。