声明的含义

时间:2019-07-28 08:20:17

标签: python python-3.x

我想理解下面提到的代码中以下行的含义:(与如何读取该行一样?)

print('#%*s' % (a, '#') if a else '')

通过此代码:

lines = int(input("Enter number of lines for pattern: "))
for a in range(lines):
    print('#%*s' % (a, '#') if a else '')

2 个答案:

答案 0 :(得分:2)

这是一个条件表达式:

'#%*s' % (a, '#') if a else ''

这样阅读:if变量a不为null且不为空,将其格式化,else表达式的结果为空字符串''。现在是格式部分(使用old % syntax):

'#%*s' % (a, '#')

它说:先打印#,然后打印a个空格,最后打印最后一个#字符。 *替换为a的值,然后将格式字符串应用于#字符。例如,如果a = 5,则上述表达式将得出以下结果:< / p>

'#%5s' % '#'

我们可以打印并查看结果:

print('#%5s' % '#')
#    #

请注意,%语法已被弃用,在现代Python中,建议使用str.format甚至更好,对于Python 3.6+,则使用f-strings

答案 1 :(得分:0)

您可以在此处看到一些C.21示例。因此,您的格式设置类似于:

  

将输出(您的#)设置为字符串格式,并放置其他#   在该行的末尾。在行中填充太多空间,以至于   行的总长度为a。如果a为零,那么if   语句为FALSE打印并为空行。

Enter number of lines for pattern: 9

##
# #
#  #
#   #
#    #
#     #
#      #
#       #

对于相同输出的现代解决方案如下所示:

lines = int(input("Enter number of lines for pattern: "))
for a in range(lines):
   print(("{:" + str(a) + "}{}").format("#", "#") if a else "")