近来用python自带shell学习时遇到的一点问题与大家分享,大神和牛人可能对此不屑敬请跳过,但吾等菜鸟水货初遇此问题还是会纠结好久的,废话不多,先上执行代码。
首先是书上的代码,请看下图:
由于书本的主要对象时Python2.X系列,而我这个水货安装的是3.6版本,故此对程序做了一点修改,如下所示:
#字符串格式化实例2
width =int (input('请输入宽度: '))
price_width = 10
item_width = width - price_width
header_format = '%-*s%*s'#这部分还是照搬2.7版本的,为了做个对比
#format = '%-*s%*.2f%%'
print('='*width)
print(header_format %(item_width,'Item',price_width,'Price'))
print('-'*width)
print("{:*<{}}{:>{}}".format('Apples',item_width,0.40,price_width))
print("{:&<{}}{:>{}}".format('Pears',item_width,0.50,price_width))
print("{:-<{}}{:>{}}".format('Cantaloupes',item_width,1.95,price_width))
print("{:=<{}}{:>{}}".format('Dried Apricots(16 oz.)',item_width,8.00,price_width))
print("{:<{}}{:>{}}".format('Prunes (4 lbs.)',item_width,12.00,price_width))
print('=' * width)
书上告诉我们结果是这样的:
我运行的结果是这样地:
囧感十足!然后我就开始了长时间的纠结,为啥我的代码打不出人家书本上的的效果?
研究代码后发现一个问题,理论上’=’与’-‘的打印数量应该是一样的,但看了运行结果却发现’-‘生生的比’=’短了好多。此时我开始怀疑是不是各个字符的长度不同,为了确定这个问题,我尝试修改局部代码,通过打印不同的可打印符号确定是否各个字符之间大小不同。
print("{:*<{}}{:>{}}".format('Apples',item_width,0.40,price_width))
print("{:&<{}}{:>{}}".format('Pears',item_width,0.50,price_width))
print("{:-<{}}{:>{}}".format('Cantaloupes',item_width,1.95,price_width))
print("{:=<{}}{:>{}}".format('Dried Apricots(16 oz.)',item_width,8.00,price_width))
print("{:<{}}{:>{}}".format('Prunes (4 lbs.)',item_width,12.00,price_width))
结果如下:
到这里大家可以明显的看出不同的字符在Shell显示中的大小是不同的。
思索了好一阵子,也百度和CSDN搜索了一些关键词,但没有解答,突然想到以前改论文的时候字体不同会造成显示效果的不同。于是决定更改一下。
本人机器上安装python的时候默认字体为“微软雅黑”,通过shell界面=>菜单栏Options项=>Configure IDLE选项=>Settings窗口Fonts/Tabs选项卡中修改字体类型,将雅黑改为标准黑体。
更改后结果如下:
还原占位字符为空格后,效果如下:
好了,终于得到自己要的结果了!
总结:
作为菜鸟弱鸡的我们,在学习过程中难免遇到类似的情况,明明照本宣科的敲代码,然后结果与剧本完全不同。有不少人会以“不要在意这些细节”来安慰自己,然后轻松的跳过去不再理会。实际上当遇到问题时最好认真思索一下,哪怕暂时跳过,也不要完全丢下,日后遇到的问题会更多,总不能都放下跳过。趁学习时期尽量为以后扫清地雷,积累解决问题经验,为扫雷填坑做充分准备。