• 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基础试题,检验一下自己是否真的入门了,如果还没有赶快加油吧!

    祝你早日成功!

  • 相关阅读:
    (二)正反向代理
    (一)服务器架构详解
    斐波那契数列
    旋转数组的最小值
    23 入栈 出栈
    重建二叉树
    22 大端序和小端序
    反转单链表
    替换空格
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/yuebei/p/7101168.html
Copyright © 2020-2023  润新知