Python基础课:一起学习python基础题
python最近老火了,万能开发语言,很多小伙伴们要么初学,要么从别的开发语言转过来的,如果你能把下面几道基础题不费劲的写出来,基础应该可以打80分,可以进行进阶的学习了,如果下面的题目如果做不出来,拜托不要耽误时间,赶快打好基础,勿在浮沙筑高台。
题目出给新鸟打基础的,实现答案的方法千千万,如果老鸟有更厉害的答案就不要喷了,先谢谢了。
还有新鸟先不要看答案,不要看答案,不要看答案,(重要的事情说三遍)自己先去解,用自己最简单的想法去实现,能用python自带的方法就不要自己造轮子。
好啦,开始吧!
一、通常,文章(论文,帖子)的标题,都要求英文首字母大写,这是一种常见的书写规范。
现在,要求实现一个“处理函数”,能满足如下需求:
1. 能够接收任意的字符串
2. 能够将接收的这个字符串的英文首字母转换成大写
3. 能够返回转换后的字符串
例如:接收 'this is python.',会输出 'This Is Python.'
1 def capital(*args): 2 ws_list = [] 3 if args: 4 for arg in args: 5 words = arg.split(' ') 6 w_list = [] 7 for w in words: 8 w = w.capitalize() 9 w_list.append(w) 10 new_word = ' '.join(w_list) 11 ws_list.append(new_word) 12 return ws_list
'''-------------运行结果-------------- >>> capital('this is python','it\'s my apple') ['This Is Python', "It's My Apple"] '''
二、有时,我们会需要一连串等间距的数字(这在数据分析和进度控制等方面格外有用),例如:[0, 2, 4 , 6, 8]
对于上述例子,使用 list(range(0, 10))可以十分方便的完成。
但是 range 的步长只能是整数,因此,加入我们需要 [0, 0.1, 0.2, ... , 0.9], 那么 range 就不能满足我们的需求了。
因此,写一个类似 range 的函数,来支持浮点数的步长。
(我用列表推导生成,当然还有小小bug,新鸟可能阅读起来费劲,看看你能否找出bug)
1 def float_range(start, end, step): 2 return [round((x*step),1) for x in range(start,end*10) if round((x*step),1) < end and round((x*step),1) > start]
'''-------------运行结果-------------- >>> float_range(0,1,0.2) [0.0, 0.2, 0.4, 0.6, 0.8] >>> float_range(0,2,0.2) [0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8] >>> float_range(0,2,0.3) [0.0, 0.3, 0.6, 0.9, 1.2, 1.5, 1.8] >>> float_range(1,3,0.5) [0.5, 1.0, 1.5, 2.0, 2.5] '''
三、加密与解密是一种最常见的需求。
最简单加密方法之一就是,按照某种规则,将现有的字符变换成另一种。例如:a换成b, b换成c ... z换成a ... 。
按照上述的规则, 'list' 就应该变成了 'mjtu'。
现在,要求按照上述规则,完成两个函数:
1. 加密函数
2. 解密函数
一旦你完成了上述的两种函数,试着定制一个自己的字符串。为你定制的字符串类添加以上两种方法。
提示:“定制” 使用 “继承” 来实现
1 class father_security: 2 # 父加密类 3 def encrypt(self,s): #加密函数 4 self.s = s 5 return ''.join([chr(ord(x)+1) for x in self.s]) 6 7 def decrypt(self,s): #解密函数 8 self.s = s 9 return ''.join([chr(ord(x)-1) for x in self.s]) 10 11 12 class child_security(father_security): 13 # 子加密类 14 def __init__(self, s): 15 self.s = s 16 17 def child_encrypt(self): #子加密函数 18 return super().encrypt(self.s) 19 20 def child_decrypt(self): #子解密函数 21 return super().decrypt(super().encrypt(self.s))
'''-------------运行结果-------------- >>> m = child_security('apple') >>> m.child_decrypt() 'apple' >>> m.child_encrypt() 'crrng' >>> '''
四、写一个装饰器,测试函数的运行时间,现在要求大家做如下测试:
1. 可以测试函数运行的时间
2. 可以将函数运行的时间输出到屏幕上
3. 将运行时间,以日志的形式记录在指定的文件中(当作日志)。
1 import time 2 3 def run_time(func): 4 def new_func(*args, **kwargs): 5 path = r'd:\test\pythonlog.txt' 6 tmp_time = time.time() 7 start_time = time.strftime('%x %X',time.localtime()) 8 print('开始时间:{}'.format(start_time)) 9 result = func(*args) 10 end_time = time.strftime('%x %X',time.localtime()) 11 print('结束时间:{}'.format(end_time)) 12 run_time = round(time.time()-tmp_time,4) 13 print('运行时间:{}'.format(run_time)) 14 with open(path,'a', encoding='utf8') as f: 15 f.writelines(['开始时间:'+str(start_time)+'\n', '结束时间:'+str(end_time)+'\n', '运行时间:'+str(run_time)+'\n']) 16 f.flush() 17 return result 18 return new_func 19 20 21 @run_time 22 def fab(max): 23 n, a, b = 0, 0, 1 24 L = [] 25 while n < max: 26 L.append(b) 27 print(b) 28 a, b = b, a+b 29 n = n + 1 30 return L 31 32 33 @run_time 34 def fab_yield(max): 35 n, a, b = 0, 0, 1 36 while n < max: 37 yield b 38 # print b 39 a, b = b, a + b 40 n = n + 1 41 42 x = 10 43 L = [i for i in fab_yield(x)]
'''-------------运行结果-------------- >>> ========================= RESTART: D:/test/ff33.py ========================= 开始时间:06/30/17 14:43:15 结束时间:06/30/17 14:43:15 运行时间:0.0156 >>> ========================= RESTART: D:/test/ff33.py ========================= 开始时间:06/30/17 14:45:25 结束时间:06/30/17 14:45:25 运行时间:0.0312 >>> '''
记得去D盘下Test目录下看看日志是否写入
以上是python基础试题,检验一下自己是否真的入门了,如果还没有赶快加油吧!
祝你早日成功!