题目
通过练习了解和掌握格式化字符串的使用。
之前的练习中使用了 print()
打印出的字符串内容是固定的,而格式化字符串可以将变量插入到字符串中打印出来,随着变量的改变打印出的内容也在改变。
加分练习
- 去掉所有变量名前面的
my_
- 试着使用更多的格式化字符。例如
%r
它的含义是“不管什么都打印出来”。 - 搜索 python 所有的格式化字符。
- 使用 python 的计算功能,将变量从英寸和磅转化为厘米和千克。
我的答案
5.0. 基础练习
my_name = 'Zed A. Shaw'
my_age = 35
my_height = 74 # 英寸
my_weight = 180 # 磅
my_eyes = 'Blue'
my_teeth = 'White'
my_hair = 'Brown'
print("let's talk about %s." % my_name)
print("He's %d inches tall." % my_height)
print("He's %d pounds heavy." % my_weight)
print("Actually that's not too heavy.")
print("He's got %s eyes and %s hair." % (my_eyes, my_hair))
print("His teeth are usually %s depending on the coffee." % my_teeth)
# 下面这行复杂一点
print("If i add %d, %d, and %d I get %d." % (
my_age, my_height, my_weight, my_age + my_height + my_weight
))
5.1. 去掉 my_
预期去掉之后没变化
5.2. 使用 %r
格式化字符
# 试用 %r 格式化字符
print("这里尝试使用新的格式化字符占位符,看看效果: %r" % "放个字符串")
print("在试试放个数字:%r" % 666)
print("这次是数字字符串:%r" % '2333')
%r
容易和 %s
混淆,其主要区别在于 %r
把原始的信息显示了出来,如字符串保留了引号。由于这个特性有人会使用 %r
进行 debug 调试
5.3. python 的格式化字符串
python 常用的格式化字符及其效果
占位符 | 作用 | 示例 | 结果 |
---|---|---|---|
%s | 格式化为字符串 | ‘%s’ % -666.66 | ‘-666’ |
%r | 格式化为原始数据 | ‘%r’ % ’ abc ‘ | ” ‘abc’ “ |
%d | 格式化为 10 进制整数 | ‘%d’ % 666 | ‘666’ |
%c | 整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255); 字符:将字符添加到指定位置 | ‘%c %c’ % (97, ‘b’) | ‘a b’ |
%u | 将被废除的方法,等于 %d | ||
%o | 格式化为 8 进制整数 | ‘%o’ % 8 | ‘10’ |
%x | 格式化为 16 进制整数 | ‘%x’ % 16 | ‘10’ |
%X | 16 进制大写 | ‘%X’ % 15 | ‘F’ |
%f | 10进制浮点数; 可以用m.n控制最小长度(m)和最小小数位(n) | ‘%f;%6.2f’ % (15,10) | ‘15.000000; 10.00’ ‘10.00’的前面有个空格占位共6位 |
%e | 使用科学计数法表示浮点数 | ‘%e’ % 0.00001 | ‘1.000000e-05’ |
%E | 同 %e e为大写 | ‘%.2E’ % 0.0004 | ‘4.00E-04’ |
%g / %G | 以 10 进制或科学计数法表示浮点数 / (大写) | ‘%g’ % 1.001 ‘%g’ % 0.00004 | ‘1.001’ ‘4e-05 |
python 格式化字符辅助符号
辅助符号 | 作用 | 示例 | 结果 |
---|---|---|---|
* | 定义宽度或者小数点精度 | ‘%*s; %.*f’ % (2, ‘a’, 2, 4) | ’ a; 4.00’ 设置了2位字符串,因此有一个空格占位 |
- | 用做左对齐 | ‘%-2s左对齐空格在右边’ % ‘a’ | ‘a 左对齐占位空格在右边’ |
+ | 在正数前显示+号 | ‘%+d, %+d, %+o, %+x’ %(-2, 3, 9, 20) | ‘-2, +3, +11, +14’ |
# | 在 8 进制前显示 0o 在 16 进制前显示 0x 或 0X | ‘%#o, %#x, %#X’ % (9, 16, 17) | ‘0o11, 0x10, 0X11’ |
0 零 | 数字前填充0而非空格 | ‘%05d’ % 5 | ‘00005’ |
(var) | 映射变量(通常用来处理字段类型的参数) | who = {‘name’:’哈哈餐馆’, ‘age’:17} ‘%(name)s is %(age)d years old’ % who | ‘哈哈餐馆 is 17 years old’ |
m.n | m 是显示的最小总宽度, n 是小数点后的位数 | ‘%4.1f’ % 5 | ’ 5.0’ |
5.4. 单位换算
# 单位换算
print("Zed A. Shaw 高 %.2f 厘米" % (height * 2.54))
print("Zed A. Shaw 重 %.2f 千克" % (weight * 0.45))