字符串格式化序列的代碼將使用星號字段寬度說明符來格式化一張包含水果價格的表格,表格的總寬度由用戶輸入。因為是由用戶提供信息,所以就不能在轉換說明符中將字段寬度硬編碼。使用星號運算符就可以從轉換元組中讀出字段寬度。
#使用給定的寬度打印格式化后的價格列表 width=input('Please enter width:') price_width=10 item_width=width-price_width header_format='%-*s%*s' format ='%-*s%*.2f' print '='*width print header_format % (item_width,'Item',price_width,'Price') print '_'*width print format %(item_width,'Apples',price_width,0.4) print format %(item_width,'Pears',price_width,0.5) print format %(item_width,'Cantaloupes',price_width,1.92) print format %(item_width,'Dried Apricots(16 oz.)',price_width,8) print format %(item_width,'Prunes (4 lbs.)',price_width,12) print '='*width
下面是程序運行示例:
Please enter width:35
===================================
Item Price
___________________________________
Apples 0.40
Pears 0.50
Cantaloupes 1.92
Dried Apricots(16 oz.) 8.00
Prunes (4 lbs.) 12.00
===================================
字典示例
#簡單數據庫 #使用人名作為鍵的字典。每個人用另一個字典來表示,其鍵'phone'和'addr'分別表示他們的電話號碼和地址 people={ 'Alice':{ 'phone':'2341', 'addr':'Foo drive 23' }, 'Beth':{ 'phone':'9102', 'addr':'Bar street 42' }, 'Cecil':{ 'phone':'3158', 'addr':'Baz avenue 90' } } #針對電話號碼和地址使用的描述性標簽,會在打印輸出的時候用到 labels={ 'phone': 'phone number', 'addr': 'address' } name = raw_input('Name:') #查找電話號碼還是地址?使用正確的鍵: request = raw_input('Phone number (p) or address (a)?') #使用正確的鍵: if request =='p': key='phone' if request =='a': key='addr' #如果名字是字典中的有效鍵才打印信息: if name in people: print "%s's %s is %s."%\ (name, labels[key], people[name][key])
下面是程序運行的示例:
Name:Beth
Phone number (p) or address (a)?p
Beth's phone number is 9102.
下面是代碼清單演示了上面程序的修訂版本,它使用get方法訪問“數據庫”實體。
1 #使用get()的簡單數據庫 2 #這里添加代碼清單4-1中插入數據庫的代碼 3 people={ 4 'Alice':{ 5 'phone':'2341', 6 'addr':'Foo drive 23' 7 }, 8 9 'Beth':{ 10 'phone':'9102', 11 'addr':'Bar street 42' 12 }, 13 'Cecil':{ 14 'phone':'3158', 15 'addr':'Baz avenue 90' 16 } 17 } 18 labels={ 19 'phone':'phone number', 20 'addr':'address' 21 } 22 23 name=raw_input('Name:') 24 25 #查找電話號碼還是地址? 26 request=raw_input('Phone number (p) or address (a)?') 27 28 #使用正確的鍵: 29 key=request #如果請求既不是'p'也不是'a' 30 if request =='p': key='phone' 31 if request =='a': key='addr' 32 33 #使用get()提供默認值: 34 person= people.get(name, {}) 35 label=labels.get(key, key) 36 result=person.get(key,'not available') 37 38 print "%s's %s is %s." % (name, label, result)
下面是程序執行的例子。注意get方法帶來的靈活性如何使得程序在用戶輸入我們並未准備的值時也能做出合理的反應。
Name:Cecil
Phone number (p) or address (a)?batting average
Cecil's batting average is not available.