« [政治] 自らを助く社会を助けよ | トップページ | [ Python/LLRing] re: 君ならどう書く 2.0 -Round 1- »

2006/08/26

[Python / LLRing ] re:君ならどう書く2.0 -Round 3-

Python で書いてみる。引数として与えられた数値のうち最大の数値を '*' 20個であらわし、他の数値は '*' をつかった相対的な長さで表現することにしよう。

import sys

# descending sort
# because all argument are recognized as string,
# it is necessary transform str to int. After that,
# using sort( reverse=True ).
num_list = []
for arg in sys.argv[1: ]:
        num_list.append( float(arg) )
num_list.sort( reverse = True )

# Maximum is represented by ('*' * 20).
# others are represented by relative length with '*'.
args_and_str = { num_list[0]: '*' * 20 }
for anum in num_list[1: ]:
        relative_length = int( round(( anum / num_list[0] ) * 20) )
        args_and_str[ anum ] = '*' * relative_length 

# display graph
key_list = args_and_str.keys()
key_list.sort(reverse = True)
for akey in key_list:
        print "%g : %s" % ( akey, args_and_str[akey] )

本当は太字の部分は
#for akey in args_and_str.keys().sort( reverse = True ):
って一行で片付けたかったんだけど、これでは Iteratable object が返らないみたいだし*1、無理にやろうとすると複雑になりそうな予感がしたので3行に分割することにしました。

読みやすいコードを意識したのですがどうでしょうか?
他の方のコードを見ていると場違いな気がしてきました orz

*1: list.sort() は in place の Stable 置換なので新たなリストオブジェクトは返ってきません。None が返ってきます。

Relative
re: 君ならどう書く 2.0 -Round 1-
re: 君ならどう書く 2.0 -Round 1- 改

|

« [政治] 自らを助く社会を助けよ | トップページ | [ Python/LLRing] re: 君ならどう書く 2.0 -Round 1- »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/103108/11608970

この記事へのトラックバック一覧です: [Python / LLRing ] re:君ならどう書く2.0 -Round 3-:

« [政治] 自らを助く社会を助けよ | トップページ | [ Python/LLRing] re: 君ならどう書く 2.0 -Round 1- »