【问题标题】:Ternary and print combination giving odd results三元和打印组合给出奇怪的结果
【发布时间】:2012-12-18 00:50:46
【问题描述】:

我试图使用三元组来打印一个字符串,如果某事是真的,那么如果不是的话(足够简单,对吧?)。它没有给出任何错误,并且似乎不会造成任何麻烦。但是,运行时...

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

而且效果很好。

抛开编码不太好,为什么第一个字符串会打印两次?

【问题讨论】:

    标签: python printing ternary


    【解决方案1】:

    请允许我为你分解...

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

    【讨论】:

    • 啊...是的。我认为。我假设 if 和 else 不包括在分组中。
    【解决方案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='')
    

    【讨论】:

    • 谢谢,不过另一个答案更容易理解。
    • @Vreality2007 -- 很高兴你知道了。这个对我来说更有意义,但另一个也很好。我会把这个留给那些可能遇到这个问题的人,他们的想法和我一样。 :-)
    • 好主意。 :) 并不是你的答案是错误的,只是括号的分组帮助我理解了为什么它会这样工作(不仅仅是它的结果。)
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2021-12-30
    • 2013-08-20
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多