python3練習100題——031
阿新 • • 發佈:2018-06-18
__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