2007/06/15

お題4:入れ子リストの中身を順に表示

お題4:入れ子リストの中身を順に表示 (Python Workshop the Edge 2007)

お題4:入れ子リストの中身を順に表示

整数かリストが入っているような入れ子になったリストを考える。
(例:[1, [2, 3, 4], 5, [[[6], [7, 8], 9], 10])

* 入れ子リストが与えられたときに中身を順に表示するような関数を作れ。
* 与えられたオブジェクトが「整数とリストだけでできている」かどうかをチェックしてTrueかFalseを返す関数を作れ。

というわけで作ってみた。
眠いのでコメント控えめ。
#/usr/bin/env python2.5
# -*- coding: utf-8 -*-

class SearchList:
   def isInt(self, obj):
      if (obj.__class__ == int):
         return True;
      else:
         return False;
   def isList(self, obj):
      if (obj.__class__ == list):
         return True;
      else:
         return False;
   def canRead(self, obj):
      if (self.isInt(obj)):
         return True;
      elif (self.isList(obj)):
         for var in obj:
            if (not self.canRead(var)):
               return False;
         return True;
   def printList(self, obj, message = ""):
      if (self.canRead(obj)):
         for var in obj:
            if (self.isInt(var)):
               message = message + str(var);
            else:
               message = message + str(self.printList(var, message));
      else:
         message = "このオブジェクトは読み込めませんてば。";
      return message;

if ( __name__ == "__main__"):
   #以下、ひたすら動作確認
   list1 = [1, [2, 3, 4], 5, [[[6], [7, 8], 9], 10]];
   list2 = [1, [2, 3, 4], 5, [[[6], [7, "string"], 9], 10]];
   sl = SearchList();
   
   print sl.canRead(list1);
   print sl.printList(list1);

   print sl.canRead(list2);
   print sl.printList(list2);
リストの要素を全てプリントする関数を作って、そこにもしその要素がリストだったらという分岐を加える。
で、リストだったらそのリストの中身を全てプリントする関数(自分自身)を呼び出す。
って感じで関数を作りました。
なぜかクラスにまとめてありますが。
これと課題1を組み合わせればフォルダの中身も全て同期するプログラムが書けるわけですね。

0 件のコメント: