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

本来想着设计一个重复判断的函数调用,但是有问题。

只能写成这样:

def fun():
s=''
while True:
a=input("please enter a character:")
s+=a
results=[]
li=['abd','abce','abcdf','abcdef','abcda','kw','kxx','Saturday','Sunday']
for i in li:
if i.startswith(s):
results.append(i)
if len(results) ==1:
return results[0]

后来改了改,函数参数设置个s,就避免了每一轮循环s保存不下来的问题,还是能写出来了~

def fun():
s=''
x=None
while not x:        #while的条件不能是True了,因为retrun在下面的函数了。
s,x=judge(s)
print(x) def judge(s):
a=input("please enter a character:")
s+=a
results=[]
li=['abd','abce','abcdf','abcdef','abcda','kw','kxx','Saturday','Sunday']
for i in li:
if i.startswith(s):
results.append(i)
if len(results) ==1:
return s,results[0]
else:
return s,None    #要这一句,不然默认返回的None传到上面两个参数会报错

python3练习100题——031的更多相关文章

  1. python3练习100题——003

    今天继续-答案都会通过python3测试- 原题链接:http://www.runoob.com/python/python-exercise-example3.html 题目:一个整数,它加上100 ...

  2. python3练习100题——002

    因为特殊原因,昨天没有做题.今天继续- 原题链接:http://www.runoob.com/python/python-exercise-example2.html 题目: 企业发放的奖金根据利润提 ...

  3. python3练习100题——004

    继续做题-经过python3的测试 原题链接:http://www.runoob.com/python/python-exercise-example4.html 题目:输入某年某月某日,判断这一天是 ...

  4. python3练习100题——036

    原题链接:http://www.runoob.com/python/python-exercise-example36.html 题目:求100之内的素数. 之前有类似的题,所以这次遇到觉得很容易了, ...

  5. python3练习100题——035

    原题链接:http://www.runoob.com/python/python-exercise-example34.html 题目:文本颜色设置. 学习了一下python3 的文本颜色设置. 其实 ...

  6. python3练习100题——020

    原题链接:http://www.runoob.com/python/python-exercise-example20.html 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下 ...

  7. python3练习100题——013

    熟悉的水仙花数来了,,,... 原题链接:http://www.runoob.com/python/python-exercise-example13.html 题目:打印出所有的"水仙花数 ...

  8. python3练习100题——056

    题目:画图,学用circle画圆形. 可以用turtle.circle画图. import turtle turtle.setup(0.6,0.6) turtle.pensize(3) turtle. ...

  9. python3练习100题——050

    题目:输出一个随机数. 程序分析:使用 random 模块. import random print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数 pri ...

随机推荐

  1. centos7系统启动流程

    前提:pc主机,MBR架构 第一步:post(power on system test)加电自检. pc机的主板上有个rom芯片(CMOS),加电后,cpu去找这个raw,然后读取里面的指令,检测机器 ...

  2. Django3的安装以及web项目的创建

    cmd 直接输入:pip install -i https://pypi.douban.com/simple django 2.检测是否安装成功:用到的命令:import  django  ,检测版本 ...

  3. NFS服务配置 Linux

    两台机器: NFS服务器:192.168.1.100 (我的是Ubuntu系统) 客户机:192.168.1.123 (保证两台机器互相可以ping通) 需求:在NFS服务器上创建一个共享文件夹/ho ...

  4. MySQL数据库root密码忘记丢失重置方法

    对于DBA来说,丢失超管用户root的密码是致命的, 可以通过添加--ship-grant-tables参数来跳过权限表. 1.忘记root密码,进不去数据库: 这个时候需要强制停库,先查看MySQL ...

  5. [转]Android Adapter以及getView()方法的理解

    Android Adapter基本理解: 我的理解是: 1.一个有许多getter的类(就是getView(),getCount()....这些方法) 2.有多少个get方法?都是什么? 这些gett ...

  6. C#在屏幕画点

    Graphics类没有提供直接画点的方法,最开始想使用填充圆形区域來实现,结果发现点很大,占据了4个像素.使用起点和终点一样来划线什么也没画出.画矩形,画椭圆都没实现.最后试到填充矩形,这次成功了. ...

  7. win10下GO的环境配置

    目录 问题描述 环境变量配置 问题描述 win10 下配置 GO 语言的运行环境,主要是环境变量的设置 环境变量配置 在windows的PATH变量中添加go的可执行文件所在的目录: PATH=D:\ ...

  8. matlab仿真随机数的产生

    概率论和数理统计实验(matlab中实现) 一.伯努利分布 R=binornd(N,P); //N,P为二次分布的俩个参数,返回服从参数为N,P的二项分布的随机数,且N,P,R的形式相同. R=bin ...

  9. 转:Flutter开发中踩过的坑

    记录一下入手Flutter后实际开发中踩过的一些坑,这些坑希望后来者踩的越少越好.本文章默认读者已经掌握Flutter初步开发基础. 坑1问题:在debug模式下,App启动第一个页面会很慢,甚至是黑 ...

  10. form表单中给input 添加 数量可以增减的按钮

    只需给input表单增加type=number即可