Tag : Python

1 - 5 of 5

Python本

Amazonに発注していたPython本の一つが到着。

python-tutorial-book.jpg

180ページ程度で、薄くてサイズも小さいので最初は「軽い簡単な内容なのかな?」と思いきや、作者のGuido van Rossum氏が書き下ろしたというだけあってC言語のK&R本っぽい雰囲気で内容は濃い印象です。これはちょっと時間をかけて長い目でじっくり取り組む本、という趣き。

定価1,200円のところ、アマゾンのマーケットプレイスで700円でゲット。全く傷もなく、ほとんど新品です。良い買い物しました。

NOKIA N73/705NKとPython関連

ちょうどPythonを触り出して、Symbian OS搭載のNOKIA N73/705NKも持っていることだし、ちょっとこれらで遊べないかなと考え中。

ということで、まずは情報収集。

【開発環境】

【情報系】

ついでに、Python関係の本も以下の2つを発注してみました。

そういえば先日NOKIA N95が発売になることが発表になりました。(↓)

めちゃめちゃカッコ良くて物欲刺激されますが、8GBモデルも海外ではあるようなので、それが日本で出てからでもいいかなとも思いました。(出るかどうか分かりませんが)正直N73/705NKが凄く気に入っているので満足しているのもあるんですけどね。ただ、使用頻度がかなり高いカメラ機能は、個人的には画質はもう少し良いのが欲しいので画質によっては買い換えるのもありかも。(もうコンパクトカメラはNOKIAでいくことにして、カメラ単体品は買わない方向でいこうかと)

Pythonを触ってみる(その3:ゲーム編)

python-logo.png

Pythonで書かれたGPLなゲーム「PyGletSpace」

  • コードが美しくかつシンプルで優れている
  • チュートリアルとしても優れている
  • オープンソース
  • クロスプラットフォームでどのOSでも動く
  • すぐ使えて遊べる

という条件を満たすものというとなかなか無いですが、この「PyGletSpace」は太鼓判を押して「オススメ」です。

Pythonで簡単なインベーダーゲームを作ってしまうチュートリアル。まずは、出来上がったサンプルが公開されている(上記のエントリーの一番したの方の「Done!」の画像の下の「here」というリンクをクリック)のでどんなものか実際動かして試してみます。

Pythonでゲームを作るライブラリが「Pyglet」として公開されているので、まずこれをダウンロードしてインストールします。

Mac OS Xの場合はパッケージインストーラをそのまま落としてインストール。Ubuntu (Linux)の場合は「pyglet-1.0.tar.gz」ファイルを落として解凍したあと、解凍したフォルダにターミナルで移動して

$ python setup.py install

でインストール。これで準備が整います。非常に簡単です。

ゲームの起動は、OS XもUbuntuも同じようにダウンロードして解凍して出来た「PyGletSpace」にターミナルで移動して、

$ python PyGletSpace.py

で起動。以下のように起動します。(クリックで原寸大拡大)

【Mac OS X】

pygletspace-macosx.png

【Ubuntu Linux】

pygletspace-ubuntu.png

遊び方は簡単で、マウスで動かして左クリックで攻撃、やられるとターミナルごと落ちて即死亡・終了 :-) 、というシンプルなものです。

私は基本的にゲーマー気質ではなく、RPGが嫌い・苦手で、普段もほとんどゲームはしない人間ですが、「インベーダー/ギャラクシアン」とか初代ファミコンの「スターフォース」で育った世代なのでこういう頭を使わないシンプルなシューティングゲームだけは大好きなので、久々に「オォッ!」とヒットしました。

ライセンスもGPLでオープンソース、コードもシンプルで短くPythonの勉強用チュートリアルとしても使えますし、カスタマイズしたりも出来るのでこれはGOODソフトウェアです。

Pythonを触ってみる(その2:GTK編)

python-logo.png

前回のHelloworldはフォントやボタンの部品の見た目ががしょぼくてイマイチだったので、なんとか出来ないかと調べて、PythonでGTKを使う方法を発見。

インターフェイス部分は「Glade」というソフトを使ってやる、ということなので早速導入して起動。

pygtk-glade.png

ようはMac OS XでいうこところのInterface Builderですね。あっちより少しシンプルでやや「突き放し系」です。Interface BuilderにあるようなクラスやインスタンスをGUIで作ったり関連付けたりというような感じではなく、純粋にGUI部品を作ることにフォーカスする感じです。部品を並べてプロパティやアクションの定義などをしていきます。

チュートリアルを参考にしながら、部分的に日本語にしてカスタマイズ。

#! /usr/bin/env python
#-*- coding:utf-8 -*-

