天天看點

【Python之旅】第二篇(五):基于清單、字典和元組的員工資訊處理接口

1.基本需求

    編寫一個查詢員工資訊表的程式,實作如下功能:

(1)讓使用者輸入不小于3個字元查詢員工資訊

(2)通過員工号或員工個人資訊可以精确或模糊查詢到員工資訊

(3)輸出員工資訊

2.實作代碼與注釋

   首先提供員工資訊的txt檔案:

1

2

3

4

<code>xpleaf@xpleaf-machine:/mnt/hgfs/python/day3$ more student_info.txt </code>

<code>stu1101 mingjia.xu </code><code>275896019</code><code>@qq.com </code><code>263</code> <code>systemadmin </code><code>18810404260</code>

<code>stu1102 yangjiansong [email protected] a8music systemadmin </code><code>13601247960</code>

<code>stu1103 zouxinkai zouxinkai_2006@</code><code>126</code><code>.com jishubu systemadmin </code><code>1861214111</code>

    基于上述需求,利用清單、字典和元組的相關處理函數,編寫如下程式:

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<code>#!/usr/bin/env python</code>

<code>staff_dic = {}    #從檔案中讀取員工資訊,并作為字典處理</code>

<code>f = file(</code><code>'student_info.txt'</code><code>)</code>

<code>for</code> <code>line </code><code>in</code> <code>f.xreadlines():</code>

<code>    </code><code>stu_id, stu_name, mail, company, title, phone = line.split() #取檔案一行中每一列元素</code>

<code>    </code><code>staff_dic[stu_id] = [stu_name, mail, company, title, phone]   #key值對應的value值為一清單</code>

<code>    </code> 

<code>while</code> <code>true:</code>

<code>    </code><code>query = raw_input(</code><code>'\033[32;1mplease input the query string:\033[0m'</code><code>).strip() </code>

<code>    </code><code>if</code> <code>len(query) &lt; </code><code>3</code><code>:    #如果輸入查詢的字元少于</code><code>3</code><code>,則要求重新輸入</code>

<code>        </code><code>print </code><code>'you have to input at least 3 letters to query!'</code>

<code>        </code><code>continue</code>

<code>    </code><code>match_counter = </code><code>0</code> <code>#計數器,判斷是否有比對到員工資訊</code>

<code>    </code><code>for</code> <code>k,v </code><code>in</code> <code>staff_dic.items():    #.items(),key值作為清單中,元組的左元素,key值(這裡為清單)則作為右元素</code>

<code>        </code><code>index = k.find(query) #find()傳回查詢到字元串的首個字元的索引,找空串傳回</code><code>0</code><code>,找不到傳回-</code><code>1</code>

<code>        </code><code>if</code> <code>k.find(query) != -</code><code>1</code><code>:  #如果找到</code>

<code>            </code><code>print k[:index] + </code><code>'\033[32;1m%s\033[0m'</code> <code>% query + k[index + len(query):],v    #這裡會有使用者輸入的内容進行顔色加深</code>

<code>            </code><code>match_counter += </code><code>1</code>

<code>        </code><code>else</code><code>:</code>

<code>            </code><code>str_v = </code><code>'\t'</code><code>.join(v)  #将清單中的元素連接配接為字元串</code>

<code>            </code><code>index = str_v.find(query) #方法如上面查找key值一樣</code>

<code>            </code><code>if</code> <code>index != -</code><code>1</code><code>:</code>

<code>                </code><code>print k,str_v[:index] + </code><code>'\033[32;1m%s\033[0m'</code> <code>% query + str_v[index + len(query):]</code>

<code>                </code><code>match_counter += </code><code>1</code>

<code>    </code><code>print </code><code>'matched \033[31;1m%s\033[0m records!'</code> <code>% (match_counter)</code>

3.測試

    基于上述的情況,對可能出現的情況和結果,測試如下:

<code>please input the query string:stu1101    ===&gt;對員工号(鍵值)精确查詢</code>

<code>stu1101 [</code><code>'mingjia.xu'</code><code>, </code><code>'[email protected]'</code><code>, </code><code>'263'</code><code>, </code><code>'systemadmin'</code><code>, </code><code>'18810404260'</code><code>]</code>

<code>matched </code><code>1</code> <code>records!</code>

<code>please input the query string:stu    ===&gt;對員工号(鍵值)模糊查詢</code>

<code>stu1103 [</code><code>'zouxinkai'</code><code>, </code><code>'[email protected]'</code><code>, </code><code>'jishubu'</code><code>, </code><code>'systemadmin'</code><code>, </code><code>'1861214111'</code><code>]</code>

<code>stu1102 [</code><code>'yangjiansong'</code><code>, </code><code>'[email protected]'</code><code>, </code><code>'a8music'</code><code>, </code><code>'systemadmin'</code><code>, </code><code>'13601247960'</code><code>]</code>

<code>matched </code><code>3</code> <code>records!</code>

<code>please input the query string:kai    ===&gt;對員工資訊(value值)模糊查詢</code>

<code>stu1103 zouxinkai  zouxinkai_2006@</code><code>126</code><code>.com  jishubu systemadmin </code><code>1861214111</code>

<code>please input the query string:zou</code>

<code></code>