(1)传统二层循环打印
for i in range(1,10):
for j in range(1,i+1):
print('%s*%s=%s' %(j,i,i*j),end='\t')
print()
运行结果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
(2)一行打印九九乘法表
print('\n'.join(['\t'.join('%s*%s=%s' %(j,i,i*j) for j in range(1,i+1)) for i in range(1,10)]))
一行打印的分解动作如下:
print('\n'.join([]))
print('\n'.join(['\t'.join()]))
print('\n'.join(['\t'.join() for i in range(1,10)]))
print('\n'.join(['\t'.join('%s' %(i*j) for j in range(1,i+1)) for i in range(1,10)]))
print('\n'.join(['\t'.join('%s*%s=%s' %(j,i,i*j) for j in range(1,i+1)) for i in range(1,10)]))
关于str.join方法
join(self, iterable, /)
方法的作用是将str插入到iterable中的子元素之间,如果iterable是一个字符串,因为字符串也是iterable,所以会将str插入到每一个字符之间,方法返回结果为一个字符串。
Concatenate any number of strings.
The string whose method is called is inserted in between each given string.
The result is returned as a new string.
Example: ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’
注意这个方法要求iterable为字符串或者字符串数组,不能是数字列表,如下程序是错误的:
a = [ j for j in range(1,10)]
' '.join(a)
提示错误为:TypeError: sequence item 0: expected str instance, int found
注意,该方法允许在参数位置用字符串推导式来写,也是这道面试题的难点所在:
','.join('%s' %i for i in range(10))
运行结果为:‘0,1,2,3,4,5,6,7,8,9’