2012-12-18 125 views
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' 

兩次。 例如,它打印此:

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

如果你想,才能看到這些變量是什麼(這不應該的問題,因爲這只是一個概念的問題),你可以看到代碼的其餘部分here

認爲它可能是變量,我嘗試單獨打印語句(沒有三元),他們出來了,如我所料(即沒有奇怪的重複)。知道變量是好的,我試着用括號括起字符串(試圖防止字符串混合),但是,由於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

允許我打破它,你...

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='') 
+0

啊......是的。我認爲。我的假設是,如果還有某種程度上沒有包含在這些分組中。 – Vreality

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='') 
+0

謝謝,其他答案更容易理解。 – Vreality

+0

@ Vreality2007 - 我很高興你明白了。這一個對我更有意義,但另一個也很好。我會把這個留給那些可能會遇到這個想法像我一樣工作的人。 :-) – mgilson

+0

好主意。 :)並不是說你的答案是錯誤的,只是括號的分組幫助我理解了它爲什麼會這樣工作(不僅僅是它出現的內容)。 – Vreality