2012年12月8日土曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のIV部(関数)のまとめ演習6(ディクショナリの和集合)を解いてみる。

その他参考書籍

6.

コード(TextWrangler)

sample.py

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

def add_dict(lhs, rhs):
    result = {}
    for k, v in lhs.items():
        result[k] = v
    for k, v in rhs.items():
        result[k] = v
    return result

d1 = {'a':1,'b':2}
d2 = {'b':3,'c':4,'d':5,'e':1}
print(add_dict(d1,d2))
print(add_dict(d2, d1))

try:
    print(add_dict([1,2],[3,4,5]))
except Exception as err:
    print("例外を捕捉: {0}".format(err))

def add_all_type(lhs, rhs):
    if type(lhs) != type(rhs):
        raise Exception("2つの引数の型が違います。")
    elif type(lhs) == dict:
        result = {}
        for k, v in lhs.items():
            result[k] = v
        for k, v in rhs.items():
            result[k] = v
        return result
    elif type(lhs) == set:
        result = set()
        return lhs.union(rhs)
    else:
        return lhs + rhs

for a,b in [(1,2), ([1,2],[3,4]),(1.2,10), ('python', 'javascript'),
  ({'a':1,'b':2},{'c':3,'d':4,'e':5}), ({1,'a'}, {'a','b',2,3,4,5})]:
    try:
        print("{0} + {1} = {2}".format(a, b, add_all_type(a,b)))
    except Exception as err:
        print("例外を捕捉: {0}".format(err))    

入出力結果(Terminal)

$ ./sample.py
{'e': 1, 'd': 5, 'c': 4, 'b': 3, 'a': 1}
{'e': 1, 'd': 5, 'c': 4, 'b': 2, 'a': 1}
例外を捕捉: 'list' object has no attribute 'items'
1 + 2 = 3
[1, 2] + [3, 4] = [1, 2, 3, 4]
例外を捕捉: 2つの引数の型が違います。
python + javascript = pythonjavascript
{'b': 2, 'a': 1} + {'e': 5, 'd': 4, 'c': 3} = {'e': 5, 'd': 4, 'c': 3, 'b': 2, 'a': 1}
{1, 'a'} + {2, 3, 4, 5, 'b', 'a'} = {1, 2, 3, 4, 5, 'b', 'a'}
$

ちなみにJavaScriptの場合。

コード(TextWrangler)

var result = "";
function add_dict(a, b){
  var result = {};
  for(var p in a){
    result[p] = a[p];
  }
  for(var p in b){
    result[p] = b[p];
  }
  return result;
}
Object.prototype.toString = function(){
  var result = "";
  for(var  p in this){
    result += p + ": " + this[p] + "\n";
  }
  return result;
};
var o1 = {'a':1,'b':2};
var o2 = {'b':3,'c':4,'d':5,'e':6};
result += add_dict(o1, o2) +"\n" + 
  add_dict(o2, o1) + "\n";
function add_all_type(a, b){
  if(typeof(a) === 'object'){
    if(a instanceof Array){
      var result = [];
      for(var i = 0; i < a.length; i++){
        result[i] = a[i];
      }
      for(var j = 0; j < b.length; i++, j++){
        result[i] = b[j];
      }
      return result;
    } else {
      return add_dict(a, b);
    }
  } else {
    return a + b;
  }
}
result += add_all_type(1,2) + "\n" +
  add_all_type([1,2], [3,4]) + "\n" +
  add_all_type(1.2, 10) + "\n" +
  add_all_type("python", "javascript") + "\n" +
  add_all_type(o1, o2) + "\n";

$('#pre0').text(result);








						

0 コメント:

コメントを投稿