在图片中,您会看到通常的乘法表,我认为每个人都熟悉它。
除了将构造它的整个算法压缩为一个由79个字符组成的标准Python字符串(请参阅
PEP8 )外,它没有什么特别的。 谁在乎,欢迎来猫。
首先,值得回答许多人中出现的问题:“为什么?”。 所有这一切都来自两个因素,首先,在一个好人的紧急推荐下,我对Python进行了深入研究,其次,我喜欢
演示场景的概念。 结果是希望编写(当然是大声地说)很小的东西(理想情况下是一行),但是很直观,使用Python编码的功能来完成所有这些工作。 我决定显示乘法表。
值得注意的是,我正在用Python3.7编写。 3.6版以下的版本由于缺少对f线的支持而无法正常工作,因此,工作脚本的长度将超过79个字符。
八行如何变成一行
首先,我编写了显示乘法表的代码,绝对不关心紧凑性:

上市def MultiTabl(): tabl = '' for y in range(1,11): for x in range(1,11): tabl += f'{x*y}\t' tabl += f'\n' return tabl
您可以使用生成器生成表值,并保留循环以解压缩列表。 这种方法的缺点是行数较多:

上市 def MultiTabl(): nums = [[x*y for x in range(1,11)] for y in range(1,11)] tabl = '' for line in nums: for item in line: tabl += f'{item}\t' tabl += f'\n' return tabl
您还可以使用f线为生成器安排制表符('\ t')的排列方式:
nums = [[f'{x*y}\t' for x in range(1,11)] for y in range(1,11)]
如果使用字符串join()方法,使用变量的并行分配并将循环放在一行上,则将在第一个循环中提取的列表粘贴到一个字符串中,代码大小将大大减少:

上市 def MultiTabl(): nums, tabl = [[f'{x*y}\t' for x in range(1,11)] for y in range(1,11)], '' for line in nums: tabl += ''.join(line) + '\n' return tabl
如果将join()和'\ n'添加到生成器中:
def MultiTabl(): nums, tabl = [''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)], '' for line in nums: tabl += line return tabl
现在我们可以使用字符串列表了,也可以使用join()将其粘合起来,从而摆脱循环:
def MultiTabl(): tabl = ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) return tabl
好吧,在一行中答应的选项(当然,您不能摆脱印刷品)
print( ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) )
当然,Python专家会说:“这是什么?”。但是,值得注意的是,这种方法对初学者并不明显。
您不应该太认真地对待这个作品,我在写大型文章之前就把它写成了热身,如果它带来微笑就好了,如果受益就好了。