用python输出 如下9*9 乘法口诀表。
#####方法一#####for i in range(1,10): for j in range(1,i+1): print("%2d*%2d=%2d"%(i,j,i*j),end="") print()
【评析】
图形打印题的分析方法,无外乎两点:(1)外循环控制行数,解决打印几行问题(2)内循环控制列数,解决每行打印几个图形(或式子)的问题。
当然,具体问题还需要具体分析,比如每行打印图形前有没有空格,每行打印结束还需要回车换行等等。
在python打印问题中,print函数的end参数是定义了字符串输出后的结束字符,默认是回车。因此在每行打印的过程中,为了不产生换行,我们需要自定义这个参数,比如用空格或者tab符等等。每行输出结束时(即内循环结束时)需要换行,可以直接用一个不带参数的print语句解决,因为默认输出一个回车。
#####方法二#####print(''.join([ ''.join([ "%2d*%2d=%2d"%(j,k,j*k) for k in range(1,j+1)] ) for j in range(1,10)]))
【评析】
方法二用一句打印语句结束了整个工作,非常酷!
在这个解决过程中我们用到了三个知识点:
(1)字符串的格式化输出
"%2d*%2d=%2d" % (j,k,j*k)
上面语句的意思是用j替换第一个%2d,k替换第二个,j*k替换第三个;%2d实际上是一个占位符,说明替换它的是一个整数,而且要占用2个字符位置(不足的在前面补空格);在格式字符串和实际替换值之间,用一个%间隔,并且实际替换值是多个时,要写成一个元组(用括号括起来)。
在python中可以使用的占位符如下:
'%s'%('字符串') : 后跟字符串'%d'%整型数字 :后跟整数'%f'%浮点数 :后跟小数'%c'%ascII字符 :后跟ASCII字符'%o'%8进制 :后跟int类型数字'%x'%16进制:后跟int类型数字'%e'%科学记数法:后更数字,可以整数,也可浮点数。'%r'%('字符串') :与%s相同,不同之处是,r 输出的是带引号的字符串,s 输出不带引号的字符串。其中'%n.mf'%() :n表示后面的数字或字符串占用多少位数,m表示小数点后几位数,如果你前面有 - 号。表示左对齐。其中 n 和 - 号对所有%起作用,m只应用与小数。
(2)字符串连接函数join
字符串A.join(字符串列表)
意思是用字符串A将字符串列表中的字符连接起来。
本题中,具体乘法式子之间我们用tab符连接,所以是‘’.join(...);每行内容之间使用回车符连接,所以是''.join(...)。
(3)for语句新建列表并自动赋值
info=[a for a in range(1,6)]
实际等同于:info=[1,2,3,4,5]
但这种形式可以灵活运用,比如:info=[a**2 for a in range(1,6)]
这就产生了[1,4,9,16,25]这样的列表。
在本题的第二种解法中更是把这种应用发扬光大,甚至用到了这种形式的嵌套。
另外,请猜一猜下面这句是什么意思?
print([i for i in range(1,100) if i%2==0])