2016-12-14 39 views
3

一些ifelse的可改写和缩短(codegolf式)同样地,因为布尔可以如在Python整数行动。例如if a<b:return a可以被重写为作为return("",a)[a<b]如何在Python中打印时减少变量?

在此情况下(I简化可读性的条件),

if a<b: print(a) 

可以改写为以下两者:

print(("",a)[a<b]) 

(print(""),print(a))[a<b] 

(如果我们忽略换行符,否则end=""可以使用)。

a<b在所有事物上都成立时,我想递减一个变量n(整个事物在n的条件下),例如。

if a<b: 
    print(a) 
    n-=1 

while using the syntax trick above above。 在C中,(n/n--)-1不仅等于0,而且还从n减1。在Python中,我还没有找到办法做到这一点。一些无效的语法我尝试:

print(("",a+(n/n--)-1)[a<b]) 

(print(""),(print(a);n-=1))[a<b] 

如何递减变量(并打印a)当条件使用这种“伎俩”是真的吗?


1,2,3:这些陈述并非总是如此

+12

请不要做奇怪的事情。 – Maroun

+0

@MarounMaroun对我来说这似乎不奇怪:)总之,我会在将来发布一个潜在的奇怪问题之前考虑两次。感谢您注意我! –

+0

很抱歉给大家,因为措辞标题不是我的区域。任何指导方针或其他建议,将不胜感激。 –

回答

9

Python是不是C.首先,Python没有一个递减操作,所以print(n--)韩元”工作。另一方面,Python中的赋值是语句,而不是表达式,所以print(n-=1)将不起作用。

如果你真的想你的打印语句有副作用,它可以调用一个函数:

def decrement(): 
    global n 
    n -= 1 
    return n 
print(decrement()) 

但是不要。没有人会期望你的印刷声明有副作用,所以当评论你的印刷声明改变程序的结果时,每个人都会感到惊讶。

编辑:我只是注意到,这是一个代码高尔夫问题。在那种情况下,我的文体建议并不真正有效。每个人都希望打高尔夫球的代码很奇怪。

Ps。如果您的目标是将if语句更改为表达式,请使用andor进行短路。例如:

a<b and (print(a), decrement()) 

或者使用if ... else表达

(print(a),decrement()) if a<b else None 
+0

我不同意'在这种情况下,我的文体建议并不真正有效。“ Codegolf不是问题的主要部分:) –

+2

你不应该'返回n'?这会打印出“无”,对吧? –

+1

谢谢@hiroprotagonist! –