题目:
编写程序显示下面的表格:
a a^2 a^3
1 1 1
2 4 8
3 9 27
4 16 64
方法一:
In [1]: a = [1,2,3,4]
In [2]: for x ina:
...:print(x,x*x,x*x*x)
...:1 1 1
2 4 8
3 9 27
4 16 64
这种方法能输出结果,但显示的方式与要求并不一致。
方法二:
In [104]: def print_table(a):
...: for x in range(1,a):
...: print(str("%-3d,%-3d,%-3d" % (x,x*x,x*x*x)).replace(',',''))
...:
In [105]: print_table(5)
1 1 1
2 4 8
3 9 27
4 16 64
这种方法提升了代码的使用性,并实现了格式的对照要求。
知识补充》提示符:
格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:
%s 字符串 (采用str()的显示)
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)
%% 字符"%"
写这道题时,出现了以下几种错误的解题思路:
错误:
In [77]: defprint_table(a):
...:for x in range(1,a):
...: num= "%d,%d,%d" % (x,x*x,x*x*x)
...:print(num)
...:
...:
In [78]: print_table(4)3,9,27
错误之处在于,将for循环输出的值在循环内部赋值给一个变量,这使得每次循环,变量的值都会被最后一次循环的值所覆盖。
并且题目要求每一行的值都被打印出来,故应该在循环内部使用print打印出结果。