写真 青い空と雲と建物と木々の緑

nishimotzの日記

  • Hello Python 第2回

    ゲームセンターあらしと学ぶ プログラミング入門 まんが版こんにちはPython (すがや みつる 著)を読んで、プログラミングを勉強してゲームを作ろう、というオンライン勉強会、第2回の記録です。ゲストは第1回と同じ高校生(男子)、見学者1名でした。

    前回は7章まで読んでいましたね?

    >8章 tkinter で GUI プログラミング。読みましたが、紹介されたプログラムが長かったので、読んだだけで、入力して試したわけではないです。

    読んでいて疑問はある? tkinter (「ティーケーインター」と私は読んでいます)は Python に最初から入っていて、追加のインストールをしなくてよいのは利点だけど、わかりにくい点もある。

    >169ページのアクティビティ図、マウスの動きの確認、マウスのポインターの位置を調べる、これは何のために?

    ラケットを動かすところでマウスポインターのx座標を使っている。

    プログラムを著者のサイトからダウンロードして実行してみたら、何をやっているか、わかりやすくなる。

    >ダウンロードしたファイルをダブルクリックしたら、すぐに動いた。

    IDLE を開いて、File / Open から、ダウンロードしたプログラムを開いて、F5 で実行すれば、自分で入力した雰囲気に近くなる。

    ちなみに「まんが版こんにちは Python エラー情報」というページもある。

    >質問。次に読むとよさそうな Python の入門書を知りたい。

    Amazon を検索して画面共有しながら。。

    私が読んでない本や、旧版しか読んでない本もあるので、参考になれば、ということで。。

    最後の「Pythonチュートリアル」は Pythonエンジニア認定基礎試験の出題範囲とのこと。

    >2冊くらい選んで読んでみます。ところで、Python Boot Camp テキストを読むとよい、と言われましたが、まだ読んでいません。

    じゃあ、それも関係あるので、ここから私の準備してきた話題を。。

    「こんにちはPython」で紹介されている tkinter は公式ドキュメントにも説明がある。

    だけど、この説明は「Tcl/Tkドキュメント」と合わせて読まないと、詳しいことがわからない。

    もともと Python とは別のシステムとして作られていたものを「Python からも」使えるようにしたものが tkinter だから。

    公式ドキュメントの中ほどに、「簡単な Hello World プログラム」という例がある。コピーペーストして、自分のマシンで実行してみよう。ほら。。

    import tkinter as tk
    
    class Application(tk.Frame):
        (中略)
    
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

    まず「こんにちはPython」とこの例は tkinter を「インポート」する方法が違う。

    • from tkinter import * を使うと、そのあと Tk() や Canvas() などがそのまま書ける
    • import tkinter as tk のように書くと、tk.Tk() や tk.Canvas() のように、先頭に tk. をつけて「モジュールの中身」を使えるようになる

    次に、この例では class Application というのが使われている。文字通り「クラス」を使っている。公式ドキュメントの例だから、ということで、クラスを使う理由や目的に深入りはしない。

    このプログラムは、上から順番に実行されるのではなく、最後の3行が最初に実行されて、Application(master=root) のところで、字下げされた前半部分が実行されている。

    私が書いてみたのは「まわり将棋」のプログラム。ソースコードはこちらの mawari.py

    • 全体の構造は「簡単な Hello World プログラム」に合わせている。
    • master という用語を root に置き換えている
    • tkinter の Canvas で「9x9」の盤と、「歩」という文字を表示している
    • Canvas の上の「歩」という文字は “player” という「タグ」をつけていて、表示した後で、場所やテキストを変更している
    • Label でメッセージを表示
    • Button で「金将を投げる」という操作をさせている
    • ボタンが押されたら button_pressed という関数(正式にはメソッド)を実行する
    • scores = [0, 0, 0, 0] は「要素が4個のリスト」を作っている。リストを作ると要素の数だけ処理を繰り返したり、加工したり、合計したり、ということが簡単にできる。リストというのは Python Boot Camp テキストで紹介されている「コレクション」の一種。
    • calc_score() は random.choice メソッドを使って、ある確率である値が得られるようにしている
    • set_player_pos(), set_player_text(), set_message() の各メソッドは、プログラムを読みやすくするために、簡単な処理に、あえて名前を付けようと思って作った
    • 必要な変数をクラスの中に固めている。だからこのプログラムには global が出てこない

    実行してみるとこんな感じ。

    まわり将棋の画面キャプチャー

    駒が進むときに、1歩ずつ動いてほしいけど、一度にまとめて動いちゃうね。

    これを改善するためには「時間が経過したらなにかを実行する」という処理が必要。スカッシュゲームですでに使われているテクニックだけど、こちらに組み込むのは、次のステップの課題にしよう。。

    何か詳しく聞きたいことは?

    >たぶん大丈夫

    画面に何かを表示して動かすプログラムの「型」を紹介したかった。必要なものは最初から全部出しておいて、動かす操作だけをやっている。

    この後はなにをやってみたい?難しすぎることを目指すと大変だけど。。

    >簡単に作れるゲーム、それから、何か役に立つものを。。

    じゃあ、また次回までに相談しましょう。

    (終わり)

  • こんにちは「こんにちはPython」

    ゲームセンターあらしと学ぶ プログラミング入門 まんが版こんにちはPython (すがや みつる 著)を、プログラミングの勉強を始めたいという高校生(男子)に勧めたところ、さっそく読んでいるとのことだったので、オンラインで感想を聞いて、いくつかアドバイスをしました。

    どこまで読みましたか?

    >第7章(テキストベースのゲーム)の終わりまで。

    なにかわからなかったこと、聞きたいことありますか?

    >”You Win” とか “hantei” とか “while” とか、いろんな記述が出てきたけど、何がどう違うのか?

    “You Win” みたいなのは、命令そのものではなく、例えば print という命令に与える値。

    hantei みたいなのは、変数につけられた名前。プログラムを作る人が自由につけることができる。でも、変数に自由に使えない名前もある。

    while みたいなのが、変数に自由に使えない名前。予約語といって、これはPythonの文法で決められている。この本の51ページには予約語の一覧も、Python で予約語の一覧を出す方法も書かれている。(入門書でこれに触れている本は貴重!)

    ところで予約語に似ているけどちょっと違うのが、たとえば乱数で使う random というキーワード。使うときには random.randint() のように出てくる。

    これは Python の予約語ではなくて、このプログラムの一番最初で import random という命令を使って、これから使うよという手続きをした場合だけ使える。

    Python に入っている(追加のインストールは必要ない)けれど、Python の文法ではない(予約語ではない)というもの(標準ライブラリ)は、random の他にもたくさんある。

    ところで、次に作ってみたいものを何か思いついた?

    >画像を出したり動かしたり。。

    それは第8章(Tkinterを使ったGUIゲーム)を読んでからのほうがいいですね。テキスト表示でできそうなことで何かやってみたいことは?

    >(作りたいものを答えてもらった)

    なるほど。たしかに作れそう。でも、そのためには、もうちょっと Python の機能を知ったほうがよさそうです。例えばトランプゲームを作りたいときに、この本の知識だけだと、カードの枚数=52種類の変数が必要になっちゃうし、その扱いも大変です。

    Python Boot Camp テキスト 4. Python のデータ型(コレクション編) の内容を理解するといいと思います。無料で読めるのでぜひ。

    この Python Boot Camp テキストでは、最初のほうで FizzBuzz の実習も出てきます。「こんにちは Python」も最初の題材は FizzBuzz でしたね。。それから、Python のインストールの方法もこの本と同じですね。

    Python Boot Camp は私も運営に関わったことがあり、このテキストは、日本の Python コミュニティの技術者たちが内容をチェックしながら公開しています。私は「こんにちは Python」に Python コミュニティへのリスペクトを感じました。

    他に質問はありますか?

    >作ったゲームを配信したり配布したりできますか?

    いろんなやり方があります。場合によっては他のプログラミング言語で作り直さないといけない場合があります。でもプログラミング入門ではなくなるので、次の段階で。

    >本格的にゲーム開発をしたかったら、この本を読んだら次に何を読めばいいですか?

    作りたいものが決まって、それがこんな風に作れる、とわかってきたら、その方法に近い本を探して学ぶ、という手があります。 Python で開発されて有償・無償で配布されているゲームもあるし、Python で本格的なゲーム開発という解説書もあります。

    そういえば去年 PyCon mini Hiroshima 2019 の基調講演で、「プログラミング言語の勉強にゲーム開発は適している」という ransui さんのトークがありました。録画が YouTube にあります。ちょっと難しいかも、だけど、歴史や技術の奥深い話に興味があれば見てみてください。

    もうひとつは、さっきの「コレクション」のように、プログラミング言語としての Python のいろいろな機能をもっと深く知る勉強も考えられます。そちらも、やりたいことを広げてくれる。

    でも、「作りたいもの」を決めて、必要なことに絞って勉強するほうがモチベーションが維持しやすそうですね。

    では今回はこのくらいで。実は nishimotz もこの ransui さんのお話を思い出して、ゲームを作ろうとしています。

    年齢を超えて Python でゲーム開発の勉強をする会を、これから定期的に Zoom でやれたらと思っています。

    次回、仲間が増えているかも知れないよ。よろしくね。。

    補足:次回以降は connpass の shuaruta グループでイベント告知をしたいと考えています。よろしければチェックしてみてください。

  • オープンセミナー2020@広島

    オープンセミナー2020@広島が昨日(2020年2月8日)開催されました。


    Togetter まとめ
    私も3年くらい前から実行委員の一人として運営に関わっていて、今回は副委員長を務めました。
    おかげさまで100人を超える(懇親会の参加者だけでも67人)多くの人にご参加いただき、盛況に終わりました。
    次回以降のスタッフ希望のご連絡は @24motz 宛でも結構ですので、お待ちしています。

    PyCon mini Hiroshima 2020

    私の会社(シュアルタ)は前回に続いてスポンサーとなりました。
    去年に続いてスポンサーセッションの時間を5分いただいたのですが、イベントのテーマ「エンジニアライフHacks」に沿った話をするには時間が短すぎました。
    そこで 過去にブログに書いた内容を「PyCon mini Hiroshima のウェブサイトとアクセシビリティ」として紹介しました。

    スライドの中でご紹介した重要な告知は
    「2020年10月10日(土曜)に PyCon mini Hiroshima 2020 をやります」
    です。詳細はこれからすこしずつ発表していきます。よろしくお願いします。

    「正しいことを」の話

    スクリーンリーダー NVDA のコミュニティ活動を踏まえてウェブ制作の配慮の話をしました。
    私の活動のモチベーションを「正しいことを躊躇なく行うのは、気持ちいい」と表現しています。
    「正しいことを躊躇なく」は、Python コミュニティの著名な人たちからヒントを得たキーワードです。
    「正しいことを行うことに喜びを感じている人たち」は、アクセシビリティのコミュニティで著名な人たちについての私の観察です。
    「エンジニアは正しくないことを行いたくたい」は、自分の感じていることでもあり、よく語られていることでもあります。
    こういったことを考えていたら、前述のようなトークになりました。短い時間で説明するのは難しかったですね。

    Hacks?

    各セッションは聞きながら響いたキーワードや感じたことをツイートしています。
    2020年2月8日 @24motz のTwiLog
    どなたもきちんと考え抜いて丁寧に「エンジニアの生き方・学び方」あるいは「ソフトウェア開発の最先端」を語っておられました。
    「働くこと」と「楽しむこと」の両立についても多く語られました。
    これは、前回の「学び方Hacks」のときからテーマ決定に参加している私の反省になるのですが、設定したテーマが「Hacks」という、ちょっと斜に構えたキーワードになっているのは、アンバランスだなあ、と思いました。
    学び方にも生き方にも「Hacks はない、まじめにやろう」という、当たり前のようなことを、去年と今年と2回にかけて、登壇者の皆さんから感じ続けています。

    座長&実行委員長

    昨夜の懇親会で挨拶しましたが、PyCon mini Hiroshima 2020 の座長も、オープンセミナー2021@広島の実行委員長も、どちらも「やります」ということになりました。


    この一年、いろいろご協力、ご支援をいただければ幸いです。よろしくお願いします。

    株式会社シュアルタ

    私が2011年に広島に戻って以来、基本的にフリーランスのような働き方でエンジニアとしてやってこれたのは、オープンセミナーや PyCon のようなコミュニティのイベントで、いろいろなことを学ばせてもらったおかげだと思っています。
    株式会社シュアルタは2018年2月9日(肉球の日)設立で、今日は会社の設立記念日でもあります。
    無事に第2期が終わり、今月から第3期として営業をしております。
    ウェブアプリ、モバイルアプリなどの受託開発、ソフトウェア開発のコンサルティングをしながら、スクリーンリーダー NVDA 日本語版の活動を行い、ペット事業の研究も続けています。
    シュアルタも引き続きよろしくお願いします。