我可能处于一种独特的情况,即将空字符串评估为true将节省几行代码。 (我理解空字符串评估为false。如下所示)
'' and print ("empty string is true")
'0' and print ("non-empty string is true")
> non-empty string is true
原因如下:
这没关系。但请查看输出。
def baseN(num,b):
return (num == 0) and "0" or
(baseN(num // b, b) + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
> baseN(32,16)
> 020
更改最后一个结果(在递归结束时)以打印出空字符串,这给了我错误。
def baseN(num,b):
return (num == 0) and "" or
( baseN(num // b, b) + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
> baseN(32,16)
> File "<stdin>", line 2, in baseN
> RuntimeError: maximum recursion depth exceeded in comparison
这显然不起作用,因为(num==0) and "" (false)
总是会评估为False - &gt;导致无终止的递归呼叫。
有没有办法只使用逻辑运算/表达式来修复它(没有if / else语句)?
以下内容有效。但它不会只使用逻辑运算符。
def baseN(num,b):
if (num==0):
return ""
else:
return (baseN(num // b, b)
+ "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
baseN(32,16)
答案 0 :(得分:6)
Python有一个三元运算符:
def baseN(num,b):
return baseN(num // b, b) + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b] if num else ""
答案 1 :(得分:1)
如果我正确理解了这个问题,你想要将空字符串计算为True。
在这种情况下,您可以取消空字符串并将其设为True而不是false:
>>> bool("")
False
>>> bool(not "")
True
答案 2 :(得分:1)
在Python中,空序列被认为是假的,包括字符串。如果列表非空,则列表被视为True,因此上面的代码可用于以下情况:
def baseN(num,b):
return ''.join((num == 0) and [''] or
[( baseN(num // b, b) + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])])
就我个人而言,我认为这会让事情变得不那么容易,我会选择使用if语句。
答案 3 :(得分:0)
如果您的目标是缩短代码,那么无论如何您都可以省略else
部分:
def baseN(num,b):
if (num==0): return ""
return (baseN(num // b, b)
+ "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
就个人而言,我觉得这更具可读性。