2

私は、何かが真実である場合は文字列を出力し、そうでない場合は別の文字列を出力するためにターナリを使用しようとしていました(十分に単純ですよね?)。エラーは発生せず、問題は発生しないようです。ただし、実行中は...

print('[',dr+1,']\t',d[dr] if fullpath else '[',dr+1,']\t',d[dr].split("/")[len(d[dr].split("/"))-2], sep='')

...印刷します

'[',dr+1,']\t'

2回。たとえば、次のように出力します。

[1] [1] Accoustic
[2] [2] Classical
[3] [3] Epic
[4] [4] Rock
[5] [5] Spoof
[6] [6] Techno & Electronic

必要に応じて、変数が何であるかを確認するために(これは単なる概念の問題であるため、問題ではありません)、ここで残りのコードを確認できます。

それが変数かもしれないと思って、私はステートメントを別々に(三元なしで)印刷しようとしました、そしてそれらは私が期待したように(すなわち奇妙な重複なしで)出てきました。変数が問題ないことを知って、(文字列が混ざらないように)括弧で文字列を囲んでみましたが、Pythonはそれらを文字通りに解釈するため、文字列ではなく配列として出力されました。また、Pythonはデータ型を組み合わせることができないため、(コンマの代わりに)+記号は機能しません。私はステートメントをに変更することになりました

print('[',dr+1,']\t',d[dr]) if fullpath else print('[',dr+1,']\t',d[dr].split("/")[len(d[dr].split("/"))-2], sep='')

そしてそれはうまくいきます。

コーディングはさておき、最初の文字列が2回印刷されるのはなぜですか?

4

2 に答える 2

2

あなたのためにそれを分解させてください...

print(('['), (dr+1), (']\t'), (d[dr] if fullpath else '['), (dr+1), (']\t'), (d[dr].split("/")[len(d[dr].split("/"))-2]), sep='')

問題がわかりますか?

print(*(('[',dr+1,']\t', d[dr]) if fullpath else ('[',dr+1,']\t', d[dr].split("/")[len(d[dr].split("/"))-2])), sep='')
于 2012-12-18T00:57:10.383 に答える
2

なぜ2回印刷されないのかわかりません。

print('[',dr+1,']\t',       #first one
      d[dr] if fullpath else '[',
      dr+1,']\t',           #second one (most of it anyway)
      d[dr].split("/")[len(d[dr].split("/"))-2],
      sep='')

によってはfullpath、ステートメントは次のようになります。

print('[',dr+1,']\t',       #first one
      d[dr],dr+1,']\t',     #second one (more or less)
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')

または、次のようになります。

print('[',dr+1,']\t',
      '[',dr+1,']\t',
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')
于 2012-12-18T00:57:21.893 に答える