单行乘法表


在图片中,您会看到通常的乘法表,我认为每个人都熟悉它。
除了将构造它的整个算法压缩为一个由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专家会说:“这是什么?”。但是,值得注意的是,这种方法对初学者并不明显。

您不应该太认真地对待这个作品,我在写大型文章之前就把它写成了热身,如果它带来微笑就好了,如果受益就好了。

Source: https://habr.com/ru/post/zh-CN458362/


All Articles