2016-07-20 8 views
0

従業員のリストとその上司をcsvファイルとして指定すると、従業員の階層ツリーを出力する関数を記述します。 csvファイルから従業員の階層ツリーを印刷する方法

サンプル入力

Sam, Ian, technical lead, 2009/Ian, NULL, CEO,2007/ Fred, Sam,developer, 2010 

フォーマットは名前、スーパーバイザ、指定、入社の年があります。

出力は、私はわからないが、私は以下のようにそれを試してみました

Ian CEO 2007 

-Sam Technical lead 2009 

--Fred Developer 2010 

でなければなりません。このコードやその他のソリューションの変更を提案してください。

strq = "Sam, Ian, technical lead, 2009/Ian, NULL, CEO,2007/Fred, Sam, developer, 2010" 
def treeEmployee(infoStr): 
    str1 = infoStr.split("/") 
    s2 = [] 
    for i in str1: 
     s2.append(i.split(",")) 
    for i in range(len(s2)): 
     for j in range(1, len(s2)): 
      if s2[i][1] == s2[j][0]: 
       s2[i], s2[j] = s2[j], s2[i] 
      return s2 

print treeEmployee(strq) 

私は、出力は次のようにインデントが動作するはず固定

Ian CEO 2007 

-Sam Technical lead 2009 

--Fred Developer 2010 
+0

JavaScriptで解決策は何でしょうか?それとも、あなたはPythonだけを見ているのですか?私はあなたがJS – Ayan

+3

のタグを添付して、あなたのインデントを修正してくださいと言っています。 – Julien

+1

関数を定義しても、実際に呼び出さなければ無駄です。 – Julien

答えて

0

になりたいです。インデントは、Pythonでは非常に重要です。

strq = "Sam, Ian, technical lead, 2009/Ian, NULL, CEO,2007/Fred, Sam, developer, 2010" 
def treeEmployee(infoStr): 
    str1 = infoStr.split("/") 
    s2 = [] 
    for i in str1: 
     s2.append(i.split(",")) 
    for i in range(len(s2)): 
     for j in range(1, len(s2)): 
      if s2[i][1] == s2[j][0]: 
       s2[i], s2[j] = s2[j], s2[i] 
       return s2 
+0

インデントを取得しましたが、出力が異なる –

0

これは、JSの入力から階層ツリーを生成します。

function wrapper(str) { 
 
    var elem; 
 
    str = str.split('/'); 
 

 
    function tree(parent, arr, level) { 
 
    if (!parent) { 
 
     parent = 'NULL'; 
 
    } 
 
    if (!arr) { 
 
     arr = []; 
 
    } 
 
    if (!level) { 
 
     level = 0; 
 
    } 
 
    var obj, 
 
     children = findChild(parent); 
 

 
    for (var i = 0, len = children.length; i < len; i += 1) { 
 
     elem = children[i]; 
 
     obj = { 
 
     name: elem[0], 
 
     supervisor: parent, 
 
     designation: elem[2], 
 
     yearOfJoining: elem[3], 
 
     children: [], 
 
     level: level 
 
     }; 
 
     arr.push(obj); 
 
     console.log(dashGenerator(level) + obj.name + ' ' + obj.designation + ' ' + obj.yearOfJoining); 
 
     tree(elem[0], obj.children, level + 1); 
 
    } 
 
    return arr; 
 
    } 
 

 
    function dashGenerator(level) { 
 
    var str = ''; 
 
    for (var i = 0; i < level; i += 1) { 
 
     str += '-'; 
 
    } 
 
    return str; 
 
    } 
 

 
    function findChild(parent) { 
 
    var child = []; 
 
    for (var i = 0, len = str.length; i < len; i += 1) { 
 
     elem = str[i].split(',') 
 
     if (elem[1].trim() === parent.trim()) { 
 
     child.push(elem); 
 
     } 
 
    } 
 
    return child; 
 
    } 
 
    tree(); 
 
} 
 
wrapper("Sam, Ian, technical lead, 2009/Ian, NULL, CEO,2007/ Fred, Sam,developer, 2010");

+0

表示部分を更新して、指定された出力と互換性を持たせます。 – Ayan

+0

@PranatiGあなたは大歓迎です。私は表示部分を更新しました。スニペットを実行して、結果を得てください。 – Ayan

+0

私はすべてのスペースをトリミングしているので、まだ1つのグリッチがあり、テクニカルリードがトリミングされています。そこに改善が必要です... – Ayan

関連する問題