首页 > 编程语言 > 详细

python3练习100题——031

时间:2018-06-18 11:38:15      阅读:195      评论:0      收藏:0      [点我收藏+]

原题链接: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

原文:https://www.cnblogs.com/drifter/p/9194696.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!