題目
通過練習瞭解和掌握格式化字符串的使用。
之前的練習中使用了 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))