2013年12月21日土曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の12章(各種ツール)、12.7(練習問題)、12-17.を解いてみる。

12.7(練習問題)、12-17.

コード(BBEdit)

sample.py

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

def mean(values):
    total = 0
    for value in values:
        if type(value) != int and type(value) != float:
            raise ValueError('リストに数値以外の要素が含まれている')
        total += value
    return total / len(values)

def median(values):
    l = len(values)
    if l == 0:
        return None
    sorted_l = sorted(values)
    n = l // 2
    if l % 2 == 0:
        return (sorted_l[n - 1] + sorted_l[n]) / 2
    return sorted_l[n]

def mode(values):
    result = []
    n_c = {}
    for value in values:
        n_c[value] = n_c.get(value, 0) + 1
    m = max(n_c.values())
    for n, c in n_c.items():
        if c == m:
            result.append(n)
    return result

if __name__ == '__main__':
    values1 = list(range(1, 11))
    values2 = [1, 'python', 2]
    for values in [values1, values2]:
        print(values)
        try:
            print('平均: {0}'.format(mean(values)))
        except Exception as err:
            print(type(err), err, err.args)
    values1 = [5, 1, 4, 2, 3]
    values2 = [5, 1, 4, 2, 3, 6]
    for values in [values1, values2]:
        print(values)
        print('中央値: {0}'.format(median(values)))
    values = [0, 1, 0, 3, 2, 4, 1]
    print(values)
    print('最頻値のリスト: {0}'.format(mode(values)))

入出力結果(Terminal)

$ ./sample.py
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
平均: 5.5
[1, 'python', 2]
<class 'ValueError'> リストに数値以外の要素が含まれている ('リストに数値以外の要素が含まれている',)
[5, 1, 4, 2, 3]
中央値: 3
[5, 1, 4, 2, 3, 6]
中央値: 3.5
[0, 1, 0, 3, 2, 4, 1]
最頻値のリスト: [0, 1]
$

0 コメント:

コメントを投稿