2016-04-28 13 views
0

私はPythonの問題を抱えています。私はこれについて新しく、私が欠けているものを知りたいと思っています。最も内側の要素からのタプルの要素を出力します。

私がしたいことは、ネストされたタプルを印刷することですが、内側から外側に印刷することです。例として

('C', ('B', ('A',())))null, A, B, C

として印刷されるべきすべてのタプルの最大サイズは、私はそれを行うために、再帰関数を使用して考えていた2

あります。私はこのコードを持っていますが、何が間違っているのか分かりません。

def tuplePrint(t): 
    if len(t) > 1: 
     return(tuplePrint(t[1]) 
    else: 
     return t[0] 

x = ('E', ('B', ('A',()))) 
print(tuplePrint(x)) 

私は(それは素晴らしいことだ)問題の答えを求めていないんだけど、あなたはコードで間違っているものを私に言うことができる場合にのみ、私は感謝されると思います。

誰でも?何か案は?

ありがとうございます!

+1

、あなたは、単一のprint文を持って、そしてそれがどのループの外だ、単一の値以上のものを印刷するつもりはありませんですので、また、 'T [0。。 ] 'が空のタプルの場合、' IndexError'例外が発生しますe存在しない要素にアクセスしようとしています)。 – larsks

+1

あなたが求めているのは、事実上、アンバランスなバイナリツリーの[post-order traversal](https://en.wikipedia.org/wiki/Tree_traversal#Post-order)です。 – larsks

答えて

1
  1. のために働くことがあります。
  2. 再帰の基本ケース(else文、つまりlen(t) <= 1)は、文字列"null"または単一要素リスト["null"]を返す必要があります。
  3. 関数の再帰コンポーネント(return tuplePrint(t[1]))は、現在の要素を組み込む必要があるため、おそらくtuplePrint(t[1]) + [t[0]]またはtuplePrint(t[1]) + " " + t[0]のいずれかが必要です。
  4. あなたの関数は"null A B E"のような文字列または[null, A, B, E]などのリストを返したら、あなたはそれをカンマで区切ったリストに参加して印刷したい:。", ".join(tuplePrint(x))(文字列の場合には、あなたがtuplePrint(x)によって返される文字列にsplit()を呼び出す必要が
  5. で結果の

:で起動するには

def tuplePrint(t): 
    if len(t) > 1: 
     return tuplePrint(t[1]) + [t[0]] 
    else: 
     return ["null"] 

x = ('E', ('B', ('A',()))) 
print(", ".join(tuplePrint(x))) 
# null, A, B, E 
+0

説明をありがとう。正確に私が知りたいと思っていたことは、簡単な方法で。 – Cas1337

0

これは、3行目のreturn文がreturnの内容前(を持つべきではありませんあなた

def tuplePrint(t): 
    if not t: 
     answer.insert(0, "null") 
    for each in t: 
     if isinstance(each, tuple): 
      tuplePrint(each) 
     else: 
      answer.insert(0, each) 

x = ('E', ('B', ('A',()))) 
answer = [] 
tuplePrint(x) 
print(answer) 
1
def tuple_print(t): 
    x, xs = t 
    v = 'null' 
    if len(xs): 
     v = tuple_print(xs) 
    return ', '.join((v, x)) 
関連する問題