このように書けば、 3 つの文字列が連結されて表示されます。これから作る「 15 分は O. 25 時間です」と表示するプログラムは「 15 / 60 」という計算の結果の数値と文字列を 連結する必要があります。同じように「 + 」を使って連結してみましよう。 chap2. py p r i n t ( " 1 5 分は " + 15 / 6@ + " 時間です " ) このプログラムを実行するとエラーになってしまいます。 PS C:\python> python chap2 ・ py Traceback (most recent ( a11 last) : FiIe "chap2. py", line 1 , in く module> print("15 分は " + 15 / + " 時問てす " ) TypeError: must be str, not float PS C:\python> 0 実行結果 工ラーメッセージを確認すると、「型のエラー。 float ではなく、 st 「にしなければな りません」という意味の英語が表示されています。どうやらこの書き方では文字列と数 値を連結することはできないようですね。ではどうするかというと、数値を文字列に変 換して、文字列と文字列の結合にしてしまえばいいのです。 数値を文字列に変換するには、 st 「関数を使います。使い方は p 「 int 関数と同じように 変換したいところを「 st 「 ( ) 」で囲みます。 chap2. py p 「 i n t ( " 15 分は " + 5 t r ( 15 / 6 の + @@ 1 PS C:\python> python chap2. py 15 分は 9.25 時間てす PS ( : \ thon> " 時間です” ) 0 実行結果 工ラーが発生せずに正しく表示されました。このように文字と数値を同時に表示する には、文字列に合わせる必要があります。 38
COLUMN 演算子の優先順位に注意 ! こまで比較演算子や論理演算子など、いくつかの種類の演篁子が出てきましたが、 れらには優先順位が決められています。たとえば「 num = x ☆ 7 + Y ☆ 3 」という式を書 いた場合、ます「 x ☆ 7 」と「 Y ☆ 3 」が先に計され、その結果が足され、最後に変数 num に 結果が代人されます。それは演篁子の優先順位が「☆」「 + 」の順番になっているからです。 優先順位が同し場合、たいていは左にあるものが優先して処理されます。 n u m 3 演算子の優先順位に したがって計算される く 2 の」といった具合に先に計算させたいものをカッコで囲んでください。 比較演篁子や論理演篁子の優先順位は下のほうなので、必要に応して「 ( x > 5 ) and (x 3 4 1 2 5 6 7 : x[index] 式結合またはタブル リスト 辞書、集合 添字指定 x[index:index] スライス操作 」 x(a 「 guments... ) 呼び出し x. attribute await X 属性参照 Await 式 べき乗 : 正数 〕負数 ビット単位 NOT 乗算 一行列の乗算 除算 除算 ( 切り捨て ) 剰余 加算 ー減算 8 9 1 3 1 4 1 6 1 7 < く lln ー not in ー iS not ー not X and 第一 else (lambda シフト演算 シフト演算 ビット単位 AND ビット単位 X 〇 R ビット単位〇 R 帰属検査演算子 帰属検査演算子 N 〇 T 同一性比較演算子 同一性比較演算子 N 〇 T 比較演算子 ( 小さい ) 比較演算子 ( 以下 ) 比較演算子 ( 大きい ) 1 比較演算子 ( 以上 ) 比較演算子 ( 等しくない ) 比較演算子 ( 等しい ) 論理演算 NOT 論理演算 AND 論理演算 OR 条件式 フ
2 - 3 数値き記憶して計算せせよう さっそくやってみましよう。 15 + 60 という計算をしてみます。 chap2. py p r i n t ( 15 / 6@) ( hap 「 2 PS C:\python> python chap2. py 9.25 PS ( : 、 thon> 0 実行結果 実行すると「 O. 25 」と表示されました。 15 + 60 の計算結果が p 「 int 関数によって表 示されています。計算は算数や数学と同じでに」と「 / 」が「 + 」と「 - 」よりも先に行われま す。計算の順番を入れ替えたい場合は「 ( ) 」で囲みます。 # 2 * 2 が先に行われるので結果は 7 p 「 i n t ( 3 + 2 * 2 ) # 3 + 2 が先に行われるので結果は 1@ p 「 i n t ( ( 3 + 2 ) print(2 / ()@ / 3 の ) # 6@/3@ の結果を 2 で割るので結果は 1 . chap2. py @@ 3 「 ( ) 」を使用する場合は「 ( 」と D 」の数が同じでないとエラーになります。上記の例で ありがちなのが、 p 「 int 関数の D 」を計算の D 」と間違えて D 」を少なく書いてしまうこ とです。どちらも同じ D 」なのでわかりにくいですが、 VS C 〇 de では「 ( 」にカーソルを 置くと対応する D 」の色を変えてくれるので、参考にしてエラーを起こさないように注 意しましよう。 また、上記の例では数値と演算子の間に半角スペースを入れていますが、これはソース コードを見やすくするために入れたもので、なくても正常に動作します。 文字と数値を一緒に表示してみよう 今度は文字列と数値を一緒に表示してみます。先ほど作った 15 分は何時間か計算す るプログラムを改造して、「 15 分は O. 25 時間です」と表示するプログラムを作ってみ ましよう。先ほどのプログラムの前後に「 15 分は」という文字列と「時間です」という文 字列を書いて、その間に「 15 / 60 」の結果を表示するように書きます。 python では文字列と文字列の間に「 + 」を挟むことでその文字列が連結されます。次 の例を見てみましよう。 p 「 int ( " おはようこざいます。 + " こんにちは。 ・ + ”こんばんは。” )
ボタンき押すと結果表示され 3 ようにしよっを 3 - 4 @3 9 # メインループ @41 root . mainloop() 1 番目の「テキストボックスに入力された文字を取り出す処理」は、テキストボックス オプジェクトの ent 「 y 変数に get 関数を使うことで取得できます 27 行目では get 関数 でテキストボックスの文字列を取り出し、変数 va [ に代入しています。 2 番目と 3 番目の処理は、 2 章で学んだコードと同じですね。 28 行目では変数 va [ の 文字列を、 float 関数を使って小数点を含む数値に変換しています。そして次の 29 行目 で、分を時間に換算しています。 この換算した数値を 3 つ目の吹き出しに書き込んでいるのが、 30 行目の命令です。 変数 answe 「には、 3 つ目の吹き出しに文字を置くラベルのオプジェクトが入っていま す。この変数 answe 「を操作することで、ラベルに表示する文字を変更することができ ます。ラベルの文字を変更するには、次のコードを追加します。 ☆ラベルの文字を変更する ラベルのオプジェクト [ " text ” ] = 文字列 「 = 」の右側では、変換した時間を st 「関数で文字列化し、「時間だね ! 」と結合すること で「〇〇時間だね ! 」という文字列を作っています。 本章で作るプログラムは、以上で完成です。プログラムを実行して、正しく動作するか 確認してみましよう。 ( hap 「 3
ホタンを押すと結果が表示 ボタンき押すと結果表示されるようにしよっー 3 - 4 GUI プログラムの見た目は前のページまででひととお りできあがりました。ここでは、テキストボックスに文 字を入力し、く聞く〉ボタンをクリックすると、プログ ラムの計算結果が表示されるようにします。 阯 GUI プロクラなに必須のイベントドリフン ボタンを押すと、何かしらの処理が実行される一一プログラムでこのしくみを作るに は、イベントドリプンという考え方を理解する必要があります。 イベントドリプンとは、文字が入力された、ボタンがクリックされたなどのイベントを きっかけに、それに応じた処理を実行するしくみのことです。あまりなじみのない言葉 かもしれませんが、普段使っているパソコンやスマートフォンのアプリでも、イベントド リプンが使われています。 たとえば凵 NE では、テキストボックスに文字を入力したあと送信ボタンを押すと、そ のときはじめてメッセージが送信されます。これは「送信ボタンを押す」というイベン トに、「テキストメッセージを送信する」というプログラムが設定されているためです。 Chap 帚「 今日 今日 ーメッセージが 高島平の植物園に行ってきた一 、おーすごい ! きれいだねー 0 凵 NE のホタンをタップすると メッセージが送信されるしくみ も、イへントドリプンでてきてい ーボタンを押す - 高島平の物園に行ってきた一 十 @) おーすごい ! きれいだね—l 十〇一 / 3
キ = ドら数値を の入力を受け取るには、 input 関数を使います。 ログラムを作ってみましよう。キーポードからユーザー ポードから入力した値に応じて表示する結果を変えるプ 次はソースコードを書き換えなくても、ユーザーがキー input 関数を使ってみよう するという書き方なのです。このように関数が返す結果のことを戻り値または返り値 42 ページで学習した変数への代入と同じです。これは input 関数の結果を変数に代入 この使い方は p 「 int 関数にはありませんでしたね。左側の「変数 = 」のところまでは 変数 = i nput ( 表示文字列 ) ☆ input 関数の使い方 数などと同じ、関数の一種です。 input 関数の使い方は次のとおりです。 キーボードからの入力を受け取るには、 input 関数を使います。 input 関数も p 「 int 関 インブット 実行中にキーボードから何分かを入力できるようにしましよう。 を実行しなければなりません。これでは実用性があるとはいえませんね。プログラムを 外の時間を求めたい場合は「 15 分」の部分のソースコードを書き換えて再度プログラム 前のセクションで「 15 分は何時間かを求めるプログラム」を作りましたが、 15 分以 (Return VaIue) といいます。 リターンバリュ 戻り値 変数 イ 4 ( ト 0 e 「 input 関数
数値き記憶して計算させよう 2 - 3 1 行目は int 関数を使って int 型に合わせました。 int 関数は文字列が整数に変換可能 であれば変換してくれる関数です ( 整数に変換できない文字などを引数にした場合は工 ラーになります ) 。 int 型に合わせた結果、「 3 + 3 」の計算結果である「 6 」が表示されまし た。 2 行目は st 「型に合わせたので「 " 3 " 」のあとに文字列の「 " 3 " 」が連結されて「 33 」が表 示されました。文字と数値の型を合わせる際は、求める結果の型で合わせましよう。 阯変数を使ってみよう 38 ページで作った「 15 分は O. 25 時間です」と表示するプログラムでは、計算前の 分を表示するために「 1 5 」を 2 回書いています。これだと求めたい分が変わるたびに へんすう 2 箇所を変更しなければなりません。これは少し面倒ですね。こういうときは変数 バリアプル (VariabIe) を使いましよう。 変数とは内容を変更できる値を格納する箱のようなもののことです。変数は中に数値 や文字列などのデータを保管でき、プログラムの中で何度もその中身を書き換えること ができます。 ちなみに、ソースコードに直接書いた数値や文字列のことを変数と区別してリテラル (LiteraI) と呼びます。 Chapter 2 わかりやすい名前を付けて しまっておこう じかん リん
ドき見やすくしよっー 5 - 5 関数き使って、 / ースコー 10 X d e f ( u 1 ( ( ) : p 「 i n t ( z ) r e t u 「 n Z ( u lc ( ) Z p 「 i n t ( z ) cu に関数の最後の行に、計算結果の変数である z を「 etu 「 n 文で指定しています。 culc 関数の呼び出し元では、 z に cu に関数の戻り値を代入するようにしています。これを実 行してみます。 PS C:\python> python test. py 0 上が関数内の表示、下は関数 25 外の表示。計算結果が関数の戻 2 5 り値として正常に表示されてい PS C:\python> る。 グローバル変数を使って書いたときと同じように、関数の中の計算結果が関数の外で も表示できました。 この章は、 fo 「ループ、 whi [ e ループ、リスト、関数と盛りだくさんでしたね。でも、こ れで pyth 〇 n プログラミングの基本的な部分はカバーできました。次の章からは、ここ まで学んできたことを組み合わせて少し複雑なゲームプログラムを作っていきましよ つ。 ^ hap 「 5 この章で Python の 基本はおしまい。 次の章らはいよいよ ケー作りに挑戦だ。 1 67
60 i nt 型 ”あああ” s t r 型 Python では上のプログラムのように「 15 / 60 」を計算すると、 int 型同士の計算でも 結果が小数点以下の数値になれば float 型に自動変換されます。また「 3 + (). 5 」といった int 型と float 型の計算でも、 float 型に自動変換されます。 chap2. py p 「 i n t ( 3 + 0 . 5 ) @@ 1 PS C:\python> python chap2. py PS ( ハ thon> 0 実行結果 int 型と float 型の計算なので float 型が優先されて「 3.5 」と表示されました。 データの型が自動変換されるのであれば、次のようなプログラムは実行できるでしょ うか ? chap2. py @@ 1 p r i n t ( " 3 " + 3 ) 実際に書いてみて実行してみるとすぐわかりますが、これはエラーになります。最初 の「 " 3 " 」は st 「型で、後ろの「 3 」は int 型だからです。このように文字列の「 " 3 " 」と整数の「 3 」 をそのまま足すことはできません。 38 ページと同じようにどちらかの型にそろえる必 要があります。 chap2 ・ py @@ 1 PS C 6 3 3 PS ( 40 :\python> :\python> python chap2. py p r i n t ( " 3 ” + 5 t 「 ( 3 ) ) # 5 t r 型に合わせた p r i n t い n t ( " 3 " ) + 3 ) # i n t 型に合わせた 0 実行結果
日本語を表示してみよう では今度は日本語を表示してみましよう。先ほども説明しましたが、「 " " 」の間では 全角文字が使用可能です。まずは先ほどのサンプルコードの「 Say HeIIo! 」を「こんにち は ! 」に変更して実行してみましよう。 chap2. py p 「 i n t (' ・こんにちは ! " ) PS C:\python> python chap2. py こんにちは ! PS ( : \ thon> @@ 1 0 実行結果 「こんにちは ! 」と表示されました。今度は少し長い文章を表示してみましよう。 chap2 . py p 「 int ( " おはようこざいます。こんにちは。こんばんは。 " ) PS C:\python> python chap2. py おはようごさいます。こんにちは。こんばんは。 PS C:\ thon> 0 実行結果 文章が長くなると、改行を入れて次の行に文章を送りたくなってきますね。そういう @@ 1 print ( " おはようこざいます。 \ n こんにちは。 \ n こんばんは。 " ) chap2. py ときは、改行したいところで「 \ n 」を半角で入力しましよう。 PS C:\python> python chap2. py おはようごさいます。 こんにちは。 こんばんは。 0 実行結果 「おはようございます。」と「こんにちは。」と「こんばんは。」が別の行に表示されまし たね。そして、「 \ n 」はどこにも表示されていません。実はこの「 \ n 」というのは、改行 を意味する特別な書き方で、「 \ n 」と書かれた場所で改行するように指示することが できます。このように「 \ + 1 文字」という書き方はエスケープシーケンス ( Es ( ape Sequence 、拡張表記 ) といい、改行の他にもタブ文字などで使うことができます。 34