Python 之初识函数 (day08 作业习题)

1.
写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

def conf(l):
lisl = l[1::2]
if type(lisl) != list:
lisl = list(lisl)
return lisl
print(conf([1,2,3,4]))
print('===========')
print(conf((1,2,3,4)))

经验总结:
通过这道题,我们能发现很多问题,比如说无论在基础数据类型,还是在函数中,当出现列表,字符串,元祖,索引下标
通过索引下标来弄奇偶数的时候,我们首先应该想到的是索引切片

2.
写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。

def conf(l):
if len(l) > 5:
print('输入的值长度大于5')
else:
print('输入的值长度不大于5')
conf('abcdefg')
conf([1,2,3,4,5,6])
conf((1,2,3,4,5,6))

本题总结:虽然我们在自定义函数时候,能够解决特定的问题,但是我们仍然不要忘记我们之前的方法
这些方法不仅缩短我们编写代码的时间,执行效率也高于我们自己写的代码,eg.len()


3.写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

def conf(l):
if len(l)>2 :
l = l[0:2]
return l
print(conf([1,2,3,4])) [1,2]
print(conf([1,2])) [1,2]
print(conf([1])) [1]
print(conf([0,0,1,2,3,4,5])) [0,0]


4.写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。


def func(l):
dicl = {'digit':0 ,'word':0 ,'space':0 ,'other':0}
for i in l :
if i.isdigit():
dicl['digit'] = dicl['digit'] + 1
elif i.isalpha():
dicl['word'] = dicl['word'] + 1
elif i.isspace():
dicl['space'] = dicl['space'] + 1
else:
dicl['other'] = dicl['other'] + 1
return dicl
print(func('abc123 #%!'))

本题总结:
本次主要说明两个问题:首先第一个问题,我在之前记方放时候的混淆问题
isdigit: 判断字符串是否由数字组成
isalpha: 判断字符串是否由字母组成
isspace: 判断字符串是否由空格组成
之前我认为isdigit()是:判断是否是数字,但其实是判断字符串是否由数字组成,
这其中是有很大不同的,前一个用它来判断该字符是不是数字,其字符本身就得是数字
而判断字符串是否由数字组成,却是原本字符是字符串,但是判断字符串里面的内容是不是由数字构成的
在这方面我们应该牢记,因为在这个问题上已经吃过一次亏了,然后就是isspace()判断是否由空格组成,顺便记下
第二个是当遇到很多变量的时候,比如说就是这道题,由四个变量,我们要尽力把它存在数组中,应为数组由对应关系,key->values
总体来说做题还是少,没有经验,就像第一题一样,当提到列表和偶数问题你却想不到切片的方法


5.写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。

def func(l):
if type(l) is str and l :
for i in l :
if i.isspace():
return True
if type(l) is list or type(l) is tuple and l :
for i in l :
if not i :
return True
if not l:
return False

print(func(' 123'))
print(func('123'))
print(func([[],1,2]))
print(func([1,2]))
print(func([1,2,[]]))
print(func((1,2,'',())))
True
None
True
None
True
True

本题总结:该题基本框架和我想的整体上思路上是一致的,但是有些细节却处理的不是很完善,甚至在逻辑上忽略了一些关键的知识点
比如在一开始我只是想到由于字符串和列表,元祖空的形式不一样,字符串空是空格,而列表和元祖空分别是(),[].
但是在解决问题上我们却忽略了要判断参数本身是否存在问题,因为[] ,() 也都是列表类型和元祖类型,如果不判断他们是否存在,
他们都会进入for循环,所以不管最后怎么读值,返回的都是True
在解决问题上,和学习知识的时候,我忽略了 and 和 not 的知识,但是通过这道题,我看到了一些问题,and 和 not 的功能也是非常强大的,
有时我们在做项目的时候,肯定会判断它是否存在,and l 就可以解决,l 位真值才会继续执行,同时学会如何使用 not。感触很多,以前被忽略
的一个知识点居然能成为解这道题的关键。
同时,也看到了return 的作用,它不仅能够返回值,同时又能结束函数的循环,在函数中,也逐渐体会return的作用,感觉像之前使用的break


6.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

def func (x):
for i in x :
if type(x[i]) is str and x[i]:
x[i] = x[i][0:2]
if type(x[i]) is int and x[i]:
x[i] = str(x[i])
x[i] = x[i][0:2]
if not x[i]:
return False
return x
print(func({'alex':'1234','lisir':123}))

本题总结:这道题做的非常完美,简直无敌,首先这道题让你传的实参时字典,当出现字典的时候,我们要考虑键和值的问题,
for循环,默认打印key的值,众所周知,我们要想修改字典的时候,格式一般都是:字典名[key],我们通过key就可以使用修改它的值,
在这道题里面我给自己增加了一点难度,比如说我传的value第二个时整形,整形不能直接用len()方法,我对其进行的强转,
同时这次我用切片来实现这样的功能,体现了活学活用的特点

这个是这道题的标准答案:

def func(dic):
for k in dic:
if len(dic[k]) > 2:
dic[k] = dic[k][:2]
return dic
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
print(func(dic))

绝对自己的代码考虑的还是不是很全面,比如它的代码,在实参上考虑到了列表,同时我在切片时是直接切牌,
而它是判断切片,如果当你的列表或字符串不够2的话我的代码可能会报错,同时在逻辑上它的代码会更严谨


7.写函数,接收两个数字参数,返回比较大的那个数字。

def func(a ,b):
return a if a > b else b
print(func(1,2))

本题总结:在做本题的时候,根据学习C语言的经验,我首先想到的就是三目运算符求解:a > b ? a :b 。当然这个是C语言里的,那么Python呢?
a if a > b else b .意思一样都是if a > b ,返回 a ,否则返回 b

三目运算符:
变量 = 条件返回True的结果 if 条件 else 条件返回False的结果
必须要有结果
必须要有if和else
只能是简单的情况


8.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。

def conf (name , context):
with open(name,'r',encoding='utf-8') as f1 ,open('homework02','w',encoding='utf-8') as f2 :
for line in f1 :
if 'hello' in line :
line= line.replace('hello',context)
f2.write(line)
conf(name = 'homework01',context='今天的作业有一定的难度')
import os
os.remove('homework01')
os.rename('homework02','homework01')

本题总结:文件修改还是不熟练,写的时候思路不清晰,甚至在 if 'hello' in line 中 将顺序弄反,可见思路的混乱,勤加练习!

思路分析:首先做文件修改的时候我们要知道,文件本身是不能修改的,所以我们的思路是先读取文件信息。用for遍历,一行一行的读。
当遇到你要修改的信息是,对当行的信息进行替换,每行信心的数据类型是 str 类型,同时我们创建一个新的空文件,使用写功能,
将修改完信息写入新创建的文件,然后直至for循环完毕,我们调入 os , 首先将最开始文件输出,然后再将文件重命名,
这样看起来就像是文件被修改了一样,其实操作起来并不是那么回事。

猜你喜欢

转载自www.cnblogs.com/if-it-is-possible/p/11461552.html