2014年8月13日水曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の2章(Cメモリとポインタ: 何を指しているの?)、コンパスマグネット(p.49)をpythonで考えてみる。

コンパスマグネット(p.49)

コード(BBEdit, Emacs)

sample49.py

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

# 最も単純で分かりやすい方法
def go_south_east1(lat, lon):
    lat -= 1
    lon += 1
    return lat, lon

latitude = 12
longitude = -64

print('開始!現在位置:[{0}, {1}]'.format(latitude, longitude))
latitude, longitude = go_south_east1(latitude, longitude)
print('停止!現在位置:[{0}, {1}]'.format(latitude, longitude))

# グローバル変数のを使用、最も注意が必要
def go_south_east2(lat, lon):
    global latitude
    global longitude
    latitude -= 1
    longitude += 1

latitude = 12
longitude = -64

print('開始!現在位置:[{0}, {1}]'.format(latitude, longitude))
go_south_east2(latitude, longitude)
print('停止!現在位置:[{0}, {1}]'.format(latitude, longitude))

# ミュータブルな(可変性を持つ)オブジェクト、リストの利用
def go_south_east3(lat_lon):
    lat_lon[0] -= 1
    lat_lon[1] += 1

lat_lon = [12, -64]
print('開始!現在位置:[{0}, {1}]'.format(lat_lon[0], lat_lon[1]))
go_south_east3(lat_lon)
print('停止!現在位置:[{0}, {1}]'.format(lat_lon[0], lat_lon[1]))

# ミュータブルな(可変性を持つ)オブジェクト、dictionaryの利用
def go_south_east4(lat_lon):
    lat_lon['latitude'] -= 1
    lat_lon['longitude'] += 1

lat_lon = dict(latitude=12, longitude=-64)
print('開始!現在位置:[{0}, {1}]'.format(
    lat_lon['latitude'], lat_lon['longitude']))
go_south_east4(lat_lon)
print('停止!現在位置:[{0}, {1}]'.format(
    lat_lon['latitude'], lat_lon['longitude']))

# classを使用
class Ship:
    def __init__(self, latitude=12, longitude=-64):
        self.latitude = latitude
        self.longitude = longitude
    def go_south_east(self):
        self.latitude -= 1
        self.longitude += 1

ship = Ship()
print('開始!現在位置:[{0}, {1}]'.format(ship.latitude, ship.longitude))
ship.go_south_east()
print('停止!現在位置:[{0}, {1}]'.format(ship.latitude, ship.longitude))

# classと関数を使用
def go_south_east5(ship):
    ship.latitude -= 1
    ship.longitude += 1

ship = Ship()
print('開始!現在位置:[{0}, {1}]'.format(ship.latitude, ship.longitude))
go_south_east5(ship)
print('停止!現在位置:[{0}, {1}]'.format(ship.latitude, ship.longitude))

入出力結果(Terminal, IPython)

$ ./sample49.py
開始!現在位置:[12, -64]
停止!現在位置:[11, -63]
開始!現在位置:[12, -64]
停止!現在位置:[11, -63]
開始!現在位置:[12, -64]
停止!現在位置:[11, -63]
開始!現在位置:[12, -64]
停止!現在位置:[11, -63]
開始!現在位置:[12, -64]
停止!現在位置:[11, -63]
開始!現在位置:[12, -64]
停止!現在位置:[11, -63]
$

0 コメント:

コメントを投稿