Python常见编程题1

  1. 现有字典d = {'a': 24, 'g': 52, 'i': 12, 'k': 33},如何按字典中的值对字典进行排序得到排序后的字典。

    d = {item[0]: item[1] for item in sorted(d.items(), key=lambda x:x[1])}
    或者
    d = {key:value for key, value in (sorted(d.items(), key=lambda x: x[1]))}
    
  2. 实现将字符串k1:v1|k2:v2|k3:v3处理成字典{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}

    {key: value for key, value in (
        item.split(':') for item in 'k1:v1|k2:v2|k3:v3'.split('|')
    )}
    
  3. 写出生成从mn公差为k的等差数列的生成器。

    (value for value in range(m, n + 1, k))
    

    def generate(m, n, k):
        for value in range(m, n + 1, k):
            yield value
    

    def generate(m, n, k):
        yield from range(m, n + 1, k)
    
  4. 请写出你能想到的反转一个字符串的方式。

    ''.join(reversed('hello'))
    

    'hello'[::-1]
    

    def reverse(content):
        return ''.join(content[i] for i in range(len(content) - 1, -1, -1))
    
    reverse('hello')
    

    def reverse(content):
        return reverse(content[1:]) + content[0] if len(content) > 1 else content
    
    reverse('hello')
    
  5. 不使用任何内置函数,将字符串'123'转换成整数123

    nums = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    total = 0 
    for ch in '123': 
        total *= 10 
        total += nums[ch]
    print(total)
    
  6. 写一个返回bool值的函数,判断给定的非负整数是不是回文数。

    def is_palindrome(num):
        temp = num
        total = 0
        while temp > 0:
            total = total * 10 + temp % 10
            temp //= 10
        return total == num
    
    解析1:
    num = 12345
    temp = num
    total: 0      5     54   543  5432   54321
    temp: 12345  1234   123   12   1      0
    return total == num
    
    解析2:
    num = 123321
    temp = num
    total: 0     1     12   123  1233  12332  123321
    temp: 12321 12332  1233  123   12    1       0
    
  7. 用一行代码实现求任意非负整数的阶乘。

    from functools import reduce
    
    (lambda num: reduce(int.__mul__, range(2, num + 1), 1))(5)
    

    reduce(lambda x, y: x*y, range(2, num + 1), 1)
    
  8. 写一个函数返回传入的整数列表中第二大的元素。

    def max2(x):
        m1, m2 = (x[0], x[1]) if x[0] > x[1] else (x[1], x[0])
        for index in range(2, len(x)):
            if x[index] > m1:
                m1, m2 = x[index], m1
            elif x[index] > m2:
                m2 = x[index]
        return m1, m2
    
    
    print(max2([2, 5, 6, 8, 21, 33]))
    
  9. 删除列表中的重复元素并保留原有的顺序。

        list1 = [2, 3, 2, 12, 5, 25, 3]
        new_list1 = []
        mid_list1 = [new_list1.append(item) for item in list1 if item not in new_list1]
    
        list1 = [2, 3, 2, 12, 5, 25, 3]
        new_lsit1 = list(set(list1))
        new_list1.sort(key=list1.index)
    
  10. 找出两个列表中的相同元素和不同元素。

    list1 = [1, 2, 33, 4, 21, 6]
    list2 = [2, 3, 44, 5, 6, 7]
    相同的元素:list(set(list1) & set(list2))
    不同的元素: list(set(list1) ^ set(list2))
    
  11. 列表中的某个元素出现次数占列表元素总数的半数以上,找出这个元素。

    list1 = [1, 1, 2, 5, 6, 5, 1, 1, 1, 44, 1]
    result = [item for item in set(list1) if list1.count(item) > len(list1) // 2]
    
  12. 实现对有序列表进行二分查找的算法。

    def binary_search(olist, num):
        low = 0
        heigh = len(olist) - 1
        while low <= heigh:
            mid = int((low + heigh) / 2)
            guess_num = olist[mid]
            if guess == num:
                return guess
            if guess < olist[mid]:
                low = mid + 1
            else:
                heigh = mid - 1
        return None
    
    
    def main():
        olist = [1, 3, 5 ,7, 12, 23, 34, 56, 67, 78, 89, 90, 100]
        print(binary_search(olist, 78))
    
    
    if __name__ == '__main__':
        main()
    
  13. 输入年月日,输出这一天是这一年的第几天。

    def is_leap_year(year):
        return year % 4 == 0 and year % 100 != 0 or year % 400 == 0
    
    
    def which_day(year, month, day):
        days_of_month = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
                        [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]][is_leap_year(year)]
        total = 0
        for index in range(month - 1):
            total += days_of_month[index]
        total += day
        return f'这一天是这一年的第{total}天'
    
    
    def main():
        print(which_day(1980, 11, 28))
        print(which_day(1981, 12, 31))
        print(which_day(2018, 1, 1))
        print(which_day(2019, 12, 24))
    
    
    if __name__ == '__main__':
        main()
    
  14. 统计一个字符串中各个字符出现的次数。

    str1 = 'hello, world'
    count_str = {item:str1.count(item) for item in str1}
    
  15. 在Python中如何实现单例模式?

    https://www.jianshu.com/p/6a1690f0dd00

  16. 下面的代码会输出什么。

    class A:
        
        def __init__(self, value):
            self.__value = value
        
        @property
        def value(self):
            return self.__value
    
    
    a = A(1)
    a.__value = 2
    print(a.__value)  # 2
    print(a.value)  # 1
    
  17. 实现一个记录函数执行时间的装饰器。

    import time
    
    def runtime(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            fn = func(*args, **kwargs)
            execute_time = time.time() - start_time
            return fn
        return wrapper
    
  18. 写一个遍历指定目录下指定后缀名的文件的函数。

    import os
    
    
    def find_file_ext(filepath, ext):
        file_list = os.listdir(filepath)
        result = []
        for item in file_list:
            file_ext = os.path.splitext(item)[1]
            if file_ext == ext:
                result.append(item)
        return result
    
    
  19. 有如下所示的字典,请将其转换为CSV格式。

    转换前:

    dict_corp = {
        'cn': {'id': 1, 'name': '土豆', 'desc': '土豆', 'price': {'gold': 20, 'kcoin': 20}},
        'en': {'id': 1, 'name': 'potato', 'desc': 'potato', 'price': {'gold': 20, 'kcoin': 20}},
        'kr': {'id': 1, 'name': '감자', 'desc':'감자', 'price': {'gold': 20, 'kcoin': 20}},
        'jp': {'id': 1, 'name': 'ジャガイモ', 'desc': 'ジャガイモ', 'price': {'gold': 20, 'kcoin': 20}},
    }
    

    转换后:

    ,id,name,desc,gold,kcoin  
    cn,1,土豆,土豆,20,20
    en,1,potato,potato,20,20
    kr,1,감자,감자,20,20
    jp,1,ジャガイモ,ジャガイモ,20,20
    

    参考链接 https://jingyan.baidu.com/article/fc07f989cd89b552fee51967.html

  20. 请写出从HTML页面源代码中获取a标签href属性的正则表达式。

    pattern = re.complie('<a href="(.*?)"')
    result = re.findall(pattern, html)
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值