我想理解下面提到的代码中以下行的含义:(与如何读取该行一样?)
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 '')
答案 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 "")