import sys

try:
    import pygtk
    pygtk.require("2.0")
except:
    pass
try:
    import gtk
    import gtk.glade
except:
    sys.exit(1)
    
class HelloWorldGTK:

    # アプリケーションの初期化
    def __init__(self):
    
        # Gladeファイルをセット
        self.gladefile = "gtkhelloworld.glade"
        self.wTree = gtk.glade.XML(self.gladefile)
        
        # dictionaryを作成し、接続
        dic = { "on_buttonHelloWorld_clicked" : self.buttonHelloWorld_clicked,
            "on_MainWindow_destroy" : gtk.main_quit }
        self.wTree.signal_autoconnect(dic)

    # 「こんにちは」ボタンがクリックされた時に呼ばれるメソッド
    def buttonHelloWorld_clicked(self, widget):
        print u'こんにちは!'


if __name__ == "__main__":
    hwg = HelloWorldGTK()
    gtk.main()

$ python gtkhelloworld.py

で起動。

pygtk-helloworld.png

・・・と、こんな感じで上手く起動出来ました。GUI部分がGTKになることでフォントや部品の見た目が綺麗になってGNOMEとの親和性も高くなった感じですね。

関連URI

Pythonを触ってみる

python-logo.png

.to_sとかputsという書き方が気にくわない」という理由でRubyに学習意欲が沸かず放置中の私なのですが、第二言語としてRuby以外の選択肢を物色してみることに。

そんな中、Ubuntuを使い始めてからというもの、あちらこちらで目にする「.py」の拡張子。「なんかLinuxの世界ではPythonが来てるのかな?」と思いつつ、その事を知人と話していると「Python凄いよ。少ないコードで簡単にGUIが出来る」と言われ、試してみることに。

私が言語を始めて勉強する時にまずやることは、

  1. とりあえず自分がやりたそうなことが出来るコードを探し、それをそっくりそのまま真似て書いてみる。
  2. 変数名とメソッド(関数)名をオリジナルに変える。これだけで「自分のコードになった気」になる。ここ大事。
  3. 別のサンプルコードで同じ事をやり、それらを合体させてみる。

という手順です。2.は「なんだそれパクリじゃないか」と言われそうですが、はい、そうです、パクリです。パクリは学びの全ての基本です。・・・ということで、一番大事な部分だと思ってます。

では早速、このセオリーに従ってやってみました。参考にしたのは以下のサイトの「Helloworldチュートリアル」

で、これを真似て書いたのが以下のコード。

#! /usr/bin/env python
# -*- coding:utf-8 -*-

from Tkinter import *
import Tkinter as Tk

# Applicationクラスの定義
class Application(Frame):

    def sayHi(self):
        # 文字を書き出す処理
        aLabel = Tk.Label()
        aLabel["text"] = u'こんにちは'
        aLabel.pack()

    def createWidgets(self):
        # 終了ボタンを作成
        self.quitButton = Button(self)
        self.quitButton["text"] = u'終了'
        self.quitButton["fg"]   = "red"
        self.quitButton["command"] = self.quit
        
        self.quitButton.pack({"side": "left"})
        
        # Helloボタンを作成
        self.sayHiButton = Button(self)
        self.sayHiButton["text"] = "Hello"
        self.sayHiButton["command"] = self.sayHi
        
        self.sayHiButton.pack({"side": "left"})
    
    def __init__(self, master = None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

# Applicationクラスからインスタンスを生成し、実行。
app = Application()
app.mainloop()

これを「helloworld.py」というファイル名で保存し、実行してみます。Terminal上で

$ python helloworld.py

と打つと、以下のようなプリミティブなGUIを持ったアプリが立ち上がりました。(おぉっ!と感動)

python-hello1-macosx.png

クリックすると、「こんにちは」の文字が書き出されます。「終了」ボタンで終了。

python-hello2-macosx.png

同じコードをネットワーク経由しているUbuntuのTerminalからも実行してみる。

python-hello2-ubuntu.png

と、同じように実行出来ました。いやはや素晴らしい。

Pythonは、実は以前は「本家サイトのデザインとロゴがダサい」という理由で敬遠していました。「そんな理由で・・・」とお叱りを受けそうですが、私は言語といえどもそういう部分は大事だと思っています。で、最近はロゴもサイトも新しくなって洗練されたものになったのでいい感じになったと思います。LinuxとMac OS Xで同じコードが普通に動くのも気に入りましたし、なによりコードがシンプルに書けて見た目も美しい。見た目的にはPHPより好きかも。・・・ということで次の研究対象言語はRubyではなくPythonにすることにしました。