1. 程式人生 > >python3練習100題——031

python3練習100題——031

__main__ print HA 首字母 enter 判斷 star XA +=

原題鏈接:http://www.runoob.com/python/python-exercise-example31.html

題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。

我的代碼:

def fun():
    li=[Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday]
    s=input("please enter the initial:").upper()
    results=[]
    for i in li:
        if i.startswith(s):        #startswith()函數,解決開頭匹配
results.append(i)
if len(results) ==1: return results[0] else: s += input("please input the second char:").lower() for i in li: if i.startswith(s): return i if __name__ ==__main__: print(fun())

思考:

這道題乍一看很容易,只要兩次if判斷就能實現。但是看到別人的答案,發現這是一種典型的題:一次輸入一個字母,首字母匹配一個list裏的內容,如果匹配多個,再輸入並匹配第二個字母、第三個字母……,直到只匹配出一個的時候,返回。

可能列表足夠多,要輸入好幾個字母才能判斷,那就不能用上述的兩個if實現了,應該設計一個重復判斷的函數反復調用,或者遞歸。

遞歸的實現:

def fun(s,li=None):
    li == [] if li is None else li
    a =input("please enter a character :")
    s += a
    results=[]
    for i in li:
        if i.startswith(s):      
            results.append(i)
    if len(results) ==1:               #用list儲存,用len()判斷匹配到的個數
        
return results[0] else: return fun(s,li)               #s來存儲上一次運算的結果,給下一次,用這種方式實現了遞歸 if __name__==__main__: s=‘‘                            #初始化s,重要 li=[abe,abce,abcdf,abcdef,abcda]    #其實這種方法並不全面,要找的話,找不到短的會重復匹配的項,如[a,abc,abcd],a和abc都不可能被找出 print(fun(s,li))

python3練習100題——031